1 implementation module sem
3 import qualified Data.Map as Map
5 from Data.Func import $
16 from Text import class Text(concat), instance Text String
20 :: Gamma :== 'Map'.Map String Type
21 :: Constraint :== String
22 :: Infer a :== RWST [String] [Constraint] Gamma (Either SemError) a
24 = ParseError Pos String
25 | UnifyError Pos Type Type
26 | FieldSelectorError Pos Type FieldSelector
27 | OperatorError Pos Op2 Type
28 | UndeclaredVariableError Pos String
29 | ArgumentMisMatchError Pos String
32 variableStream :: [String]
33 variableStream = map toString [1..]
35 sem :: AST -> SemOutput
36 sem (AST vd fd) = Right $ (AST vd fd, 'Map'.newMap)
38 instance toString Gamma where
39 toString mp = concat [concat [k, ": ", toString v, "\n"]\\(k, v)<-'Map'.toList mp]
41 instance toString SemError where
42 toString se = "SemError: "