Copyright | (c) Henry J. Wylde, 2015 |
---|---|
License | BSD3 |
Maintainer | public@hjwylde.com |
Safe Haskell | None |
Language | Haskell2010 |
Type resolving functions that transform the abstract syntax tree to a typed one.
These functions will transform every Expr
into an TypedExpr
and return the transformed
tree.
The Language.Qux.Annotated.TypeChecker and Language.Qux.Llvm.Compiler modules require the tree
to be typed.
- type Resolve = Reader Context
- runResolve :: Resolve a -> Context -> a
- data Context = Context {}
- context :: Program -> Context
- emptyContext :: Context
- type Locals = Map Id Type
- retrieve :: MonadReader Context m => Id -> StateT Locals m (Maybe [Type])
- resolve :: Program SourcePos -> Program SourcePos
- resolveProgram :: Program SourcePos -> Resolve (Program SourcePos)
- resolveDecl :: Decl SourcePos -> Resolve (Decl SourcePos)
- resolveStmt :: Stmt SourcePos -> StateT Locals Resolve (Stmt SourcePos)
- resolveExpr :: Expr SourcePos -> StateT Locals Resolve (Expr SourcePos)
- resolveValue :: Value -> Type
- extractType :: Expr a -> Type
Environment
type Resolve = Reader Context Source
A type that allows resolving types.
Requires a Context
for evaluation.
runResolve :: Resolve a -> Context -> a Source
Runs the given resolve with the context.
Global context
Global context that holds function definition types.
emptyContext :: Context Source
An empty context.
Local context
type Locals = Map Id Type Source
Local context. This is a map of variable names to types (e.g., parameters).
retrieve :: MonadReader Context m => Id -> StateT Locals m (Maybe [Type]) Source
Retrieves the type of the given identifier. Preference is placed on local variables. A local variable type is a singleton list, while a function type is it's parameter types and return type.
Type resolving
resolve :: Program SourcePos -> Program SourcePos Source
Resolves the types of the program, returning the modified syntax tree.
resolveProgram :: Program SourcePos -> Resolve (Program SourcePos) Source
Resolves the types of a program.
resolveDecl :: Decl SourcePos -> Resolve (Decl SourcePos) Source
Resolves the types of a declaration.
resolveStmt :: Stmt SourcePos -> StateT Locals Resolve (Stmt SourcePos) Source
Resolves the types of a statement.
resolveExpr :: Expr SourcePos -> StateT Locals Resolve (Expr SourcePos) Source
Resolves the types of an expression.
resolveValue :: Value -> Type Source
Resolves the type of a value.