on master help sign in
Account for client and server kernel code
fa03159Evan Czaplicki
elm-compiler.cabal+3
@@ -53,6 +53,8 @@ Library
53 Elm.Compiler.Objects,
53 Elm.Compiler.Objects,
54 Elm.Compiler.Type,
54 Elm.Compiler.Type,
55 Elm.Docs,
55 Elm.Docs,
56+ Elm.Kernel,
57+ Elm.Header,
56 Elm.Package,
58 Elm.Package,
57 Elm.Utils,
59 Elm.Utils,
58 Json.Decode,
60 Json.Decode,
@@ -87,6 +89,7 @@ Library
87 Docs.Centralize,
89 Docs.Centralize,
88 Docs.Check,
90 Docs.Check,
89 Elm.Compiler.Imports,
91 Elm.Compiler.Imports,
92+ Elm.Compiler.Internals,
90 Elm.Compiler.Objects.Internal,
93 Elm.Compiler.Objects.Internal,
91 Elm.Compiler.Type.Extract,
94 Elm.Compiler.Type.Extract,
92 Elm.Compiler.Version,
95 Elm.Compiler.Version,
src/AST/Kernel.hs+31−7
@@ -1,6 +1,7 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2module AST.Kernel
2module AST.Kernel
3− ( Info(..)
3+ ( Data(..)
4+ , Content(..)
4 , Chunk(..)
5 , Chunk(..)
5 )
6 )
6 where
7 where
@@ -15,16 +16,31 @@ import qualified AST.Module.Name as ModuleName
15
16
16
17
17
18
18−-- INFO
19+-- DATA
19
20
20
21
21−data Info =
22+data Data =
22− Info
23+ Data
24+ { _client :: Content
25+ , _server :: Maybe Content
26+ }
27+
28+
29+
30+-- CONTENT
31+
32+
33+data Content =
34+ Content
23 { _imports :: [(ModuleName.Raw, Text.Text)]
35 { _imports :: [(ModuleName.Raw, Text.Text)]
24 , _chunks :: [Chunk]
36 , _chunks :: [Chunk]
25 }
37 }
26
38
27
39
40+
41+-- CHUNKS
42+
43+
28data Chunk
44data Chunk
29 = JS BS.ByteString
45 = JS BS.ByteString
30 | Var ModuleName.Raw Text.Text
46 | Var ModuleName.Raw Text.Text
@@ -37,12 +53,20 @@ data Chunk
37-- BINARY
53-- BINARY
38
54
39
55
40−instance Binary Info where
56+instance Binary Data where
57+ put (Data client server) =
58+ put client >> put server
59+
60+ get =
61+ liftM2 Data get get
62+
63+
64+instance Binary Content where
41− put (Info imports chunks) =
65+ put (Content imports chunks) =
42 put imports >> put chunks
66 put imports >> put chunks
43
67
44 get =
68 get =
45− liftM2 Info get get
69+ liftM2 Content get get
46
70
47
71
48instance Binary Chunk where
72instance Binary Chunk where
src/Elm/Compiler.hs+16−88
@@ -2,12 +2,10 @@
2module Elm.Compiler
2module Elm.Compiler
3 ( version
3 ( version
4 , compile, Context(..), Result(..)
4 , compile, Context(..), Result(..)
5− , generate
5+ , generate, JS.Target(..)
6 , Localizer, dummyLocalizer
6 , Localizer, dummyLocalizer
7− , Error, errorToDoc, errorToJson
7+ , I.Error, errorToDoc, errorToJson
8− , Warning, warningToDoc, warningToJson
8+ , I.Warning, warningToDoc, warningToJson
9− , Tag(..), parseHeader
10− , KernelInfo(..), parseKernel
11 )
9 )
12 where
10 where
13
11
@@ -17,21 +15,17 @@ import Data.Text (Text)
17import qualified Data.ByteString.Builder as BS
15import qualified Data.ByteString.Builder as BS
18import Text.PrettyPrint.ANSI.Leijen (Doc)
16import Text.PrettyPrint.ANSI.Leijen (Doc)
19
17
20−import qualified AST.Kernel as Kernel (Info)
21import qualified AST.Module as Module
18import qualified AST.Module as Module
22import qualified AST.Module.Name as ModuleName
19import qualified AST.Module.Name as ModuleName
23import qualified Compile
20import qualified Compile
24import qualified Docs.Check as Docs
21import qualified Docs.Check as Docs
25−import qualified Elm.Compiler.Imports as Imports
22+import qualified Elm.Compiler.Internals as I
26import qualified Elm.Compiler.Module as M
23import qualified Elm.Compiler.Module as M
27import qualified Elm.Compiler.Objects.Internal as Obj
24import qualified Elm.Compiler.Objects.Internal as Obj
28import qualified Elm.Compiler.Version
25import qualified Elm.Compiler.Version
29import qualified Elm.Docs as Docs
26import qualified Elm.Docs as Docs
30import qualified Elm.Package as Package
27import qualified Elm.Package as Package
31import qualified Generate.JavaScript as JS
28import qualified Generate.JavaScript as JS
32−import qualified Parse.Helpers as Parse (run)
33−import qualified Parse.Kernel as Kernel (parser)
34−import qualified Parse.Module as Parse (header)
35import qualified Reporting.Annotation as A
29import qualified Reporting.Annotation as A
36import qualified Reporting.Bag as Bag
30import qualified Reporting.Bag as Bag
37import qualified Reporting.Error as Error
31import qualified Reporting.Error as Error
@@ -55,7 +49,7 @@ version =
55
49
56
50
57{-| Compiles Elm source code to JavaScript. -}
51{-| Compiles Elm source code to JavaScript. -}
58−compile :: Context -> Text -> (Localizer, [Warning], Either [Error] Result)
52+compile :: Context -> Text -> (Localizer, [I.Warning], Either [I.Error] Result)
59compile (Context packageName exposed importDict interfaces) source =
53compile (Context packageName exposed importDict interfaces) source =
60 let
54 let
61 (Result.Result oneLocalizer warnings answer) =
55 (Result.Result oneLocalizer warnings answer) =
@@ -68,8 +62,8 @@ compile (Context packageName exposed importDict interfaces) source =
68 return (Result docs iface objs)
62 return (Result docs iface objs)
69 in
63 in
70 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
64 ( Result.oneToValue dummyLocalizer Localizer oneLocalizer
71− , Bag.toList Warning warnings
65+ , Bag.toList I.Warning warnings
72− , Result.answerToEither Error id answer
66+ , Result.answerToEither I.Error id answer
73 )
67 )
74
68
75
69
@@ -111,7 +105,7 @@ docsGen isExposed (Module.Module name info) =
111-- CODE GENERATION
105-- CODE GENERATION
112
106
113
107
114−generate :: Bool -> Obj.Graph -> Obj.Roots -> BS.Builder
108+generate :: Bool -> JS.Target -> Obj.Graph -> Obj.Roots -> BS.Builder
115generate =
109generate =
116 JS.generate
110 JS.generate
117
111
@@ -133,17 +127,13 @@ dummyLocalizer =
133-- ERRORS
127-- ERRORS
134
128
135
129
136−newtype Error =
137− Error (A.Located Error.Error)
138−
139−
140−errorToDoc :: Localizer -> String -> Text -> Error -> Doc
130+errorToDoc :: Localizer -> String -> Text -> I.Error -> Doc
141−errorToDoc (Localizer localizer) location source (Error (A.A region err)) =
131+errorToDoc (Localizer localizer) location source (I.Error (A.A region err)) =
142 Report.toDoc location region (Error.toReport localizer err) source
132 Report.toDoc location region (Error.toReport localizer err) source
143
133
144
134
145−errorToJson :: Localizer -> String -> Error -> Json.Value
135+errorToJson :: Localizer -> String -> I.Error -> Json.Value
146−errorToJson (Localizer localizer) location (Error err) =
136+errorToJson (Localizer localizer) location (I.Error err) =
147 Error.toJson localizer location err
137 Error.toJson localizer location err
148
138
149
139
@@ -151,73 +141,11 @@ errorToJson (Localizer localizer) location (Error err) =
151-- WARNINGS
141-- WARNINGS
152
142
153
143
154−newtype Warning =
155− Warning (A.Located Warning.Warning)
156−
157−
158−warningToDoc :: Localizer -> String -> Text -> Warning -> Doc
144+warningToDoc :: Localizer -> String -> Text -> I.Warning -> Doc
159−warningToDoc (Localizer localizer) location source (Warning (A.A region wrn)) =
145+warningToDoc (Localizer localizer) location source (I.Warning (A.A region wrn)) =
160 Report.toDoc location region (Warning.toReport localizer wrn) source
146 Report.toDoc location region (Warning.toReport localizer wrn) source
161
147
162
148
163−warningToJson :: Localizer -> String -> Warning -> Json.Value
149+warningToJson :: Localizer -> String -> I.Warning -> Json.Value
164−warningToJson (Localizer localizer) location (Warning wrn) =
150+warningToJson (Localizer localizer) location (I.Warning wrn) =
165 Warning.toJson localizer location wrn
151 Warning.toJson localizer location wrn
166−
167−
168−
169−-- PARSE HEADER
170−
171−
172−data Tag = Normal | Effect | Port
173−
174−
175−parseHeader :: Package.Name -> Text -> Either Error (Maybe (Tag, M.Raw), [M.Raw])
176−parseHeader pkgName sourceCode =
177− case Parse.run Parse.header sourceCode of
178− Right header ->
179− Right $ toHeaderSummary pkgName header
180−
181− Left err ->
182− Left (Error (A.map Error.Syntax err))
183−
184−
185−toHeaderSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Maybe (Tag, M.Raw), [M.Raw])
186−toHeaderSummary pkgName (Module.Header maybeHeaderDecl imports) =
187− let
188− dependencies =
189− if pkgName == Package.core
190− then map (A.drop . fst . A.drop) imports
191− else map (A.drop . fst . A.drop) imports ++ map fst Imports.defaults
192− in
193− case maybeHeaderDecl of
194− Nothing ->
195− ( Nothing, dependencies )
196−
197− Just (Module.HeaderDecl sourceTag name _ _ _) ->
198− let
199− tag =
200− case sourceTag of
201− Module.Normal -> Normal
202− Module.Port _ -> Port
203− Module.Effect _ -> Effect
204− in
205− ( Just (tag, name), dependencies )
206−
207−
208−
209−-- PARSE KERNEL
210−
211−
212−newtype KernelInfo =
213− KernelInfo Kernel.Info
214−
215−
216−parseKernel :: Text -> Either Error KernelInfo
217−parseKernel sourceCode =
218− case Parse.run Kernel.parser sourceCode of
219− Right info ->
220− Right (KernelInfo info)
221−
222− Left err ->
223− Left (Error (A.map Error.Syntax err))
src/Elm/Compiler/Internals.hsnew file+20
@@ -0,0 +1,20 @@
1+{-# OPTIONS_GHC -Wall #-}
2+module Elm.Compiler.Internals
3+ ( Error(..)
4+ , Warning(..)
5+ )
6+ where
7+
8+
9+import qualified Reporting.Annotation as A
10+import qualified Reporting.Error as Error
11+import qualified Reporting.Warning as Warning
12+
13+
14+
15+-- OPAQUE TYPES
16+
17+
18+newtype Error = Error (A.Located Error.Error)
19+newtype Warning = Warning (A.Located Warning.Warning)
20+
src/Elm/Compiler/Objects.hs+3−2
@@ -13,6 +13,7 @@ module Elm.Compiler.Objects
13
13
14import qualified Data.Map as Map
14import qualified Data.Map as Map
15
15
16+import qualified AST.Kernel as Kernel
16import qualified AST.Module.Name as ModuleName
17import qualified AST.Module.Name as ModuleName
17import qualified Elm.Compiler as Compiler
18import qualified Elm.Compiler as Compiler
18import Elm.Compiler.Objects.Internal as Obj
19import Elm.Compiler.Objects.Internal as Obj
@@ -22,10 +23,10 @@ import Elm.Compiler.Objects.Internal as Obj
22-- HELPER
23-- HELPER
23
24
24
25
25−graphForPackage :: Map.Map ModuleName.Raw Compiler.KernelInfo -> [Compiler.Result] -> Obj.Graph
26+graphForPackage :: Map.Map ModuleName.Raw Kernel.Data -> [Compiler.Result] -> Obj.Graph
26graphForPackage kernels results =
27graphForPackage kernels results =
27 let
28 let
28 kernelGraph =
29 kernelGraph =
29− Obj.Graph Map.empty (Map.map (\(Compiler.KernelInfo info) -> info) kernels)
30+ Obj.Graph Map.empty kernels
30 in
31 in
31 Obj.unions (kernelGraph : map Compiler._objs results)
32 Obj.unions (kernelGraph : map Compiler._objs results)
src/Elm/Compiler/Objects/Internal.hs+1−1
@@ -34,7 +34,7 @@ import qualified AST.Variable as Var
34data Graph =
34data Graph =
35 Graph
35 Graph
36 { _decls :: Map.Map Var.Global Opt.Decl
36 { _decls :: Map.Map Var.Global Opt.Decl
37− , _kernels :: Map.Map ModuleName.Raw Kernel.Info
37+ , _kernels :: Map.Map ModuleName.Raw Kernel.Data
38 }
38 }
39
39
40
40
src/Elm/Header.hsnew file+63
@@ -0,0 +1,63 @@
1+{-# OPTIONS_GHC -Wall #-}
2+module Elm.Header
3+ ( Tag(..)
4+ , parse
5+ )
6+ where
7+
8+
9+import Data.Text (Text)
10+
11+import qualified AST.Module as Module
12+import qualified Elm.Compiler.Imports as Imports
13+import qualified Elm.Compiler.Internals as I
14+import qualified Elm.Compiler.Module as M
15+import qualified Elm.Package as Package
16+import qualified Parse.Helpers as Parse (run)
17+import qualified Parse.Module as Parse (header)
18+import qualified Reporting.Annotation as A
19+import qualified Reporting.Error as Error
20+
21+
22+
23+-- HEADER TAGS
24+
25+
26+data Tag = Normal | Effect | Port
27+
28+
29+
30+-- PARSE
31+
32+
33+parse :: Package.Name -> Text -> Either I.Error (Maybe (Tag, M.Raw), [M.Raw])
34+parse pkgName sourceCode =
35+ case Parse.run Parse.header sourceCode of
36+ Right header ->
37+ Right $ toSummary pkgName header
38+
39+ Left err ->
40+ Left (I.Error (A.map Error.Syntax err))
41+
42+
43+toSummary :: Package.Name -> Module.Header [Module.UserImport] -> (Maybe (Tag, M.Raw), [M.Raw])
44+toSummary pkgName (Module.Header maybeHeaderDecl imports) =
45+ let
46+ dependencies =
47+ if pkgName == Package.core
48+ then map (A.drop . fst . A.drop) imports
49+ else map (A.drop . fst . A.drop) imports ++ map fst Imports.defaults
50+ in
51+ case maybeHeaderDecl of
52+ Nothing ->
53+ ( Nothing, dependencies )
54+
55+ Just (Module.HeaderDecl sourceTag name _ _ _) ->
56+ let
57+ tag =
58+ case sourceTag of
59+ Module.Normal -> Normal
60+ Module.Port _ -> Port
61+ Module.Effect _ -> Effect
62+ in
63+ ( Just (tag, name), dependencies )
src/Elm/Kernel.hsnew file+31
@@ -0,0 +1,31 @@
1+{-# OPTIONS_GHC -Wall #-}
2+module Elm.Kernel
3+ ( Kernel.Data(..)
4+ , Kernel.Content
5+ , parse
6+ )
7+ where
8+
9+
10+import Data.Text (Text)
11+
12+import qualified AST.Kernel as Kernel (Data(..), Content(..))
13+import qualified Elm.Compiler.Internals as I
14+import qualified Parse.Helpers as Parse (run)
15+import qualified Parse.Kernel as Kernel (parser)
16+import qualified Reporting.Annotation as A
17+import qualified Reporting.Error as Error
18+
19+
20+
21+-- PARSE KERNEL
22+
23+
24+parse :: Text -> Either I.Error Kernel.Content
25+parse sourceCode =
26+ case Parse.run Kernel.parser sourceCode of
27+ Right content ->
28+ Right content
29+
30+ Left err ->
31+ Left (I.Error (A.map Error.Syntax err))
src/Generate/JavaScript.hs+53−24
@@ -1,6 +1,10 @@
1{-# OPTIONS_GHC -Wall #-}
1{-# OPTIONS_GHC -Wall #-}
2{-# LANGUAGE OverloadedStrings #-}
2{-# LANGUAGE OverloadedStrings #-}
3−module Generate.JavaScript (generate) where
3+module Generate.JavaScript
4+ ( generate
5+ , Target(..)
6+ )
7+ where
4
8
5import Control.Monad (foldM)
9import Control.Monad (foldM)
6import Data.Monoid ((<>))
10import Data.Monoid ((<>))
@@ -28,11 +32,11 @@ import qualified Generate.JavaScript.Variable as JS
28-- GENERATE JAVASCRIPT
32-- GENERATE JAVASCRIPT
29
33
30
34
31−generate :: Bool -> Obj.Graph -> Obj.Roots -> BS.Builder
35+generate :: Bool -> Target -> Obj.Graph -> Obj.Roots -> BS.Builder
32−generate debug graph roots =
36+generate debug target graph roots =
33 let
37 let
34− (State builders _ _ effects _) =
38+ (State builders _ _ effects) =
35− List.foldl' (crawl graph) (initialState debug) (Obj.toGlobals roots)
39+ List.foldl' (crawl (Env debug target) graph) initialState (Obj.toGlobals roots)
36
40
37 managers =
41 managers =
38 JS.run (JsEffects.generate effects)
42 JS.run (JsEffects.generate effects)
@@ -41,6 +45,20 @@ generate debug graph roots =
41
45
42
46
43
47
48+-- CRAWL ENV
49+
50+
51+data Env =
52+ Env
53+ { _debug :: Bool
54+ , _target :: Target
55+ }
56+
57+
58+data Target = Client | Server
59+
60+
61+
44-- CRAWL STATE
62-- CRAWL STATE
45
63
46
64
@@ -50,21 +68,20 @@ data State =
50 , _seenDecls :: Set.Set Var.Global
68 , _seenDecls :: Set.Set Var.Global
51 , _seenKernels :: Set.Set ModuleName.Raw
69 , _seenKernels :: Set.Set ModuleName.Raw
52 , _effects :: Map.Map ModuleName.Canonical Effects.ManagerType
70 , _effects :: Map.Map ModuleName.Canonical Effects.ManagerType
53− , _debug :: Bool
54 }
71 }
55
72
56
73
57−initialState :: Bool -> State
74+initialState :: State
58−initialState debug =
75+initialState =
59− State [] Set.empty Set.empty Map.empty debug
76+ State [] Set.empty Set.empty Map.empty
60
77
61
78
62
79
63-- CRAWL
80-- CRAWL
64
81
65
82
66−crawl :: Obj.Graph -> State -> Var.Global -> State
83+crawl :: Env -> Obj.Graph -> State -> Var.Global -> State
67−crawl graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _ _) name@(Var.Global home _) =
84+crawl env graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _) name@(Var.Global home _) =
68 if Set.member name seenDecls then
85 if Set.member name seenDecls then
69 state
86 state
70
87
@@ -74,7 +91,7 @@ crawl graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _ _)
74 else
91 else
75 case Map.lookup name decls of
92 case Map.lookup name decls of
76 Just decl ->
93 Just decl ->
77− crawlDecl graph name decl state
94+ crawlDecl env graph name decl state
78
95
79 Nothing ->
96 Nothing ->
80 let
97 let
@@ -86,7 +103,7 @@ crawl graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _ _)
86 else
103 else
87 case Map.lookup kernelModule kernels of
104 case Map.lookup kernelModule kernels of
88 Just info ->
105 Just info ->
89− crawlKernel graph kernelModule info state
106+ crawlKernel env graph kernelModule info state
90
107
91 Nothing ->
108 Nothing ->
92 error (crawlError name)
109 error (crawlError name)
@@ -96,14 +113,14 @@ crawl graph@(Obj.Graph decls kernels) state@(State _ seenDecls seenKernels _ _)
96-- CRAWL DECL
113-- CRAWL DECL
97
114
98
115
99−crawlDecl :: Obj.Graph -> Var.Global -> Opt.Decl -> State -> State
116+crawlDecl :: Env -> Obj.Graph -> Var.Global -> Opt.Decl -> State -> State
100−crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) state1 =
117+crawlDecl env graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) state1 =
101 let
118 let
102 state2 =
119 state2 =
103 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
120 state1 { _seenDecls = Set.insert var (_seenDecls state1) }
104
121
105− (State builders seenDecls seenKernels effects debug) =
122+ (State builders seenDecls seenKernels effects) =
106− Set.foldl' (crawl graph) state2 direct
123+ Set.foldl' (crawl env graph) state2 direct
107
124
108 stmt =
125 stmt =
109 JS.run (JsExpr.generateDecl home name body)
126 JS.run (JsExpr.generateDecl home name body)
@@ -114,24 +131,37 @@ crawlDecl graph var@(Var.Global home name) (Opt.Decl direct indirect fx body) st
114 , _seenDecls = seenDecls
131 , _seenDecls = seenDecls
115 , _seenKernels = seenKernels
132 , _seenKernels = seenKernels
116 , _effects = maybe id (Map.insert home) fx effects
133 , _effects = maybe id (Map.insert home) fx effects
117− , _debug = debug
118 }
134 }
119 in
135 in
120− Set.foldl' (crawl graph) state4 indirect
136+ Set.foldl' (crawl env graph) state4 indirect
121
137
122
138
123
139
124-- CRAWL KERNEL
140-- CRAWL KERNEL
125
141
126
142
127−crawlKernel :: Obj.Graph -> ModuleName.Raw -> Kernel.Info -> State -> State
143+crawlKernel :: Env -> Obj.Graph -> ModuleName.Raw -> Kernel.Data -> State -> State
144+crawlKernel env@(Env _ target) graph name (Kernel.Data client maybeServer) state =
145+ let
146+ content =
147+ case target of
148+ Server ->
149+ maybe client id maybeServer
150+
151+ Client ->
152+ client
153+ in
154+ crawlKernelContent env graph name content state
155+
156+
157+crawlKernelContent :: Env -> Obj.Graph -> ModuleName.Raw -> Kernel.Content -> State -> State
128−crawlKernel graph name (Kernel.Info imports chunks) state1 =
158+crawlKernelContent env@(Env debug _) graph name (Kernel.Content imports chunks) state1 =
129 let
159 let
130 state2 =
160 state2 =
131 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
161 state1 { _seenKernels = Set.insert name (_seenKernels state1) }
132
162
133− (State builders seenDecls seenKernels effects debug) =
163+ (State builders seenDecls seenKernels effects) =
134− List.foldl' (crawl graph) state2 (map toCoreGlobal imports)
164+ List.foldl' (crawl env graph) state2 (map toCoreGlobal imports)
135
165
136 builder =
166 builder =
137 JS.run (foldM (chunkToBuilder debug) mempty chunks)
167 JS.run (foldM (chunkToBuilder debug) mempty chunks)
@@ -141,7 +171,6 @@ crawlKernel graph name (Kernel.Info imports chunks) state1 =
141 , _seenDecls = seenDecls
171 , _seenDecls = seenDecls
142 , _seenKernels = seenKernels
172 , _seenKernels = seenKernels
143 , _effects = effects
173 , _effects = effects
144− , _debug = debug
145 }
174 }
146
175
147
176
src/Parse/Kernel.hs+2−2
@@ -30,12 +30,12 @@ import qualified Reporting.Annotation as A
30-- PARSER
30-- PARSER
31
31
32
32
33−parser :: Parser Kernel.Info
33+parser :: Parser Kernel.Content
34parser =
34parser =
35 do header <- Parse.kernelHeader
35 do header <- Parse.kernelHeader
36 let imports = Map.unions (map headerToImport header)
36 let imports = Map.unions (map headerToImport header)
37 chunks <- parserHelp imports Map.empty Map.empty []
37 chunks <- parserHelp imports Map.empty Map.empty []
38− return (Kernel.Info (Map.elems imports) chunks)
38+ return (Kernel.Content (Map.elems imports) chunks)
39
39
40
40
41parserHelp :: Imports -> Enums -> Fields -> [Kernel.Chunk] -> Parser [Kernel.Chunk]
41parserHelp :: Imports -> Enums -> Fields -> [Kernel.Chunk] -> Parser [Kernel.Chunk]