
Typeable is a superclass of Data. So you would indeed imply Typeable by requiring Data. However, you don't _need_ Data but only Typeable. You need "Data x" to find "Typeable y"; once you find "y" you don't need to _traverse_ any further into "y". To summarise, requiring Typeable is simply more precise as to what's needed. Ralf Stefan Holdermans wrote:
Jim,
Why is
gfindtype :: (Data x, Data y) => x -> Maybe y
and not
gfindtype :: (Data x, Typeable y) => x -> Maybe y
?
Because you're not always interested in a subterm of the same type as the parent node.
Ouch, answered your question before I really read it, i.e., before a first cup of coffee.
Sorry.
Regards,
Stefan
_______________________________________________ Glasgow-haskell-users mailing list Glasgow-haskell-users@haskell.org http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
-- Ralf Laemmel VU & CWI, Amsterdam, The Netherlands http://www.cs.vu.nl/~ralf/