
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