Возникает проблема автоматического определения Typeable instance для данного кода.
data Void = Void deriving (Data,Typeable,Show,Eq)
data Expr x where
DoNothing :: Expr Void
BinOp :: Expr Word32 -> Expr Word32 -> Expr Word32
data BinaryOperation = Add
deriving (Typeable,Data)
deriving instance (Data a) => Data (Expr a)
deriving instance Typeable1 Expr
Текст ошибки:
Couldn't match expected type `Void' against inferred type `Word32'
Expected type: Expr a
Inferred type: Expr Word32
In the first argument of `z', namely `BinOp'
In the first argument of `k', namely `z BinOp'
When typechecking a standalone-derived method for `Data (Expr a)':
gunfold k z c
= case constrIndex c of {
GHC.Types.I# 1# -> z DoNothing
_ -> k (k (z BinOp)) }
Failed, modules loaded: none.
Кто-то может объяснить в чем дело. Или хотя бы отослать к соответствующему разделу документации.