@@ -3,6 +3,7 @@
3module Parse.Module
3module Parse.Module
4 ( fromByteString
4 ( fromByteString
5 , chompImports
5 , chompImports
@@ -332,28 +333,33 @@ spaces_em =
334chompImports :: [Src.Import] -> Parser E.Module [Src.Import]
335chompImports :: [Src.Import] -> Parser E.Module [Src.Import]
335−chompImports imports =
336+chompImports is =
336 oneOfWithFallback
337 oneOfWithFallback
337− [ do Keyword.import_ E.ImportStart
338+ [ do i <- chompImport
338− Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentName
339− name@(A.At (A.Region _ end) _) <- addLocation (Var.moduleName E.ImportName)
340− Space.chomp E.ModuleSpace
342− [ do Space.checkFreshLine E.ImportEnd
343− chompImports $
339+ chompImports (i:is)
344− Src.Import name Nothing (Src.Explicit []) : imports
345− , do Space.checkIndent end E.ImportEnd
347− [ chompAs name imports
348− , chompExposing name Nothing imports
352− (reverse imports)
341+ (reverse is)
344+chompImport :: Parser E.Module Src.Import
346+ do Keyword.import_ E.ImportStart
347+ Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentName
348+ name@(A.At (A.Region _ end) _) <- addLocation (Var.moduleName E.ImportName)
349+ Space.chomp E.ModuleSpace
351+ [ do Space.checkFreshLine E.ImportEnd
352+ return $ Src.Import name Nothing (Src.Explicit [])
353+ , do Space.checkIndent end E.ImportEnd
356+ , chompExposing name Nothing
355−chompAs :: A.Located Name.Name -> [Src.Import] -> Parser E.Module [Src.Import]
361+chompAs :: A.Located Name.Name -> Parser E.Module Src.Import
356−chompAs name imports =
362+chompAs name =
357 do Keyword.as_ E.ImportAs
363 do Keyword.as_ E.ImportAs
358 Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentAlias
364 Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentAlias
359 alias <- Var.upper E.ImportAlias
365 alias <- Var.upper E.ImportAlias
@@ -361,21 +367,19 @@ chompAs name imports =
361 Space.chomp E.ModuleSpace
367 Space.chomp E.ModuleSpace
362 oneOf E.ImportEnd
368 oneOf E.ImportEnd
363 [ do Space.checkFreshLine E.ImportEnd
369 [ do Space.checkFreshLine E.ImportEnd
365− Src.Import name (Just alias) (Src.Explicit []) : imports
370+ return $ Src.Import name (Just alias) (Src.Explicit [])
366 , do Space.checkIndent end E.ImportEnd
371 , do Space.checkIndent end E.ImportEnd
367− chompExposing name (Just alias) imports
372+ chompExposing name (Just alias)
371−chompExposing :: A.Located Name.Name -> Maybe Name.Name -> [Src.Import] -> Parser E.Module [Src.Import]
376+chompExposing :: A.Located Name.Name -> Maybe Name.Name -> Parser E.Module Src.Import
372−chompExposing name maybeAlias imports =
377+chompExposing name maybeAlias =
373 do Keyword.exposing_ E.ImportExposing
378 do Keyword.exposing_ E.ImportExposing
374 Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentExposingList
379 Space.chompAndCheckIndent E.ModuleSpace E.ImportIndentExposingList
375 exposed <- specialize E.ImportExposingList exposing
380 exposed <- specialize E.ImportExposingList exposing
376 freshLine E.ImportEnd
381 freshLine E.ImportEnd
378− Src.Import name maybeAlias exposed : imports
382+ return $ Src.Import name maybeAlias exposed