on master help sign in
Generate effect managers without creating named record fields

This will produce JS that is easier to mangle. I think it also is a bit clearer than what I had before.

commitf71ac0bb3a07c99d0df0a8c4384cd67de6a13e47 authorEvan Czaplicki <evancz@users.noreply.github.com> dateWed 19 Jul 2017, 14:12 (9 years ago) parent8060c4e
1 file changed+22−35
src/Generate/JavaScript/Effects.hs+22−35
src/Generate/JavaScript/Effects.hs+22−35
@@ -9,12 +9,10 @@ module Generate.JavaScript.Effects
99import qualified Data.ByteString.Builder as BS
1010import qualified Data.Map as Map
1111import Data.Monoid ((<>))
12−import Data.Text (Text)
1312
1413import qualified AST.Effects as Effects
1514import qualified AST.Module.Name as ModuleName
1615import qualified AST.Variable as Var
17−import qualified Elm.Package as Pkg
1816import qualified Generate.JavaScript.Builder as JS
1917import qualified Generate.JavaScript.BuiltIn as BuiltIn
2018import qualified Generate.JavaScript.Variable as Var
@@ -45,38 +43,27 @@ generateManager home manager =
4543
4644
4745generateEntries :: ModuleName.Canonical -> Effects.ManagerType -> Var.Generator JS.Expr
48−generateEntries home@(ModuleName.Canonical pkg _) manager =
46+generateEntries home manager =
4947 let
50− entry name =
51− do let key = JS.IdProp (JS.Id name)
52− value <- Var.global (Var.Global home name)
53− return ( key, value )
48+ arg name =
49+ Var.global (Var.Global home name)
50+
51+ makeArgs =
52+ case manager of
53+ Effects.Cmds ->
54+ [ arg "init", arg "onEffects", arg "onSelfMsg", arg "cmdMap" ]
55+
56+ Effects.Subs ->
57+ [ arg "init", arg "onEffects", arg "onSelfMsg", pure (JS.Int 0), arg "subMap" ]
58+
59+ Effects.Both ->
60+ [ arg "init", arg "onEffects", arg "onSelfMsg", arg "cmdMap", arg "subMap" ]
5461 in
55− fmap JS.Object $ sequence $
56− [ "pkg" ==> Pkg.toText pkg
57− , entry "init"
58− , entry "onEffects"
59− , entry "onSelfMsg"
60− ]
61− ++
62− case manager of
63− Effects.Cmds ->
64− [ "tag" ==> "cmd"
65− , entry "cmdMap"
66− ]
67−
68− Effects.Subs ->
69− [ "tag" ==> "sub"
70− , entry "subMap"
71− ]
72−
73− Effects.Both ->
74− [ "tag" ==> "fx"
75− , entry "cmdMap"
76− , entry "subMap"
77− ]
78−
79−
80−(==>) :: Text -> Text -> Var.Generator ( JS.Prop, JS.Expr )
81−(==>) key value =
82− return ( JS.IdProp (JS.Id key), JS.String value )
62+ JS.Call
63+ <$> Var.global createManager
64+ <*> sequence makeArgs
65+
66+
67+createManager :: Var.Global
68+createManager =
69+ Var.Global (ModuleName.inCore "Elm.Kernel.Platform") "createManager"