I'm making progress, but how would I make the following a Typeable instance: data (f :+: g) e = Inl (f e) | Inr (g e) deriving Eq Here is what I'm using for Expr: data Expr f = In (f (Expr f)) instance Typeable1 f => Typeable (Expr f) where typeOf (In x) = mkTyConApp (mkTyCon "Data.Trie.General.ListGT") [typeOf1 x] I don't think I can use this for ':+:', because the typeOf instance only has access to a member of one type at a time. This may be similar to a definition of Typeable2 for Either, but I can't find an example to follow for that. Thanks, -Ron On Wed, Jul 9, 2008 at 10:40 PM, Ron Alford <ronwalf@volus.net> wrote:
Well, my extension of Wouter's datatypes proved to be unweildy.... So, I'm trying to use http://fmapfixreturn.wordpress.com/2008/05/03/simple-extensible-records-now-... for extensible records.
I ran across my first problem rather quickly! data Expr f = In (f (Expr f))
Ok, but to make it part of a record, it needs to implement Data: data Expr f = In (f (Expr f)) deriving Data
but this gives No instances for (Data (f (Expr f)), Typeable (Expr f)) arising from the 'deriving' clause of a data type declaration at Planning/Wouter.hs:77:0-42
Any hints?
Thanks, -Ron