implementation module sem
+import qualified Data.Map as Map
+from Data.Func import $
+import Data.Either
+import Control.Monad.State
import StdMisc
-semanticAnalysis :: AST -> Either Error AST
-semanticAnalysis a =
+import AST
+from parse import :: ParserOutput
+from yard import :: Error
+
+:: Gamma :== 'Map'.Map String Type
+:: Env a :== State Gamma a
+
+sem :: ParserOutput -> SemOutput
+sem (Left p) = Left p
+sem (Right (AST vd fd)) = Right $ AST vd fd
+// foldM semVarDecl vd
+// >>= \gamma ->foldM typecheck gamma fd
+
+semVarDecl :: VarDecl -> Env VarDecl
+semVarDecl (Vardecl pos type ident expr) = undef
+
+
+
+