shithub: MicroHs

Download patch

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"