typeCheckExp (BiOpExp e o e') = do
t1 <- typeCheckExp e
t2 <- typeCheckExp e'
- if not(t1 == t2) then fail ""
- else case inList o [Eq,NEq] of
- True -> return TBool
- False -> if not(t1 == TInt) then fail ""
- else case inList o [Plus,Minus,Times,Div] of
- True -> return TInt
- False -> return TBool
+ if not(t1 == t2) then fail "The parameters for the binary operator aren't equal"
+ else if inList o [Eq,NEq] then return TBool
+ else if not(t1 == TInt) then fail "The parameters need to be of type int"
+ else if inList o [Plus,Minus,Times,Div]
+ then return TInt
+ else return TBool
typeCheckExp (EVar i) = typeCheckVar i
typeCheckExp (EAss i e) = do
a <- typeCheckVar i