2012-09-17 14 views
5

Warum kann ich Show hier nicht ableiten?Warum kann ich Show hier nicht ableiten?

{-# 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 

Antwort

8

Eine solche Art von Kontext ist in haskell-98-Datentypen nicht erlaubt. Lesen Sie this

Natürlich können Sie Standalone-Instanz schreiben, indem Sie StandaloneDeriving Erweiterung verwenden und ghc Rest der Arbeit machen.

deriving instance Show Obj 
+1

StandaloneDeriving, sehr cool. Vielen Dank! –

2

Grundsätzlich weil GHC Kopf explodiert, wenn Sie das versuchen. Mit anderen Worten, es wurde einfach nicht gelehrt, Instanzen für existentielle Typen abzuleiten. Warten Sie, bis einige Versionsnummern erfolgreich sind, und versuchen Sie es erneut.

Verwandte Themen