Café, SYB-style libraries (and especially Uniplate) make it very easy to run generic traversals (queries/transformations) on ADTs.
> data Expr = ... > x :: Expr > f :: Expr -> Expr > transform :: (Expr -> Expr) -> Expr -> Expr > transform f x :: Expr -- applies f to x (and its children) in a bottom-up manner Uniplate is very powerful and doesn't require any hand written type-class instances to get going reasonably efficiently. I can simply re-implement the functionality of Uniplate myself, modulo requiring hand-written instances. (I didn't want to go into that road, since I don't need it for this argument.) I did this exercise, because I wanted to understand why we don't have similar generic traversal libraries for GADTs. And, it didn't take long :) I can post my trials but they are really baby steps and they wouldn't be helpful. My question is: Considering how useful generic traversal libraries and GADTs are, has anybody tried implementing a generic traversal library (like Uniplate or similar) for GADTs? Is it a hard (or impossible, or not efficient, or problematic in some other way) thing to implement, or is it just not a requirement for anyone else? Best, Ozgur
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe