@@ -104,19 +104,25 @@ print ansi localizer home name (Can.Forall _ tipe) =
105data State =
105data State =
107+ { _kernel :: B.Builder
107− { _revBuilders :: [B.Builder]
108+ , _revBuilders :: [B.Builder]
108 , _seenGlobals :: Set.Set Opt.Global
109 , _seenGlobals :: Set.Set Opt.Global
112emptyState :: State
113emptyState :: State
113emptyState =
114emptyState =
114− State [] Set.empty
115+ State mempty [] Set.empty
117stateToBuilder :: State -> B.Builder
118stateToBuilder :: State -> B.Builder
118−stateToBuilder (State revBuilders _) =
119+stateToBuilder (State kernel revBuilders _) =
119− List.foldl1' (\builder b -> b <> builder) revBuilders
120+ case revBuilders of
125+ kernel <> List.foldl' (\code decl -> decl <> code) b bs
@@ -127,12 +133,12 @@ type Graph = Map.Map Opt.Global Opt.Node
129addGlobal :: Mode.Mode -> Graph -> State -> Opt.Global -> State
135addGlobal :: Mode.Mode -> Graph -> State -> Opt.Global -> State
130−addGlobal mode graph state@(State builders seen) global =
136+addGlobal mode graph state@(State kernel builders seen) global =
131 if Set.member global seen then
137 if Set.member global seen then
134 addGlobalHelp mode graph global $
140 addGlobalHelp mode graph global $
135− State builders (Set.insert global seen)
141+ State kernel builders (Set.insert global seen)
138addGlobalHelp :: Mode.Mode -> Graph -> Opt.Global -> State -> State
144addGlobalHelp :: Mode.Mode -> Graph -> Opt.Global -> State -> State
@@ -175,10 +181,10 @@ addGlobalHelp mode graph global state =
176 case maybeServer of
182 case maybeServer of
177 Just (Opt.KContent serverChunks serverDeps) | Mode.isServer mode ->
183 Just (Opt.KContent serverChunks serverDeps) | Mode.isServer mode ->
178− addBuilder (addDeps serverDeps state) (generateKernel mode serverChunks)
184+ addKernel (addDeps serverDeps state) (generateKernel mode serverChunks)
181− addBuilder (addDeps clientDeps state) (generateKernel mode clientChunks)
187+ addKernel (addDeps clientDeps state) (generateKernel mode clientChunks)
183 Opt.Enum index ->
189 Opt.Enum index ->
184 addStmt state (
190 addStmt state (
@@ -207,8 +213,13 @@ addStmt state stmt =
209addBuilder :: State -> B.Builder -> State
215addBuilder :: State -> B.Builder -> State
210−addBuilder (State revBuilders seen) builder =
216+addBuilder (State kernel revBuilders seen) builder =
211− State (builder:revBuilders) seen
217+ State kernel (builder:revBuilders) seen
220+addKernel :: State -> B.Builder -> State
221+addKernel (State kernel revBuilders seen) moreKernel =
222+ State (moreKernel <> kernel) revBuilders seen
214var :: Opt.Global -> Expr.Code -> JS.Stmt
225var :: Opt.Global -> Expr.Code -> JS.Stmt