typeCheckExp (EPost i op) = do
TInt <- typeCheckVar i
return TInt
+typeCheckExp (ENeg e) = do
+ TInt <- typeCheckExp e
+ return TInt
typeCheckVar :: (MonadState Types m) => Ident -> m Type
return NoType
typeCheckStm (SDecl t i e) = do
t2 <- typeCheckExp e
- if t == t2 then do
+ if t == t2 || t2 == NoType then do
m <- get
put (insert i t m)
return NoType
- else fail $ "Illegal to assign an expression of type "++show t2++" to variable "++show i++" of type "++show t2
+ else fail $ "Illegal to assign an expression of type "++show t2++" to variable "++show i++" of type "++show t
typeCheckStm (SPrint e) = do
typeCheckExp e
return NoType