为什么我不能在这里获得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
答案 0 :(得分:9)
haskell-98数据类型中不允许使用此类上下文。阅读this
当然,您可以使用StandaloneDeriving
扩展名编写独立实例,让ghc完成剩余的工作。
deriving instance Show Obj
答案 1 :(得分:2)
基本上是因为GHC的头部会在您尝试时爆炸。换句话说,它根本没有被教导如何导出存在类型的实例。等待几个版本号通过,然后再试一次。