Hi Stephen, thanks for your reply:<br><br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
In the code above Tableau is the same type after rewriting. If that&#39;s<br>
the case, maybe you don&#39;t need a state monad solution. However, if you<br>
are labelling something with /w/ which looks like an integer from your<br>
explanation, then first you want to make a variation of the Tableau<br>
datatype that holds the label, thus rewrite would be a type changing<br>
function:<br>
<br>
rewrite :: Tableau -&gt; Tableau&#39;<br></blockquote><div><br>I thin<span style="font-family: arial,helvetica,sans-serif;">k the basic tableau data type would look like: </span><br style="font-family: arial,helvetica,sans-serif;">
<br style="font-family: courier new,monospace;"><div style="margin-left: 40px;"><span style="font-family: courier new,monospace;">data Tableau = Node (World, Expr) [Tableau]</span><br style="font-family: courier new,monospace;">
<span style="font-family: courier new,monospace;">type World = Int</span><br></div><font face="arial,helvetica,sans-serif"><br>and the rewrite function would need to track the current position of rewrite<br>in the tableau and store a complete tableau (or some kind of record, possibly<br>
in a zipper) in order to move around, depending on the instruction it&#39;s given. So<br>I would need something like:<br><br></font><div style="margin-left: 40px;"><font face="courier new,monospace">rewrite :: Tableau -&gt; State (Record, Tableau)<br>
</font></div><font face="courier new,monospace"><br><span style="font-family: arial,helvetica,sans-serif;">So that it could be passed an instruction such as:<br><br style="font-family: courier new,monospace;"></span></font><div style="margin-left: 40px;">
<span style="font-family: courier new,monospace;">(Poss, [ex]) -&gt; (a) inject ex into Tableau; (b) Store<br>Tableau in Record;</span><span style="font-family: courier new,monospace;"> (c) move to correct spot in Record;<br>
(d) restart rewriting from position in Record.<br><br></span></div><span style="font-family: courier new,monospace;"><font face="arial,helvetica,sans-serif">Even though Haskell&#39;s my first language, I still want a function that says: store<br>
current Tableau in <i style="font-family: courier new,monospace;">r<span style="font-family: arial,helvetica,sans-serif;">, then get </span>r</i><span style="font-family: courier new,monospace;"> <span style="font-family: arial,helvetica,sans-serif;">and restart.</span></span></font></span><br>
</div><div> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">If this is what you want to do, you should be able to thread &quot;number<br>

supply&quot; through the rewrite and rule functions fairly simply with a<br>
state monad.<br>
<br>
rewrite :: Tableau -&gt; State Int Tableau&#39;<br></blockquote><div><br>I think this means that when implementing the monad, I should define (<span style="font-family: courier new,monospace;">&gt;&gt;=</span>) as a<br>general rule similar to the set of instructions above, e.g,. if <font face="courier new,monospace">f<font face="arial,helvetica,sans-serif"> is a function that<br>
injects the list <font face="courier new,monospace">ex<font face="arial,helvetica,sans-serif"> into a tree structure, and <font face="courier new,monospace">g<font face="arial,helvetica,sans-serif"> is a rewrite function, then <font face="courier new,monospace">&gt;&gt;=<font face="arial,helvetica,sans-serif"> should<br>
have a structure abstracted from the following:<br><br></font></font></font></font></font></font></font></font><div style="margin-left: 40px;"><font face="courier new,monospace">f &gt;&gt;= g = do f ~&gt; State Record Tableau<br>
            store Tableau in Record<br>               do g at Record<br>                  make Record into current Tableau<br><br></font></div><font face="arial,helvetica,sans-serif">This seems similar to the &quot;threading&quot; method that, for instance, Wadler uses in the first<br>
sections of his paper on functional programming and monads, when building an evaluator<br>that keeps track of division operations.<br><br>Thanks or the response. If you see any glaring &#39;monadic errors,&#39; I&#39;d be happy to hear about<br>
them, but your advice was helpful :)</font></div></div><br>