toString t1, ". Given: ", toString t2]
sem :: AST -> SemOutput
-sem (AST vd fd) = case evalStateT m ('Map'.newMap, getRandomStream 1) of
+sem (AST vd fd) = case runStateT m ('Map'.newMap, getRandomStream 1) of
Left e = Left [e]
Right ((vds, fds), gamma) = Right ((AST vds fds), gamma)
where
- m :: Env (([VarDecl], [FunDecl]))
+ m :: Env ([VarDecl], [FunDecl])
m = (mapM semVarDecl vd) >>= \vds ->
mapM semFunDecl fd >>= \fds ->
pure (vds, fds)
Right t = Right t //note, t :: (Type, Gamma)
where m = typeExpr e >>= \tex-> unify t tex
-//unify e (IdType i) = unify (IdType i) e
- //note, don't use putIdent as that will call unify again
- //unify (IdType i) e=:(IdType j) = modify (\(st, r)->('Map'.put j e st, r))
+
instance unify Type where
unify IntType IntType = pure IntType
unify BoolType BoolType = pure BoolType
unify CharType CharType = pure CharType
+ //unify t (IdType i) = unify (IdType i) t
+ //note, don't use putIdent as that will call unify again
+ //unify (IdType i) e=:(IdType j) = modify (\(st, r)->('Map'.put j e st, r))
//unify (ListType t1) (ListType t2) = unify t1 t2
unify t1 t2 = liftT $ Left $ UnifyError zero t1 t2