5

为什么我不能在这里导出 Show?

{-# LANGUAGE ExistentialQuantification #-}
data Obj = forall a. (Show a) => Item_Obj {get :: a, rest :: Obj} | No_Obj deriving Show

xs :: Obj
xs = Item_Obj 1 $ Item_Obj "foo" $ Item_Obj 'c' $ No_Obj

main :: IO ()
main = putStrLn . show $ xs
4

2 回答 2

9

haskell-98 数据类型中不允许这种上下文。读这个

当然,您可以使用StandaloneDeriving扩展编写独立实例,让 ghc 完成其余的工作。

deriving instance Show Obj
于 2012-09-17T02:35:05.460 回答
2

基本上是因为当你尝试这样做时,GHC 的头部会爆炸。换句话说,它根本没有被教导如何为存在类型派生实例。等待几个版本号通过,然后重试。

于 2012-09-17T02:31:10.190 回答