<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">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:<br><br>data SExpr = Expr | Const<br>data Const = B bool | I int<br>data Expr  = Lambda String SExpr | If Expr ...<br><br>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? <br>In addition if I moved to writing the AST with GADTs, do some generic traversal strategies/libraries stop working? <br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Many thanks,<br>Richard<br><br><br><br></div><br><br></div>