started with new typechecker
[cc1516.git] / sem.icl
diff --git a/sem.icl b/sem.icl
index 2003038..dc774cc 100644 (file)
--- a/sem.icl
+++ b/sem.icl
@@ -1,6 +1,42 @@
 implementation module sem
 
-import StdMisc
+import qualified Data.Map as Map
 
-semanticAnalysis :: AST -> Either Error AST
-semanticAnalysis a = 
+from Data.Func import $
+from StdFunc import o
+
+import Data.Either
+
+import StdString
+import StdList
+import StdEnum
+import RWST
+import GenEq
+
+from Text import class Text(concat), instance Text String
+
+import AST
+
+:: Gamma :== 'Map'.Map String Type
+:: Constraint :== String
+:: Infer a :== RWST [String] [Constraint] Gamma (Either SemError) a
+:: SemError
+       = ParseError Pos String 
+       | UnifyError Pos Type Type 
+    | FieldSelectorError Pos Type FieldSelector 
+       | OperatorError Pos Op2 Type
+    | UndeclaredVariableError Pos String
+    | ArgumentMisMatchError Pos String
+       | Error String
+
+variableStream :: [String]
+variableStream = map toString [1..]
+
+sem :: AST -> SemOutput
+sem (AST vd fd) = Right $ (AST vd fd, 'Map'.newMap)
+
+instance toString Gamma where
+       toString mp = concat [concat [k, ": ", toString v, "\n"]\\(k, v)<-'Map'.toList mp]
+
+instance toString SemError where
+       toString se = "SemError: "