packages feed

freesect-0.8: Doc/primitives.html

<html>
<title>FreeSect - Translation Table (all Haskell expressions)</title>
<meta http-equiv="Expires" content="Sat, 1 Jan 2000 08:00:00 GMT" />
<style type="text/css">/*<![CDATA[*/
td { font-family: "Courier New"; font-size: 14; font-weight: bold; }
/*]]>*/
</style>
<body>
<br />
This table illustrates how free sections interact with all the different Haskell98 Exp primitives.
These translations are actual output of the FreeSect preprocessor (&geq;v0.6), not hypothetical rewrites.
They correspond to test file S25.hs in the distro.
Note they all use default contexts;
the explicitly bracketed versions are in S24.hs.
Of course complex (even nested) free sections can be built up from these primitives.
<p>
<table style="margin-left: 20px;">
<tr valign="top"><td align="right">__ + 2</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> _0 + 2</td></tr>
<tr valign="top"><td align="right">f __</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> f _0</td></tr>
<tr valign="top"><td align="right">__ x</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> _0 x</td></tr>
<tr valign="top"><td align="right">-__</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> -_0</td></tr>
<tr valign="top"><td align="right">\ x <span style="font-family: monospace;">-&gt;</span> __ x</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> \ x <span style="font-family: monospace;">-&gt;</span> _0 x</td></tr>
<tr valign="top"><td align="right">let x = 2 in __ x</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> let x = 2 in _0 x</td></tr>
<tr valign="top"><td align="right">if __ then __ else __</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 _1 _2 <span style="font-family: monospace;">-&gt;</span> if _0 then _1 else _2</td></tr>
<tr valign="top"><td align="right">case __ of _ <span style="font-family: monospace;">-&gt;</span> 2</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> case _0 of _ <span style="font-family: monospace;">-&gt;</span> 2</td></tr>
<tr valign="top"><td align="right">(__, 2, __, 4, 5, __, 7)</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 _1 _2 <span style="font-family: monospace;">-&gt;</span> (_0, 2, _1, 4, 5, _2, 7)</td></tr>
<tr valign="top"><td align="right">[__, 2, __, 4, 5, __, 7]</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 _1 _2 <span style="font-family: monospace;">-&gt;</span> [_0, 2, _1, 4, 5, _2, 7]</td></tr>
<tr valign="top"><td align="right">a _[ __ c __ ]_ e</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>a (\ _0 _1 <span style="font-family: monospace;">-&gt;</span> _0 c _1) e</td></tr>
<tr valign="top"><td align="right">(__)</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> _0</td></tr>
<tr valign="top"><td align="right">(__ b __)</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 _1 <span style="font-family: monospace;">-&gt;</span> _0 b _1</td></tr>
<tr valign="top"><td align="right">(__ +)</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> (_0 +)</td></tr>
<tr valign="top"><td align="right">(+ __)</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> (+ _0)</td></tr>
<tr valign="top"><td align="right">(__{f3 = 2}) Ctor</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 <span style="font-family: monospace;">-&gt;</span> (_0{f3 = 2})) Ctor</td></tr>
<tr valign="top"><td align="right">__{f3 = 2} $ Ctor</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 <span style="font-family: monospace;">-&gt;</span> _0{f3 = 2}) $ Ctor</td></tr>
<tr valign="top"><td align="right">(Ctor{f3 = __}) 2</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 <span style="font-family: monospace;">-&gt;</span> (Ctor{f3 = _0})) 2</td></tr>
<tr valign="top"><td align="right">Ctor{f3 = __} $ 2</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 <span style="font-family: monospace;">-&gt;</span> Ctor{f3 = _0}) $ 2</td></tr>
<tr valign="top"><td align="right">[__ ..]</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>\ _0 <span style="font-family: monospace;">-&gt;</span> [_0 ..]</td></tr>
<tr valign="top"><td align="right">[__ ..] 3</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 <span style="font-family: monospace;">-&gt;</span> [_0 ..]) 3</td></tr>
<tr valign="top"><td align="right">[__ .. __] 3 5</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 _1 <span style="font-family: monospace;">-&gt;</span> [_0 .. _1]) 3 5</td></tr>
<tr valign="top"><td align="right">[__, __ ..] 3 5</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 _1 <span style="font-family: monospace;">-&gt;</span> [_0, _1 ..]) 3 5</td></tr>
<tr valign="top"><td align="right">[__, __ .. __] 3 5 8</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 _1 _2 <span style="font-family: monospace;">-&gt;</span> [_0, _1 .. _2]) 3 5 8</td></tr>
<tr valign="top"><td align="right">[f __ x | x <span style="font-family: monospace;">&lt;-</span> [1 .. 3]] 2</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 <span style="font-family: monospace;">-&gt;</span> [f _0 x | x <span style="font-family: monospace;">&lt;-</span> [1 .. 3]]) 2</td></tr>
<tr valign="top"><td align="right">(__ :: Int <span style="font-family: monospace;">-&gt;</span> Int) 2</td><td>&nbsp;&nbsp;&nbsp;=&nbsp;&nbsp;&nbsp;</td><td>(\ _0 <span style="font-family: monospace;">-&gt;</span> _0 :: Int <span style="font-family: monospace;">-&gt;</span> Int) 2</td></tr>
</table><br />
<br />
</body></html>