[Haskell-cafe] Re: Combining Wouter's expressions with extensible records

Ron Alford ronwalf at volus.net
Thu Jul 10 15:15:18 EDT 2008

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.


On Wed, Jul 9, 2008 at 10:40 PM, Ron Alford <ronwalf at 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-quick-generic-tricks-pt-1/
> 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

More information about the Haskell-Cafe mailing list