It turns out that defining Read is somewhat tricky to do for a GADT. Gershom Bazerman has some very nice slides on how to survive the process by manual typechecking (much in the spirit of Oleg's meta-typechecking code referenced by Stephen's follow up below)
He presented them at hac-phi this time around. I will check with him to see if I can get permission to host them somewhere and post a link to them here. -Edward Kmett On Fri, Jun 25, 2010 at 5:04 AM, <corentin.dup...@ext.mpsa.com> wrote: > > Hello Haskellers, > > I'm having trouble writing a Read Instance for my GATD. > Arg this GATD!! It causes me more problems that it solves ;) > Especially with no automatic deriving, it adds a lot of burden to my code. > > >data Obs a where > > ProposedBy :: Obs Int -- The player that proposed the tested > rule > > Turn :: Obs Turn -- The current turn > > Official :: Obs Bool -- whereas the tested rule is official > > Equ :: (Eq a, Show a, Typeable a) => Obs a -> Obs a -> Obs Bool > > Plus :: (Num a) => Obs a -> Obs a -> Obs a > > Time :: (Num a) => Obs a -> Obs a -> Obs a > > Minus :: (Num a) => Obs a -> Obs a -> Obs a > > And :: Obs Bool -> Obs Bool -> Obs Bool > > Or :: Obs Bool -> Obs Bool -> Obs Bool > > Not :: Obs Bool -> Obs Bool > > Konst :: a -> Obs a > > > > instance Read a => Read (Obs a) where > > readPrec = (prec 10 $ do > > Ident "ProposedBy" <- lexP > > return (ProposedBy)) > > +++ > > (prec 10 $ do > > Ident "Official" <- lexP > > return (Official)) > > (etc...) > > Observable.lhs:120:8: > Couldn't match expected type `Int' against inferred type `Bool' > Expected type: ReadPrec (Obs Int) > Inferred type: ReadPrec (Obs Bool) > > > Indeed "ProposedBy" does not have the same type that "Official". > Mmh how to make it all gently mix altogether? > > > Best, > Corentin > > > _______________________________________________ > Haskell-Cafe mailing list > Haskell-Cafe@haskell.org > http://www.haskell.org/mailman/listinfo/haskell-cafe >
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe