shithub: MicroHs

Download patch

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 =
--