<div dir="ltr"><div class="gmail_default" style="font-family:arial,helvetica,sans-serif">I'd like to announce the release of etrans - the set of parse transforms that bring some convenient syntax features that improve code readability:</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">etrans implements an Elixir-like pipeline using the following syntax:</div><div class="gmail_default" style="font-family:arial,helvetica,sans-serif"><span style="color:var(--darkreader-inline-color)"><br></span></div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">print(A) -></font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  [A] / element(1, A)</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">      / io:format("~s\n", [_]).</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace"><br></font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">test(Arg1, Arg2) -></font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  [Arg1, Arg2]</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  / fun1</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  / mod:fun2</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  / fun3()</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  / fun4(Arg3, _)</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  / io_lib:format("~p\n", [_])</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  / fun6([1,2,3], _, other_param)</font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace">  / fun7.  </font></span></div><div class="gmail_default" style=""><span style="color:var(--darkreader-inline-color)"><font face="monospace"><br></font></span></div></blockquote><font face="monospace"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">Additionally, it implements ternary "if" (i.e. </span><span class="gmail_default" style="">iif(Cond, True, False)</span><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">), and stringification transforms, including "</span><span class="gmail_default" style="">throw(Format, Args)</span><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">".</span><br></font><div><font face="monospace"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></span></font></div><div><font face="monospace"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">Enjoy!</span></font></div><div><font face="monospace"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif"><br></span></font></div><div><font face="monospace"><span class="gmail_default" style="font-family:arial,helvetica,sans-serif">Serge</span></font></div></div>