<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Dear Erlangers,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I just pushed the release 0.2 of the etrans application that adds a parse transform for extending the standard list comprehensions with the ability to fold a list, given the initial state.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><a href="https://github.com/saleyn/etran">https://github.com/saleyn/etran</a><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">This is similar to the lists:foldl/2 and lists:mapfoldl/2 functions:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style=""><span style="font-family:arial,helvetica,sans-serif">Given: </span><font face="monospace">L = [1,2,3]</font><br></div><br class="gmail-Apple-interchange-newline"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">1. Fold Comprehension:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style=""><font face="monospace">6 = [S+I || S = 0, I <- L].     %% Translates to: lists:foldl(fun(I,S) -> S+I end, 0, L)<br></font></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">2. MapFold Comprehension:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style=""><div class="gmail_default" style=""><font face="monospace">{[1,2,3], 6} =</font></div><div class="gmail_default" style=""><font face="monospace">  [{I, S+I} || S = 0, I <- L].  %% Translates to: lists:mapfoldl(fun(I,S) -> {I, S+I} end, 0, L)</font></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">As an avid user of list comprehensions, I always missed the ability to do the fold on a list using a short-hand pattern syntax.  This etran library lifts that restriction, potentially making the code more terse.</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Enjoy,</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">Serge</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></div></div></div>