Hi
I have a data type Expr for handling Expressions
data Expr = Lit1 Int | Lit2 Bool | Var String | BinOp Op Expr Expr
As you can see, I am trying to have an Expression have both Int and Bool values so that I can work with both arithmetic (+,-,*,/) and logical(and,or,<,<=,>,>=) operators.
What I am aiming at is to parse a line which contains an expression, evaluate it and return the result. I am facing some problems in this regard. When I write the evaluate function, the Haskell compiler refuses to compile my code as it says, instance of Num Expr required. Any ideas what I am supposed to do to fix that?
My evaluate code is as follows...
evaluate :: Expr -> Store -> Expr
evaluate ( Lit1 n ) st = n evaluate ( Lit2 n ) st = n evaluate ( Var v ) st = value st v -- returns the value of v evaluate ( BinOp op e1 e2 ) st = opValue op v1 v2 where v1 = evaluate e1 st v2 = evaluate e2 st
opValue :: Op -> Expr -> Expr -> Expr opValue Add e1 e2 = e1 + e2
Look at the RHS of the above.
[Hint: What is its type? And what are the types of `e1' and `e2'? And why would it be a valid expression?]
opValue Sub e1 e2 = e1 - e2 opValue Mul e1 e2 = e1 * e2 opValue Div e1 e2 = e1 / e2 opValue LT e1 e2 = e1 < e2
Similarly.
opValue LE e1 e2 = e1 <= e2 opValue GT e1 e2 = e1 > e2 opValue GE e1 e2 = e1 >= e2 opValue And e1 e2 = e1 && e2 opValue Or e1 e2 = e1 || e2
See above. I think you'll figure it out.
Now I can't return an Int as I return a Bool at times and hence I return an Expr. What does the error...instance of Num Expr or instance of Fractional Expr required mean?
HTH, --ag
PS - say `Hi' to Ham for me. ;-)
-- Artie Gold -- Austin, Texas Oh, for the good old days of regular old SPAM.
_______________________________________________ Haskell mailing list [EMAIL PROTECTED] http://www.haskell.org/mailman/listinfo/haskell
