<div>Hi,</div>
<div>    I just want to add a new parser for variables but this doesn&#39;t seem to work can anybody tell me what I&#39;m doing wrong?</div>
<div> </div>
<div> </div>
<div><br>module ExprSyn where</div>
<div>import Text.ParserCombinators.Parsec<br>import Text.ParserCombinators.Parsec.Expr</div>
<div>runExpr :: String -&gt; IO ()<br>runExpr str = case  runParser expr () &quot; &quot;  str of<br>   Left err -&gt; putStrLn &quot;Error:&quot; &gt;&gt; print err<br>   Right val -&gt; print val</div>
<div>demo1 = runExpr  &quot;2+5&quot;</div>
<div>data Expr = Mul Expr Expr<br>         | Div Expr Expr<br>         | Add Expr Expr<br>         | Sub Expr Expr<br>         | Val Float<br>  |Let String Expr Expr<br>  | Var String<br> deriving (Eq,Show)</div>
<div>expr :: Parser Expr<br>expr = variable &lt;|&gt; buildExpressionParser table factor<br>   &lt;?&gt; &quot;expression&quot;</div>
<div>table :: [[Operator Char st Expr]]<br>table = [[op &quot;*&quot; Mul AssocLeft, op &quot;/&quot; Div AssocLeft]<br>       ,[op &quot;+&quot; Add AssocLeft, op &quot;-&quot; Sub AssocLeft]<br>       ]<br> where<br>   op s f assoc<br>
      = Infix (do{ string s; return f}) assoc</div>
<div>factor :: Parser Expr<br>factor = do{ char &#39;(&#39;<br>          ; x &lt;- expr<br>          ; char &#39;)&#39;<br>          ; return x<br>          }<br>     &lt;|&gt; number<br>     &lt;|&gt; variable <br>     &lt;?&gt; &quot;simple expression&quot;</div>

<div>variable :: Parser Expr<br>variable = do { b &lt;- letter<br>       ; do { cs &lt;- word<br>       ;return (c:cs)<br>  &lt;|&gt; return [c]<br>  &lt;|&gt; number<br>       }</div>
<div><br>number :: Parser Expr<br>number = do{ ds &lt;- many1 digit<br>          ; return (Val $ read ds)<br>          }</div>
<div> <br> <br> John<br>     </div>