ref: 38ee67a83d406d07e9a1aa0ff31e1800030380df
parent: 018765cd263ebc28a5ca3c6f4c3f1fafbab54241
author: Lennart Augustsson <lennart@augustsson.net>
date: Wed Nov 8 10:03:35 EST 2023
Parse infix constructor in data
--- a/src/MicroHs/Parse.hs
+++ b/src/MicroHs/Parse.hs
@@ -251,7 +251,7 @@
pDef :: P EDef
pDef =
- Data <$> (pKeyword "data" *> pLHS) <*> ((pSymbol "=" *> esepBy1 (Constr <$> pUIdentSym <*> pFields) (pSymbol "|"))
+ Data <$> (pKeyword "data" *> pLHS) <*> ((pSymbol "=" *> esepBy1 pConstr (pSymbol "|"))
<|< pure [])
<|< Newtype <$> (pKeyword "newtype" *> pLHS) <*> (pSymbol "=" *> (Constr <$> pUIdentSym <*> pField))
<|< Type <$> (pKeyword "type" *> pLHS) <*> (pSymbol "=" *> pType)
@@ -278,6 +278,9 @@
pure fs
pFunDeps = (pSpec '|' *> esome pFunDep) <|< pure []
pFunDep = (,) <$> esome pLIdent <*> (pSymbol "->" *> esome pLIdent)
+ pConstr :: P Constr
+ pConstr = (Constr <$> pUIdentSym <*> pFields)
+ <|< ((\ t1 c t2 -> Constr c (Left [t1, t2])) <$> pAType <*> pUSymOper <*> pAType)
pLHS :: P LHS
pLHS = (,) <$> pTypeIdentSym <*> emany pIdKind
--
⑨