shithub: MicroHs

Download patch

ref: 611036578b11bcfa467afc6b8cdca149aa70f93d
parent: f189ccb8ed1a9332fdd145f73ed6cd4339afc4ba
author: Lennart Augustsson <lennart@augustsson.net>
date: Thu Apr 25 11:35:04 EDT 2024

Add forgotten equality simplification.

--- a/src/MicroHs/TypeCheck.hs
+++ b/src/MicroHs/TypeCheck.hs
@@ -2615,8 +2615,11 @@
   return $ Just (ETuple (map (EVar . fst) goals), goals, [])
 
 solveTypeEq :: SolveOne
-solveTypeEq loc _iCls [t1, t2] = do
+-- If either type is a unification variable, just do the unification.
+solveTypeEq loc _iCls [t1, t2] | isEUVar t1 || isEUVar t2 = return $ Just (ETuple [], [], [(loc, t1, t2)])
+                               | otherwise = do
   eqs <- gets typeEqTable
+  traceM ("solveTypeEq eqs=" ++ show eqs)
   case solveEq eqs t1 t2 of
     Nothing -> return Nothing
     Just (de, tts) -> do
@@ -2626,6 +2629,10 @@
       ncs <- mapM mkEq tts
       return $ Just (de, ncs, [])
 solveTypeEq _ _ _ = impossible
+
+isEUVar :: EType -> Bool
+isEUVar (EUVar _) = True
+isEUVar _ = False
 
 solveKnownNat :: SolveOne
 solveKnownNat loc iCls [e@(ELit _ (LInteger _))] = mkConstDict loc iCls e
--