<br>
<div class="gmail_quote"><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">That seems to be GP problem, as your solution doesn&#39;t scale well when I<br>


wan&#39;t to add/remove/change fields in the `Row` record.</blockquote><div><br>Ah yes, this is a good use case. I wasn&#39;t paying close enough attention before, and I didn&#39;t see an immediate implementation of your function at the time.<br>

 </div><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">The perfect way<br>
as I see it, would be just editing `Row` data declaration, nothing else.<br>
Studying few papers about GP in Haskell, I reckon this could be<br>
represented as generic traversal, using my `Row` declaration with<br>
`Either`.  I don&#39;t see really good way to write a generic producer from<br>
`[String]` to version of `Row` without `Either`.  But SYB doesn&#39;t<br>
provide a way for passing type-class-parametric functions to gmapT, and<br>
SYB-with-class has large overhead of its usage.  I don&#39;t have enough<br>
time to find out how this can be written in SYB-with-class, if it really can be<br>
written.  The restriction of EMGM was described in my initial message.<br>
<div><div></div><div class="h5"></div></div></blockquote><div><br>I would suggest looking at Multirec. There&#39;s a draft of the paper to be published at ICFP, and the library is on Hackage.<br><br><a href="http://www.cs.uu.nl/wiki/GenericProgramming/Multirec">http://www.cs.uu.nl/wiki/GenericProgramming/Multirec</a><br>

<a href="http://hackage.haskell.org/package/multirec">http://hackage.haskell.org/package/multirec</a><br><br>If you don&#39;t have anything generically useful by next week, I&#39;ll look at it again when I have more time.<br>

<br>Regards,<br>Sean<br></div></div>