1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
3module Generate.JavaScript.Effects
9import qualified Data.ByteString.Builder as BS
10import qualified Data.Map as Map
11import Data.Monoid ((<>))
13import qualified AST.Effects as Effects
14import qualified AST.Module.Name as ModuleName
15import qualified AST.Variable as Var
16import qualified Generate.JavaScript.Builder as JS
17import qualified Generate.JavaScript.BuiltIn as BuiltIn
18import qualified Generate.JavaScript.Variable as Var
25generate :: Map.Map ModuleName.Canonical Effects.ManagerType -> Var.Generator BS.Builder
28 add home mngr makeBuilder =
29 do builder <- makeBuilder
30 stmt <- generateManager home mngr
31 return (JS.stmtToBuilder stmt <> builder)
33 Map.foldrWithKey' add (return "") managers
36generateManager :: ModuleName.Canonical -> Effects.ManagerType -> Var.Generator JS.Stmt
37generateManager home manager =
38 do managers <- BuiltIn.effectManagers
39 let managerName = JS.String (ModuleName.canonicalToText home)
40 let lValue = JS.LBracket managers managerName
41 entries <- generateEntries home manager
42 return $ JS.ExprStmt (JS.Assign lValue entries)
45generateEntries :: ModuleName.Canonical -> Effects.ManagerType -> Var.Generator JS.Expr
46generateEntries home manager =
49 Var.global (Var.Global home name)
54 [ arg "init", arg "onEffects", arg "onSelfMsg", arg "cmdMap" ]
57 [ arg "init", arg "onEffects", arg "onSelfMsg", pure (JS.Int 0), arg "subMap" ]
60 [ arg "init", arg "onEffects", arg "onSelfMsg", arg "cmdMap", arg "subMap" ]
63 <$> Var.global createManager
67createManager :: Var.Global
69 Var.Global (ModuleName.inCore "Elm.Kernel.Platform") "createManager"
keysesc to close
- j k
- move down, up
- enter
- open
- esc
- back, or up a level
- 1 2 3 4
- readme, files, commits, refs
- /
- filter
- y
- copy the clone command
- c
- compare the chosen commit with another (or shift-click both)
- ?
- show or hide this list