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