[Haskell] How to define gunfold on List?
haihualin at 163.com
Sun Jan 18 04:50:22 EST 2009
Does some one know how to define gunfold on recursive data struction like List?
The ghc doc only give the example for non-recursive data like below.
data T a b = C1 a b | C2 deriving (Typeable, Data)
GHC will generate an instance that is equivalent to
instance (Data a, Data b) => Data (T a b) where
gfoldl k z (C1 a b) = z C1 `k` a `k` b
gfoldl k z C2 = z C2
gunfold k z c = case constrIndex c of
1 -> k (k (z C1))
2 -> z C2
toConstr (C1 _ _) = con_C1
toConstr C2 = con_C2
dataTypeOf _ = ty_T
con_C1 = mkConstr ty_T "C1"  Prefix
con_C2 = mkConstr ty_T "C2"  Prefix
ty_T = mkDataType "Module.T" [con_C1, con_C2]
More information about the Haskell