It seems there is no empty node which might make a inifinite loop.<br><br>--Andrew<br><br><div class="gmail_quote">On Wed, Aug 18, 2010 at 7:39 AM, Travis Erdman <span dir="ltr">&lt;<a href="mailto:traviserdman@yahoo.com">traviserdman@yahoo.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;">&gt; &gt; putStrLn $ show result<br>
&gt; &gt;<br>
&gt; &gt; &lt;&lt;loop&gt;&gt;<br>
&gt;<br>
&gt; That is the *real* error message.<br>
&gt;<br>
&gt; It means that where you define result, you refer to result<br>
&gt; also on the right-hand side in a way that is an endless<br>
&gt; loop instead of well-behaved recursion.<br>
&gt;<br>
&gt; We would have to see more of your code to be able to<br>
&gt; say much more.<br>
<br>
Thank you very much ... now I have isolated the offending &quot;loop&quot; code:<br>
<br>
I am folding with a function that takes a tree and the input data, and delivers a &quot;processed&quot;/&quot;updated&quot; tree.  The function that is used in the fold is &quot;calcTree&quot;.  calcTree is also recursive ... it updates the root node, then recursively calls itself to update each of its children, which is all working fine.  Here are simplified versions of my structure:<br>

<br>
data Tree a = Node a [Tree a]<br>
<br>
calcTree (Node oldData oldsubtree) input = Node newData recurseChildren<br>
   where<br>
       {-calculate newData from oldData and input-}<br>
       recurseChildren = if {BOOLEANS} then oldsubtree else map (\old -&gt; calcTree old input) oldsubtree<br>
<br>
And, in words:  if certain conditions become true, there will be no change in any decedent node from the current node (ie all newData = oldData, and tree structure never changes), so rather than waste exponential time traversing all the decedent nodes, I&#39;d like to just re-use the ones I already have, as they are identical.  This is &quot;pruning&quot; the tree.  If I remove this pruning, the &quot;&lt;&lt;LOOP&gt;&gt;&quot; objection ceases and the code executes as expected ... except it takes lots longer than it should, because there are usually lots of oppt&#39;ys for pruning, and I&#39;d rather not explicitly traverse all of them.<br>

<br>
How can I make this work?<br>
<br>
Thanks again for all the A&#39;s to my Q&#39;s !<br>
<br>
<br>
<br>
_______________________________________________<br>
Beginners mailing list<br>
<a href="mailto:Beginners@haskell.org">Beginners@haskell.org</a><br>
<a href="http://www.haskell.org/mailman/listinfo/beginners" target="_blank">http://www.haskell.org/mailman/listinfo/beginners</a><br>
</blockquote></div><br>