@@ -9,6 +9,7 @@ import qualified Data.ByteString as B
10import qualified AST.Source as Src
10import qualified AST.Source as Src
11import qualified AST.Valid as Valid
11import qualified AST.Valid as Valid
12+import qualified Elm.Package as Pkg
12import qualified Parse.Declaration as Decl
13import qualified Parse.Declaration as Decl
13import qualified Parse.Module as Module
14import qualified Parse.Module as Module
14import qualified Parse.Primitives as P
15import qualified Parse.Primitives as P
@@ -21,9 +22,13 @@ import qualified Validate
24−program :: B.ByteString -> Result.Result i w Error.Error Valid.Module
25+program :: Pkg.Name -> B.ByteString -> Result.Result i w Error.Error Valid.Module
25−program src =
26+program pkg src =
29+ if Pkg.isKernel pkg then fancyParser else normalParser
26− case P.run chompProgram src of
31+ case P.run parser src of
27 Right modul ->
32 Right modul ->
28 Validate.validate modul
33 Validate.validate modul
@@ -31,13 +36,27 @@ program src =
31 Result.throw syntaxError
36 Result.throw syntaxError
34−chompProgram :: P.Parser (Src.Module [Src.Decl])
42+normalParser :: P.Parser (Src.Module [Src.Decl])
35−chompProgram =
43+normalParser =
36 do srcModule <- Module.module_ (chompDeclarations [])
44 do srcModule <- Module.module_ (chompDeclarations [])
37 P.endOfFile
45 P.endOfFile
38 return srcModule
46 return srcModule
49+fancyParser :: P.Parser (Src.Module [Src.Decl])
51+ do srcModule <- Module.module_ (chompDeclarations =<< chompInfixes [])
41chompDeclarations :: [Src.Decl] -> P.Parser [Src.Decl]
60chompDeclarations :: [Src.Decl] -> P.Parser [Src.Decl]
42chompDeclarations decls =
61chompDeclarations decls =
43 do (decl, _, pos) <- Decl.declaration
62 do (decl, _, pos) <- Decl.declaration
@@ -46,3 +65,12 @@ chompDeclarations decls =
46 chompDeclarations (decl:decls)
65 chompDeclarations (decl:decls)
47 , return (reverse (decl:decls))
66 , return (reverse (decl:decls))
70+chompInfixes :: [Src.Decl] -> P.Parser [Src.Decl]
72+ do decl <- Decl.infix_
74+ [ chompInfixes (decl:decls)
75+ , return (decl:decls)