lala working on lists
authorpimjager <pim@pimjager.nl>
Wed, 13 Apr 2016 09:43:25 +0000 (11:43 +0200)
committerpimjager <pim@pimjager.nl>
Wed, 13 Apr 2016 09:43:25 +0000 (11:43 +0200)
examples/varEx.spl
sem.icl

index f3fa5fa..951fd28 100644 (file)
@@ -13,7 +13,7 @@ var h = 1 != 3;
 var j = 1 < 3;
 //var k = True < 3;
 
-var l = 1:2:[];
+//var l = 1:2:[];
 
 facR(n) :: Int -> Int {
     return 5;
diff --git a/sem.icl b/sem.icl
index 19092df..992d660 100644 (file)
--- a/sem.icl
+++ b/sem.icl
@@ -59,11 +59,11 @@ instance toString SemError where
                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)
@@ -127,14 +127,15 @@ instance unify Expr where
         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