ref: ed69939b07b0ac075d3bf884c7a1c5ce94abbe35
parent: d36ac13b38f5cfe3b1508cf75dee143ad113e7c2
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sat Aug 17 10:03:21 EDT 2024
Implement ImportQualifiedPost
--- a/README.md
+++ b/README.md
@@ -55,6 +55,7 @@
* FunctionalDependencies
* GADTs
* GADTsyntax
+ * ImportQualifiedPost
* IncoherentInstances
* KindSignatures
* MonoLocalBinds
--- a/src/MicroHs/Parse.hs
+++ b/src/MicroHs/Parse.hs
@@ -415,10 +415,14 @@
pImportSpec :: P ImportSpec
pImportSpec =
let
- pQua = (True <$ pKeyword "qualified") <|< pure False
pSource = (ImpBoot <$ pPragma "SOURCE") <|< pure ImpNormal
- in ImportSpec <$> pSource <*> pQua <*> pUQIdentA <*> eoptional (pKeyword "as" *> pUQIdent) <*>
- eoptional ((,) <$> ((True <$ pKeyword "hiding") <|> pure False) <*> pParens (esepEndBy pImportItem (pSpec ',')))
+ pQual = True <$ pKeyword "qualified"
+ -- the 'qualified' can occur before or after the module name
+ pQId = ((,) <$> pQual <*> pUQIdentA)
+ <|< ((\ a b -> (b,a)) <$> pUQIdentA <*> (pQual <|> pure False))
+ imp a (b, c) = ImportSpec a b c
+ in imp <$> pSource <*> pQId <*> eoptional (pKeyword "as" *> pUQIdent) <*>
+ eoptional ((,) <$> ((True <$ pKeyword "hiding") <|< pure False) <*> pParens (esepEndBy pImportItem (pSpec ',')))
pImportItem :: P ImportItem
pImportItem =
--
⑨