Safe Haskell | Safe-Infered |
---|
The Haskell→Javascript compiler.
- compile :: CompilesTo from to => CompileConfig -> from -> IO (Either CompileError (to, CompileState))
- runCompile :: CompileConfig -> Compile a -> IO (Either CompileError (a, CompileState))
- compileViaStr :: (Show from, Show to, CompilesTo from to) => CompileConfig -> (from -> Compile to) -> String -> IO (Either CompileError (String, CompileState))
- compileToAst :: (Show from, Show to, CompilesTo from to) => CompileConfig -> (from -> Compile to) -> String -> IO (Either CompileError (to, CompileState))
- compileFromStr :: (Parseable a, MonadError CompileError m) => (a -> m a1) -> String -> m a1
- printCompile :: (Show from, Show to, CompilesTo from to) => CompileConfig -> (from -> Compile to) -> String -> IO ()
- compileModule :: Module -> Compile [JsStmt]
- compileImport :: ImportDecl -> Compile [JsStmt]
- compileDecls :: Bool -> [Decl] -> Compile [JsStmt]
- compileDecl :: Bool -> Decl -> Compile [JsStmt]
- compilePatBind :: Bool -> Maybe Type -> Decl -> Compile [JsStmt]
- compileNormalPatBind :: Bool -> Name -> Exp -> Compile [JsStmt]
- compileFFIFunc :: Type -> Name -> (String, String, FayReturnType) -> Compile [JsStmt]
- compileFFIMethod :: Type -> Name -> (String, String, FayReturnType) -> Compile [JsStmt]
- compileFFISetProp :: Type -> Name -> (String, String, FayReturnType) -> Compile [JsStmt]
- compileFFI :: Type -> Name -> (String, String, FayReturnType) -> JsExp -> [JsName] -> [JsName] -> Compile [JsStmt]
- data ArgType
- = FunctionType
- | JsType
- | StringType
- | DoubleType
- | ListType
- | BoolType
- | UnknownType
- serialize :: ArgType -> JsExp -> JsExp
- functionTypeArgs :: Type -> [ArgType]
- typeArity :: Type -> Integer
- compileDataDecl :: Bool -> Decl -> [QualConDecl] -> Compile [JsStmt]
- qname :: QName -> String
- unname :: Name -> String
- compileFunCase :: Bool -> [Match] -> Compile [JsStmt]
- optimizeTailCalls :: [JsParam] -> Name -> [JsStmt] -> [JsStmt]
- flatten :: JsExp -> Maybe [JsExp]
- expand :: JsExp -> Maybe [JsExp]
- prettyPrintFile :: String -> IO String
- compileRhs :: Rhs -> Compile JsExp
- compileFunMatch :: Bool -> Match -> Compile [JsStmt]
- compileExp :: Exp -> Compile JsExp
- compileApp :: Exp -> Exp -> Compile JsExp
- compileInfixApp :: Exp -> QOp -> Exp -> Compile JsExp
- compileList :: [Exp] -> Compile JsExp
- compileIf :: Exp -> Exp -> Exp -> Compile JsExp
- compileLambda :: [Pat] -> Exp -> Compile JsExp
- compileCase :: Exp -> [Alt] -> Compile JsExp
- compileDoBlock :: [Stmt] -> Compile JsExp
- compileStmt :: Maybe Exp -> Stmt -> Compile (Maybe Exp)
- compilePatAlt :: JsExp -> Alt -> Compile [JsStmt]
- compilePat :: JsExp -> Pat -> [JsStmt] -> Compile [JsStmt]
- compilePLit :: JsExp -> Literal -> [JsStmt] -> Compile [JsStmt]
- equalExps :: JsExp -> JsExp -> JsExp
- isConstant :: JsExp -> Bool
- compilePApp :: QName -> [Pat] -> JsExp -> [JsStmt] -> Compile [JsStmt]
- compilePList :: [Pat] -> [JsStmt] -> JsExp -> Compile [JsStmt]
- compileInfixPat :: JsExp -> Pat -> [JsStmt] -> Compile [JsStmt]
- compileGuardedAlt :: GuardedAlts -> Compile JsExp
- compileLet :: [Decl] -> Exp -> Compile JsExp
- compileLetDecl :: Decl -> Compile [JsStmt]
- compileLit :: Literal -> Compile JsExp
- uniqueNames :: [JsParam]
- optimizePatConditions :: [[JsStmt]] -> [[JsStmt]]
- throw :: String -> JsExp -> JsStmt
- throwExp :: String -> JsExp -> JsExp
- isWildCardAlt :: Alt -> Bool
- isWildCardPat :: Pat -> Bool
- tmpName :: JsExp -> JsName
- thunk :: JsExp -> JsExp
- monad :: JsExp -> JsExp
- stmtsThunk :: [JsStmt] -> JsExp
- unserialize :: FayReturnType -> JsExp -> JsExp
- force :: JsExp -> JsExp
- forceInlinable :: CompileConfig -> JsExp -> JsExp
- resolveOpToVar :: QOp -> Compile Exp
- hjIdent :: String -> QName
- bindToplevel :: Bool -> QName -> JsExp -> Compile JsStmt
- emitExport :: ExportSpec -> Compile ()
- parseResult :: ((SrcLoc, String) -> b) -> (a -> b) -> ParseResult a -> b
- config :: (CompileConfig -> a) -> Compile a
Documentation
compile :: CompilesTo from to => CompileConfig -> from -> IO (Either CompileError (to, CompileState))Source
Compile something that compiles to something else.
runCompile :: CompileConfig -> Compile a -> IO (Either CompileError (a, CompileState))Source
Run the compiler.
compileViaStr :: (Show from, Show to, CompilesTo from to) => CompileConfig -> (from -> Compile to) -> String -> IO (Either CompileError (String, CompileState))Source
Compile a Haskell source string to a JavaScript source string.
compileToAst :: (Show from, Show to, CompilesTo from to) => CompileConfig -> (from -> Compile to) -> String -> IO (Either CompileError (to, CompileState))Source
Compile a Haskell source string to a JavaScript source string.
compileFromStr :: (Parseable a, MonadError CompileError m) => (a -> m a1) -> String -> m a1Source
Compile from a string.
printCompile :: (Show from, Show to, CompilesTo from to) => CompileConfig -> (from -> Compile to) -> String -> IO ()Source
compileModule :: Module -> Compile [JsStmt]Source
Compile Haskell module.
compileImport :: ImportDecl -> Compile [JsStmt]Source
Compile the given import.
compilePatBind :: Bool -> Maybe Type -> Decl -> Compile [JsStmt]Source
Compile a top-level pattern bind.
compileNormalPatBind :: Bool -> Name -> Exp -> Compile [JsStmt]Source
Compile a normal simple pattern binding.
compileFFIFunc :: Type -> Name -> (String, String, FayReturnType) -> Compile [JsStmt]Source
Compile a foreign function.
compileFFIMethod :: Type -> Name -> (String, String, FayReturnType) -> Compile [JsStmt]Source
Compile a foreign method.
compileFFISetProp :: Type -> Name -> (String, String, FayReturnType) -> Compile [JsStmt]Source
Compile a foreign method.
compileFFI :: Type -> Name -> (String, String, FayReturnType) -> JsExp -> [JsName] -> [JsName] -> Compile [JsStmt]Source
Compile an FFI call.
These are the data types that are serializable directly to native JS data types. Strings, floating points and arrays. The others are: actiosn in the JS monad, which are thunks that shouldn't be forced when serialized but wrapped up as JS zero-arg functions, and unknown types can't be converted but should at least be forced.
functionTypeArgs :: Type -> [ArgType]Source
Get arg types of a function type.
compileDataDecl :: Bool -> Decl -> [QualConDecl] -> Compile [JsStmt]Source
Compile a data declaration.
compileFunCase :: Bool -> [Match] -> Compile [JsStmt]Source
Compile a function which pattern matches (causing a case analysis).
:: [JsParam] | The function parameters. |
-> Name | The function name. |
-> [JsStmt] | The body of the function. |
-> [JsStmt] | A new optimized function body. |
Optimize functions in tail-call form.
flatten :: JsExp -> Maybe [JsExp]Source
Flatten an application expression into function : arg : arg : []
prettyPrintFile :: String -> IO StringSource
compileRhs :: Rhs -> Compile JsExpSource
Compile a right-hand-side expression.
compileExp :: Exp -> Compile JsExpSource
Compile Haskell expression.
compileInfixApp :: Exp -> QOp -> Exp -> Compile JsExpSource
Compile an infix application, optimizing the JS cases.
compileList :: [Exp] -> Compile JsExpSource
Compile a list expression.
compileDoBlock :: [Stmt] -> Compile JsExpSource
Compile a do block.
compilePatAlt :: JsExp -> Alt -> Compile [JsStmt]Source
Compile the given pattern against the given expression.
compilePat :: JsExp -> Pat -> [JsStmt] -> Compile [JsStmt]Source
Compile the given pattern against the given expression.
compilePLit :: JsExp -> Literal -> [JsStmt] -> Compile [JsStmt]Source
Compile a literal value from a pattern match.
equalExps :: JsExp -> JsExp -> JsExpSource
Equality test for two expressions, with some optimizations.
isConstant :: JsExp -> BoolSource
Is a JS expression a literal (constant)?
compilePApp :: QName -> [Pat] -> JsExp -> [JsStmt] -> Compile [JsStmt]Source
Compile a pattern application.
compileInfixPat :: JsExp -> Pat -> [JsStmt] -> Compile [JsStmt]Source
Compile an infix pattern (e.g. cons and tuples.)
compileGuardedAlt :: GuardedAlts -> Compile JsExpSource
Compile a guarded alt.
compileLetDecl :: Decl -> Compile [JsStmt]Source
Compile let declaration.
compileLit :: Literal -> Compile JsExpSource
Compile Haskell literal.
uniqueNames :: [JsParam]Source
Generate unique names.
optimizePatConditions :: [[JsStmt]] -> [[JsStmt]]Source
Optimize pattern matching conditions by merging conditions in common.
isWildCardAlt :: Alt -> BoolSource
Is an alt a wildcard?
isWildCardPat :: Pat -> BoolSource
Is a pattern a wildcard?
stmtsThunk :: [JsStmt] -> JsExpSource
Wrap an expression in a thunk.
unserialize :: FayReturnType -> JsExp -> JsExpSource
forceInlinable :: CompileConfig -> JsExp -> JsExpSource
Force an expression in a thunk.
resolveOpToVar :: QOp -> Compile ExpSource
Resolve operators to only built-in (for now) functions.
emitExport :: ExportSpec -> Compile ()Source
Emit exported names.
parseResult :: ((SrcLoc, String) -> b) -> (a -> b) -> ParseResult a -> bSource
Parse result.
config :: (CompileConfig -> a) -> Compile aSource
Get a config option.