Working on lists
authorpimjager <pim@pimjager.nl>
Wed, 13 Apr 2016 09:49:06 +0000 (11:49 +0200)
committerpimjager <pim@pimjager.nl>
Wed, 13 Apr 2016 09:49:06 +0000 (11:49 +0200)
sem.icl

diff --git a/sem.icl b/sem.icl
index 992d660..ab7aa9c 100644 (file)
--- a/sem.icl
+++ b/sem.icl
@@ -121,21 +121,23 @@ instance unify Expr where
        unify (IdType _) e = liftT $ Left $ ParseError (extrPos e)
                        "Expression cannot be an polymorf type."
     unify VarType e = typeExpr e
+    unify (IdType i) e = undef
     //we have to cheat to decorate the error, can be done nicer?
     unify t e = StateT $ \s0 -> let res = runStateT m s0 in case res of
         Left err = Left $ decErr e err
         Right t = Right t //note, t :: (Type, Gamma) 
     where m = typeExpr e >>= \tex-> unify t tex 
 
-
+replace :: String Type -> Env Void
+replace _ _ = undef
 
 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 (IdType i) t=:(IdType j) = replace i t >>| pure t
+    unify t (IdType i) = unify (IdType i) t
+    unify (IdType i) t = replace i t >>| pure t
     //unify (ListType t1) (ListType t2) = unify t1 t2
        unify t1 t2 = liftT $ Left $ UnifyError zero t1 t2