If you use lenses you can do this today with no real need to adulterate the parser.<div><br></div><div>setL (l2 . l1) x rec</div><div><br></div><div>This goes one step further as it can be written point free so you don&#39;t even have to give rec a name if you don&#39;t want to. ;)</div>
<div><br></div><div>-Edward<br><br><div class="gmail_quote">On Mon, Sep 19, 2011 at 9:09 AM, Barney Hilken <span dir="ltr">&lt;<a href="mailto:b.hilken@ntlworld.com">b.hilken@ntlworld.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
All this talk about records got me thinking. I don&#39;t really like the current syntax for record update (because it looks too much like function application) but here is an extension to it which might be useful.<br>
<br>
If you use nested records, many languages allow you to update the inner records directly, for example rect.bottomLeft.xCoord += 3. We could allow a similar thing in Haskell by extending the syntax like this:<br>
<br>
fbind   -&gt;      qvar = exp<br>
                |       qvar { fbind1 , ... , fbindn }<br>
<br>
then<br>
<br>
        rec { l1 { l2 = x }}<br>
<br>
would mean<br>
<br>
        rec { l1 = (l1 rec) { l2 = x }}<br>
<br>
The advantage (apart from convenience) is that we don&#39;t have to repeat rec, which could be a complex expression.<br>
<br>
Is this any use?<br>
<br>
Barney.<br>
<br>
<br>
_______________________________________________<br>
Glasgow-haskell-users mailing list<br>
<a href="mailto:Glasgow-haskell-users@haskell.org">Glasgow-haskell-users@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/glasgow-haskell-users" target="_blank">http://www.haskell.org/mailman/listinfo/glasgow-haskell-users</a><br>
</blockquote></div><br></div>