hoi
authorMart Lubbers <mart@martlubbers.net>
Thu, 14 Apr 2016 09:45:29 +0000 (11:45 +0200)
committerMart Lubbers <mart@martlubbers.net>
Thu, 14 Apr 2016 09:45:29 +0000 (11:45 +0200)
sem.icl

diff --git a/sem.icl b/sem.icl
index 820e45d..a58b2e1 100644 (file)
--- 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