ref: 430747e40a841407a4a32adebc8d29524caa0827
parent: 9450806259eb31116552c4b1b173ee68071d0b6d
author: Lennart Augustsson <lennart@augustsson.net>
date: Sat Dec 21 10:19:16 EST 2024
A hack to allow 'a ~ b =>' in existential/GADT contexts. Fixes issue #75
--- a/src/MicroHs/Parse.hs
+++ b/src/MicroHs/Parse.hs
@@ -405,7 +405,10 @@
pContext :: P [EConstraint]
pContext = (pCtx <* pDRArrow) <|< pure []
where
- pCtx = ((:[]) <$> pTypeApp)
+ pCtx = ((:[]) <$> pTypeApp)
+ <|> (eq <$> pTypeArg <*> pTilde <*> pTypeArg) -- A hack to allow a~b => ...
+ eq t1 i t2 = [eApp2 (EVar i) t1 t2]
+ pTilde = do i <- pQSymOper; guard (i == mkIdent "~"); return i
pDRArrow :: P ()
pDRArrow = pSymbol "=>" <|< pSymbol "\x21d2"