From: Mart Lubbers Date: Thu, 14 Apr 2016 09:45:29 +0000 (+0200) Subject: hoi X-Git-Url: https://git.martlubbers.net/?a=commitdiff_plain;h=73cff58ce951e10286bc34714cc39cf6cdbe4cc1;p=cc1516.git hoi --- diff --git a/sem.icl b/sem.icl index 820e45d..a58b2e1 100644 --- a/sem.icl +++ b/sem.icl @@ -42,13 +42,13 @@ where m :: Env ([VarDecl], [FunDecl]) m = mapM semVarDecl vd >>= \vd1 -> mapM semFunDecl fd >>= \fd1 -> -// mapM semVarDecl vd1 >>= \vd2 -> -// mapM semFunDecl fd1 >>= \fd2 -> -// mapM semVarDecl vd2 >>= \vd3 -> -// mapM semFunDecl fd2 >>= \fd3 -> -// mapM semVarDecl vd3 >>= \vd4 -> -// mapM semFunDecl fd3 >>= \fd4 -> //Dit is puur om te proberen - pure (vd1, fd1) + mapM semVarDecl vd1 >>= \vd2 -> + mapM semFunDecl fd1 >>= \fd2 -> + mapM semVarDecl vd2 >>= \vd3 -> + mapM semFunDecl fd2 >>= \fd3 -> + mapM semVarDecl vd3 >>= \vd4 -> + mapM semFunDecl fd3 >>= \fd4 -> //Dit is puur om te proberen + pure (vd4, fd4) semFunDecl :: FunDecl -> Env FunDecl semFunDecl fd=:(FunDecl p f args mt vds stmts) = @@ -80,8 +80,8 @@ recoverType (t1 ->> t2) = recoverType t1 >>= \t1`->recoverType t2 recoverType t = pure t updateFunType :: Type Type -> Env Type +updateFunType (t1 ->> t2) t3 = updateFunType t2 t3 >>= \t2`->pure $ t1 ->> t2` updateFunType t1 t2 = unify t1 t2 -updateFunType (t1 ->> t2) t3 = t1 ->> (updateFunType t2 t3) inferReturnType :: [Stmt] -> Env Type inferReturnType [] = pure VoidType @@ -217,9 +217,9 @@ instance unify Type where unify (ListType t1) (ListType t2) = unify t1 t2 >>| (pure $ ListType t1) unify (ta1 ->> ta2) (tb1 ->> tb2) = unify ta1 tb1 >>= \ta-> unify ta2 tb2 >>= \tb-> pure (ta ->> tb) + unify VoidType VoidType = pure VoidType unify VoidType t = pure t unify t VoidType = pure t - unify VoidType VoidType = pure VoidType unify t1 t2 = liftT $ Left $ UnifyError zero t1 t2 instance zero Pos where