module Plan where
import Debug.Trace

type Name = String 
data Expr = Var Name
          | Val Int
          | Myadd Expr Expr
          | Mymul Expr Expr
	  | Myneg Expr
          | Mylet Name Expr Expr
     deriving (Eq,Show)

-- Purpose: looks up variable "n" in list of bindings "env". 
-- Returns first binding, or Exception if no binding of "n" in "env". 
-- Example: find "x" [("x",1),("x",100),("y",10)] returns 1

find n env = head [ int | (var,int) <- env, var == n ]

eval e env = 
   case e of
     Var n -> find n env
     Val i -> i
     Myadd e1 e2 -> (eval e1 env) + (eval e2 env)
---  Mymul e1 e2 -> --- YOUR CODE HERE
     Myneg e1 -> (-1) * (eval e1 env)
---  Mylet n e1 e2 -> --- YOUR CODE HERE

