<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<span style="font-family: LucidaGrande;" class="">Hi Richard - one thread of the history of work is in the “strategic programming” work of Stratego (untyped) and Strafunski (implemented in Haskell) by Eelco Visser and Ralf Lämmel (resp.).</span>
<div class="" style="font-family: LucidaGrande;"><br class="">
</div>
<div class="" style="font-family: LucidaGrande;">  <a href="https://strategoxt.org/Stratego/StrategoLanguage.html" class="">https://strategoxt.org/Stratego/StrategoLanguage.html</a></div>
<div class="" style="font-family: LucidaGrande;"><br class="">
</div>
<div class="" style="font-family: LucidaGrande;">  <a href="https://link.springer.com/chapter/10.1007/978-3-540-25935-0_13" class="">https://link.springer.com/chapter/10.1007/978-3-540-25935-0_13</a></div>
<div class="" style="font-family: LucidaGrande;"><br class="">
</div>
<div class="" style="font-family: LucidaGrande;">  <a href="https://www.researchgate.net/publication/220802944_A_Strafunski_Application_Letter" class="">https://www.researchgate.net/publication/220802944_A_Strafunski_Application_Letter</a></div>
<div class="" style="font-family: LucidaGrande;"><br class="">
</div>
<div class="" style="font-family: LucidaGrande;">We explicitly used this approach in our first implementation of Wrangler (with Strafunski), and continue in other work to take this approach. For example “stop_top_down” is used heavily.</div>
<div class="" style="font-family: LucidaGrande;"><br class="">
</div>
<div class="" style="font-family: LucidaGrande;">HTH</div>
<div class="" style="font-family: LucidaGrande;"><br class="">
</div>
<div class="" style="font-family: LucidaGrande;">Simon</div>
<div><br class="">
<blockquote type="cite" class="">
<div class="">On 24 May 2021, at 21:51, Richard Yu <<a href="mailto:richardyu042@gmail.com" class="">richardyu042@gmail.com</a>> wrote:</div>
<br class="Apple-interchange-newline">
<div class="">
<div class="">
<div class=""><br class="webkit-block-placeholder">
</div>
<div style="background-color: rgb(255, 235, 156); border: 1pt solid rgb(156, 101, 0); padding: 2pt; font-size: 10pt; line-height: 12pt; font-family: Calibri; text-align: left;" class="">
<span style="color:#9C6500" ;="" font-weight:bold;="" class="">CAUTION:</span> This email originated from outside of the organisation. Do not click links or open attachments unless you recognise the sender and know the content is safe.</div>
<br class="">
<div class=""><br class="webkit-block-placeholder">
</div>
<div class="">
<div dir="ltr" class="">
<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 class="">
<br class="">
data SExpr = Expr | Const<br class="">
data Const = B bool | I int<br class="">
data Expr  = Lambda String SExpr | If Expr ...<br class="">
<br class="">
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 class="">
In addition if I moved to writing the AST with GADTs, do some generic traversal strategies/libraries stop working?
<br class="">
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br class="">
<br class="">
</div>
<div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Many thanks,<br class="">
Richard<br class="">
<br class="">
<br class="">
<br class="">
</div>
<br class="">
<br class="">
</div>
</div>
</div>
_______________________________________________<br class="">
Haskell-Cafe mailing list<br class="">
To (un)subscribe, modify options or view archives go to:<br class="">
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" class="">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br class="">
Only members subscribed via the mailman list are allowed to post.</div>
</blockquote>
</div>
<br class="">
<div class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div dir="auto" style="caret-color: rgb(0, 0, 0); color: rgb(0, 0, 0); letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">
<div>Simon Thompson | Professor of Logic and Computation <br class="">
School of Computing | University of Kent | Canterbury, CT2 7NF, UK<br class="">
<a href="mailto:s.j.thompson@kent.ac.uk" class="">s.j.thompson@kent.ac.uk</a> | M +44 7986 085754 | W <a href="http://www.cs.kent.ac.uk/~sjt" class="">www.cs.kent.ac.uk/~sjt</a></div>
</div>
</div>
</div>
</div>
<br class="">
</body>
</html>