Portability | portable |
---|---|
Stability | experimental |
Maintainer | github.com/justinethier |
Safe Haskell | Safe-Inferred |
Language.Scheme.Compiler
Description
This module contains an experimental Scheme to Haskell compiler.
The compiler performs the following transformations:
Scheme AST (LispVal) => Haskell AST (HaskAST) => Compiled Code (String)
The GHC compiler is then used to create a native executable.
At present, the focus has just been on creating a compiler that will generate correct, working code. Many optimizations could and need to be made for time and space...
- data CompOpts = CompileOptions {}
- defaultCompileOptions :: String -> CompOpts
- createAstFunc :: CompOpts -> [HaskAST] -> HaskAST
- createAstCont :: CompOpts -> String -> String -> HaskAST
- data HaskAST
- showValAST :: HaskAST -> String
- joinL :: forall a. [[a]] -> [a] -> [a]
- ast2Str :: LispVal -> String
- asts2Str :: [LispVal] -> String
- headerModule :: [String]
- headerImports :: [String]
- header :: String -> [String]
- initializeCompiler :: Env -> IOThrowsError [HaskAST]
- compileLisp :: Env -> String -> String -> Maybe String -> IOThrowsError [HaskAST]
- compileBlock :: String -> Maybe String -> Env -> [HaskAST] -> [LispVal] -> IOThrowsError [HaskAST]
- compileScalar :: String -> CompOpts -> IOThrowsError [HaskAST]
- compileLambdaList :: [LispVal] -> IOThrowsError String
- compile :: Env -> LispVal -> CompOpts -> IOThrowsError [HaskAST]
- mcompile :: Env -> LispVal -> CompOpts -> IOThrowsError [HaskAST]
- mfunc :: Env -> LispVal -> (Env -> LispVal -> CompOpts -> IOThrowsError [HaskAST]) -> CompOpts -> IOThrowsError [HaskAST]
- divertVars :: Env -> LispVal -> CompOpts -> (Env -> LispVal -> CompOpts -> IOThrowsError [HaskAST]) -> IOThrowsError [HaskAST]
- compileDivertedVars :: String -> Env -> [LispVal] -> CompOpts -> IOThrowsError HaskAST
- compileSpecialFormEntryPoint :: String -> String -> CompOpts -> IOThrowsError HaskAST
- compileSpecialForm :: String -> String -> CompOpts -> IOThrowsError HaskAST
- compileExpr :: Env -> LispVal -> String -> Maybe String -> IOThrowsError [HaskAST]
- compileApply :: Env -> LispVal -> CompOpts -> IOThrowsError [HaskAST]
Documentation
Constructors
CompileOptions | |
Fields |
createAstFunc :: CompOpts -> [HaskAST] -> HaskASTSource
Constructors
AstAssignM String HaskAST | |
AstFunction | |
AstValue String | |
AstContinuation | |
showValAST :: HaskAST -> StringSource
headerModule :: [String]Source
compileLisp :: Env -> String -> String -> Maybe String -> IOThrowsError [HaskAST]Source
compileBlock :: String -> Maybe String -> Env -> [HaskAST] -> [LispVal] -> IOThrowsError [HaskAST]Source
compileScalar :: String -> CompOpts -> IOThrowsError [HaskAST]Source
mfunc :: Env -> LispVal -> (Env -> LispVal -> CompOpts -> IOThrowsError [HaskAST]) -> CompOpts -> IOThrowsError [HaskAST]Source
Arguments
:: Env | Current compile Environment |
-> LispVal | Lisp code after macro expansion |
-> CompOpts | Compiler options |
-> (Env -> LispVal -> CompOpts -> IOThrowsError [HaskAST]) | Continuation to call into after vars are diverted |
-> IOThrowsError [HaskAST] | Code generated by the continuation, along with the code added to divert vars to the compiled program |
Do the actual insertion of diverted variables back to the compiled program.
compileDivertedVars :: String -> Env -> [LispVal] -> CompOpts -> IOThrowsError HaskASTSource
Take a list of variables diverted into env at compile time, and divert them into the env at runtime
compileSpecialForm :: String -> String -> CompOpts -> IOThrowsError HaskASTSource
compileExpr :: Env -> LispVal -> String -> Maybe String -> IOThrowsError [HaskAST]Source
compileApply :: Env -> LispVal -> CompOpts -> IOThrowsError [HaskAST]Source
Compiles each argument to a function call, and then uses apply to call the function