ref: b9fe0f800888e890a4e2fc300f9957a80d3f66f7
parent: 405cddb412eae4af7cefb1091612290f875d5dc4
author: Lennart Augustsson <lennart.augustsson@epicgames.com>
date: Sat Feb 10 09:48:00 EST 2024
Allow (but ignore) explicit import/export list on types/classes.
--- a/src/MicroHs/Parse.hs
+++ b/src/MicroHs/Parse.hs
@@ -56,6 +56,7 @@
(pSpec '(' *> esepEndBy pExportItem (pSpec ',') <* pSpec ')') <*>(pKeyword "where" *> pBlock pDef)
+-- Possibly qualified alphanumeric identifier
pQIdent :: P Ident
pQIdent = do
fn <- getFileName
@@ -64,6 +65,7 @@
is _ = Nothing
satisfyM "QIdent" is
+-- Upper case, unqualified, alphanumeric identifier
pUIdentA :: P Ident
pUIdentA = do
fn <- getFileName
@@ -72,14 +74,17 @@
is _ = Nothing
satisfyM "UIdent" is
+-- Upper case, unqualified, identifier
pUIdent :: P Ident
pUIdent =
pUIdentA
<|< pUIdentSpecial
+-- Upper case, unqualified, identifier or symbol
pUIdentSym :: P Ident
pUIdentSym = pUIdent <|< pParens pUSymOper
+-- Special "identifiers": () [] (,) ...
pUIdentSpecial :: P Ident
pUIdentSpecial = do
fn <- getFileName
@@ -91,6 +96,7 @@
<|< (mk "()" <$ (pSpec '(' *> pSpec ')')) -- Allow () as a constructor name<|< (mk "[]" <$ (pSpec '[' *> pSpec ']')) -- Allow [] as a constructor name
+-- Upper case, possibly qualified, alphanumeric identifier
pUQIdentA :: P Ident
pUQIdentA = do
fn <- getFileName
@@ -99,11 +105,13 @@
is _ = Nothing
satisfyM "UQIdent" is
+-- Upper case, possibly qualified, identifier
pUQIdent :: P Ident
pUQIdent =
pUQIdentA
<|< pUIdentSpecial
+-- Lower case, unqualified identifier
pLIdent :: P Ident
pLIdent = do
fn <- getFileName
@@ -112,6 +120,7 @@
is _ = Nothing
satisfyM "LIdent" is
+-- Lower case, possibly qualified identifier
pLQIdent :: P Ident
pLQIdent = do
fn <- getFileName
@@ -249,7 +258,7 @@
pExportItem :: P ExportItem
pExportItem =
ExpModule <$> (pKeyword "module" *> pUQIdent)
- <|< ExpTypeCon <$> (pUQIdentSym <* pSpec '(' <* pSymbol ".." <* pSpec ')')+ <|< ExpTypeCon <$> (pUQIdentSym <* pSpec '(' <* pConList <* pSpec ')')<|< ExpType <$> pUQIdentSym
<|< ExpValue <$> pLQIdentSym
@@ -280,7 +289,7 @@
TSpec _ '>' -> pSpec '>'
_ -> mapTokenState popLayout
pure as
- where body = esepBy p (pSpec ';') <* eoptional (pSpec ';')
+ where body = esepBy p (esome (pSpec ';')) <* eoptional (pSpec ';')
pDef :: P EDef
@@ -361,9 +370,12 @@
pImportItem :: P ImportItem
pImportItem =
- ImpTypeCon <$> (pUQIdentSym <* pSpec '(' <* pSymbol ".." <* pSpec ')')+ ImpTypeCon <$> (pUQIdentSym <* pSpec '(' <* pConList <* pSpec ')')<|< ImpType <$> pUQIdentSym
<|< ImpValue <$> pLQIdentSym
+
+pConList :: P ()
+pConList = pSymbol ".." <|< (() <$ esepBy1 pQIdent (pSpec ',')) -- XXX treat list as ..
--------
-- Types
--
⑨