shithub: MicroHs

Download patch

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