Roel van Dijk vandijk.roel at gmail.com
Sat Jan 23 13:17:55 EST 2010

```On Sat, Jan 23, 2010 at 6:40 PM, John Moore <john.moore54 at gmail.com> wrote:
> Hi
>    I'm trying to get a if statement to work but not sure if this is the
> right approach, what I want to do in simple english is to evaluate  one
> expression at a time for example. (3+2)+(4+5) I want it to return 5 + (4+5)
> then 5+9.
>
> data Expression = Val Integer
>                 | Subtract Expression Expression
>                 | Multiply Expression Expression
>                 | Divide Expression Expression
>          deriving Show
> evalStep :: Expression ->  Expression
> evalStep (Val x)=  (Val x)
> evalStep (Add x y) = do
>
>   if x = isDigit
>            then if y isDigit
>              else evalStep x,y
>
> I thinking about using recursion down a tree left then right but that seems
> very complicated.
> Any thoughts welcome!
> John

I renamed your Expression data type to simply E. Saves some typing :-)

data E = Val Integer
| Sub E E
| Mul E E
| Div E E
deriving Show

evalStep :: E ->  E
evalStep (Val x) = (Val x)
-- Note that with a pattern match you can look deeply into a structure.
-- in this case we match on the addition of two values.
evalStep (Add (Val a) (Val b)) = Val (a + b)