[Haskell-cafe] Generic Traversal of ASTs

Mario Blazevic mblazevic at stilo.com
Tue Jun 1 17:16:57 UTC 2021

Have you tried Multiplate?

If Multiplate is not powerful enough and you're willing to make your types
more complex, have a look at deep-transformations.

On Mon, May 24, 2021 at 4:52 PM Richard Yu <richardyu042 at gmail.com> wrote:

> I have a question about generic traversal/transformation of nested data
> structures. From what I understand the main options available are SYB,
> Uniplate, GHC.Generics and Data.Lens (although I am under the impression
> this requires record types). The data structure I am attempting to traverse
> is similar to this simplified version:
> data SExpr = Expr | Const
> data Const = B bool | I int
> data Expr  = Lambda String SExpr | If Expr ...
> I have attempted to use Uniplate and GHC.Generics to traverse the built
> AST and modify for example, the string of a Lambda type, but have not been
> able to figure out how to get any of the libraries to typecheck. The
> examples or docs I found were not quite enough. Does anyone know of
> examples that might help or explain how I should be using the generic
> libraries?
> In addition if I moved to writing the AST with GADTs, do some generic
> traversal strategies/libraries stop working?
> Many thanks,
> Richard
> _______________________________________________
> Haskell-Cafe mailing list
> To (un)subscribe, modify options or view archives go to:
> http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe
> Only members subscribed via the mailman list are allowed to post.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://mail.haskell.org/pipermail/haskell-cafe/attachments/20210601/eb7f4101/attachment.html>

More information about the Haskell-Cafe mailing list