使用ExistentialQuantification扩展时导出节目?

时间:2012-09-17 02:11:57

标签: haskell existential-type

为什么我不能在这里获得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

2 个答案:

答案 0 :(得分:9)

haskell-98数据类型中不允许使用此类上下文。阅读this

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

deriving instance Show Obj

答案 1 :(得分:2)

基本上是因为GHC的头部会在您尝试时爆炸。换句话说,它根本没有被教导如何导出存在类型的实例。等待几个版本号通过,然后再试一次。