From: pimjager Date: Wed, 13 Apr 2016 09:43:25 +0000 (+0200) Subject: lala working on lists X-Git-Url: https://git.martlubbers.net/?a=commitdiff_plain;h=b2e209f5c3b3d334dde4c93e8e86f4334428e802;p=cc1516.git lala working on lists --- diff --git a/examples/varEx.spl b/examples/varEx.spl index f3fa5fa..951fd28 100644 --- a/examples/varEx.spl +++ b/examples/varEx.spl @@ -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 --- 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