2012-09-17 27 views
5

¿Por qué no puedo obtener Mostrar aquí?¿Por qué no puedo obtener Mostrar aquí?

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

Respuesta

8

Este tipo de contexto no está permitido en los tipos de datos haskell-98. Lea this

Por supuesto, puede escribir una instancia independiente utilizando la extensión StandaloneDeriving y deje que ghc haga el resto del trabajo duro.

deriving instance Show Obj 
+1

StandaloneDeriving, very cool. ¡Gracias! –

2

Básicamente porque la cabeza de GHC explota cuando intentas eso. En otras palabras, simplemente no se ha enseñado cómo derivar instancias para tipos existenciales. Espere a que pasen algunos números de versión y vuelva a intentarlo.

Cuestiones relacionadas