<br><div class="gmail_quote">On Dec 3, 2007 7:43 AM, Peter Padawitz &lt;<a href="mailto:peter.padawitz@udo.edu">peter.padawitz@udo.edu</a>&gt; wrote:<br><blockquote class="gmail_quote" style="border-left: 1px solid rgb(204, 204, 204); margin: 0pt 0pt 0pt 0.8ex; padding-left: 1ex;">



  
  

<div bgcolor="#ffffff" text="#000000">
What is wrong here? ghci tries (and fails) to deduce certain types for
the comp functions that I did not expect.<br>
<br>
<code>type Block&nbsp;&nbsp; = [Command]<br>
data Command = Skip | Assign String IntE | Cond BoolE Block Block |<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; Loop BoolE Block<br>
data IntE&nbsp;&nbsp;&nbsp; = IntE Int | Var String | Sub IntE IntE | Sum [IntE] |
Prod [IntE]<br>
data BoolE&nbsp;&nbsp; = BoolE Bool | Greater IntE IntE | Not BoolE<br>
<br>
class Java block command intE boolE<br>
&nbsp;&nbsp; where block_ :: [command] -&gt; block<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp; skip :: command<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;assign :: String -&gt; intE -&gt; command<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;cond :: boolE -&gt; block -&gt; block -&gt; command<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;loop :: boolE -&gt; block -&gt; command<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; intE_ :: Int -&gt; intE<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;var :: String -&gt; intE<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;sub :: intE -&gt; intE -&gt; intE<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;sum_ :: [intE] -&gt; intE<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;prod :: [intE] -&gt; intE<br>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; boolE_ :: Bool -&gt; boolE<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;greater :: intE -&gt; intE -&gt; boolE<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;not_ :: boolE -&gt; boolE<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compBlock :: Block -&gt; block<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compBlock = block_ . map compCommand<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compCommand :: Command -&gt; command<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compCommand Skip&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = skip<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compCommand (Assign x e)&nbsp;&nbsp; = assign x (compIntE e)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compCommand (Cond be c c&#39;) = cond (compBoolE be) (compCommand
c)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; (compCommand
c&#39;)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compCommand (Loop be c)&nbsp;&nbsp;&nbsp; = loop (compBoolE be) (compCommand
c)-}<br>
<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compIntE :: IntE -&gt; intE<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compIntE (IntE i)&nbsp;&nbsp; = intE_ i<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compIntE (Var x)&nbsp;&nbsp;&nbsp; = var x<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compIntE (Sub e e&#39;) = sub (compIntE e) (compIntE e&#39;)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compIntE (Sum es)&nbsp;&nbsp; = sum_ (map compIntE es)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compIntE (Prod es)&nbsp; = prod (map compIntE es)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compBoolE :: BoolE -&gt; boolE<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compBoolE (BoolE b)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = boolE_ b<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compBoolE (Greater e e&#39;) = greater (compIntE e) (compIntE e&#39;)<br>
&nbsp;&nbsp;&nbsp; &nbsp;&nbsp;&nbsp; &nbsp;compBoolE (Not be)&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; = not_ (compBoolE be)<br>
</code><br>
</div>

</blockquote><br>Well, first of all, the definition of compCommand should use calls to compBlock, not recursive calls to compCommand.&nbsp; But that&#39;s not the main source of your problems.<br><br>What exactly are you trying to accomplish?&nbsp; And why do you need a type class?
<br><br>-Brent<br></div>