Do you mean that x and y in<br><br>x = a + 1<br>y = a + 1<br><br>are different from data-reify point of view?<br><br><div class="gmail_quote">2011/8/12 Conal Elliott <span dir="ltr">&lt;<a href="mailto:conal@conal.net">conal@conal.net</a>&gt;</span><br>
<blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">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>
<font color="#888888">

<br>   - Conal</font><div><div></div><div class="h5"><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: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); 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>
</div></div><br>_______________________________________________<br>
Haskell-Cafe mailing list<br>
<a href="mailto:Haskell-Cafe@haskell.org">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>
<br></blockquote></div><br>