
Hi Bernd,
I guess this might be the same issue reported some time ago (
http://thread.gmane.org/gmane.comp.lang.haskell.generics/53/focus=54): the
derived instances of Data do not define dataCast1. If you define your own
instance of Data for MyMaybe and add the definition of dataCast1 you will
get the expected behavior.
Cheers,
Pedro
On Thu, Mar 12, 2009 at 14:05, Bernd Brassel
Hi folks,
I have been surprised by the derived instances of Data/Typeable when using the combinator ext1Q. First look at the following definition:
useExt1 :: Data a => a -> () useExt1 = undefined `ext1Q` (\ (Just _) -> ())
testExt1 :: () testExt1 = useExt1 (Just ())
As I expected, testExt1 yields ()
But when I define my own version of Maybe and derive the Data/Typeable instances
data MyMaybe a = MyJust a | MyNothing deriving (Data,Typeable)
the corresponding test
useExt1' :: Data a => a -> () useExt1' = undefined `ext1Q` (\ (MyJust _) -> ())
testExt1' :: () testExt1' = useExt1' (MyJust ())
yields *** Exception: Prelude.undefined
All of this happens with both ghc 6.10.1 and 6.8.2.
Is this a bug in the derived instances, e.g., in dataCast1? If so is there a concise tutorial telling me how to write correct instances for the data type I'm interested in (which is not MyMaybe)?
Thanks for your time! Bernd _______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users