Note that data-reify will only find *some* common/equal sub-expressions, namely the pointer-equal ones. In all of my code-generating (&quot;deep&quot;) DSLs, it&#39;s been very important for efficiency to also pull out equal-but-pointer-unequal expressions.<br>

<br>   - Conal<br><br><div class="gmail_quote">On Thu, Aug 11, 2011 at 4:41 AM, Vo Minh Thu <span dir="ltr">&lt;<a href="mailto:noteed@gmail.com" target="_blank">noteed@gmail.com</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">



I guess you refer to data-reify:<br>
<a href="http://hackage.haskell.org/package/data-reify" target="_blank">http://hackage.haskell.org/package/data-reify</a><br>
<br>
2011/8/11 Stephen Tetley &lt;<a href="mailto:stephen.tetley@gmail.com" target="_blank">stephen.tetley@gmail.com</a>&gt;:<br>
<div><div></div><div>&gt; Strafunski and its successors (Uniplate, SYB, KURE) are really for<br>
&gt; working on trees. If you want to work on graphs you would probably be<br>
&gt; better of with something else.<br>
&gt;<br>
&gt; I think I overlooked that you want common sub-expression<br>
&gt; _elimination_, rather than expression simplification. There are<br>
&gt; libraries for observable sharing (Andy Gill&#39;s recent one is the<br>
&gt; state-of-the-art, its on Hackage but I&#39;ve forgotten its name) - that<br>
&gt; are pertinent where you have built the expressions as an embedded DSL<br>
&gt; in Haskell and you want sharing in code you generate from the Haskell<br>
&gt; DSL.<br>
&gt;<br>
&gt;<br>
&gt;<br>
&gt; On 11 August 2011 08:57, Anton Kholomiov &lt;<a href="mailto:anton.kholomiov@gmail.com" target="_blank">anton.kholomiov@gmail.com</a>&gt; wrote:<br>
&gt;&gt; Thank you for the reference to Strafunski libraries, I read<br>
&gt;&gt; HaskellWiki, but I don&#39;t have a permission to visit their site.<br>
&gt;&gt; All links are forbidden.<br>
&gt;&gt;<br>
&gt;&gt; Can it be a function:<br>
&gt;&gt;<br>
&gt;&gt; fun :: Eq a =&gt; Tree a -&gt; [(Int, (a, [Int]))]<br>
&gt;&gt;<br>
&gt;&gt; where tuple codes nodes, and Int&#39;s code edges.<br>
&gt;&gt;<br>
&gt;&gt; 2011/8/11 Stephen Tetley &lt;<a href="mailto:stephen.tetley@gmail.com" target="_blank">stephen.tetley@gmail.com</a>&gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Wouldn&#39;t this be dependent upon your AST and thus not readily<br>
&gt;&gt;&gt; &quot;package-able&quot; as a library?<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; Expression simplification has been a prime example for Strafunski<br>
&gt;&gt;&gt; style traversal libraries. You might be able to find examples that you<br>
&gt;&gt;&gt; can adapt to your own AST written with Uniplate or similar library.<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; On 11 August 2011 05:00, Anton Kholomiov &lt;<a href="mailto:anton.kholomiov@gmail.com" target="_blank">anton.kholomiov@gmail.com</a>&gt;<br>
&gt;&gt;&gt; wrote:<br>
&gt;&gt;&gt; &gt; Is there a library on common sub-expression elimination?<br>
&gt;&gt;&gt; &gt;<br>
&gt;&gt;&gt;<br>
&gt;&gt;&gt; _______________________________________________<br>
&gt;&gt;&gt; Haskell-Cafe mailing list<br>
&gt;&gt;&gt; <a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
&gt;&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;&gt; _______________________________________________<br>
&gt;&gt; Haskell-Cafe mailing list<br>
&gt;&gt; <a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
&gt;&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;&gt;<br>
&gt;&gt;<br>
&gt;<br>
&gt; _______________________________________________<br>
&gt; Haskell-Cafe mailing list<br>
&gt; <a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
&gt; <a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
&gt;<br>
<br>
_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank">Haskell-Cafe@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/haskell-cafe" target="_blank">http://www.haskell.org/mailman/listinfo/haskell-cafe</a><br>
</div></div></blockquote></div><br>