t2 <- typeCheckExp e
if t == t2 || t2 == NoType then do
m <- get
- put (insert i t m)
+ case insertLookupWithKey (\k a1 a2 -> a1) i t m of
+ (Nothing,m') -> put m'
+ _ -> fail $ "Duplicate variable declaration: "++show i
return NoType
else fail $ "Illegal to assign an expression of type "++show t2++" to variable "++show i++" of type "++show t
typeCheckStm (SPrint e) = do