index be8bbee..1785b8b 100644 (file)
@@ -199,7 +199,7 @@ canClass ev cls tys pend_sc
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
We need to add superclass constraints for two reasons:

-* For givens [G], they give us a route to to proof.  E.g.
+* For givens [G], they give us a route to proof.  E.g.
f :: Ord a => a -> Bool
f x = x == x
We get a Wanted (Eq a), which can only be solved from the superclass
@@ -331,7 +331,7 @@ Examples of how adding superclasses can help:
Follow the superclass rules to add
[G] F a ~ b
[D] F a ~ beta
-    Now we we get [D] beta ~ b, and can solve that.
+    Now we get [D] beta ~ b, and can solve that.

-- Example (tcfail138)
class L a b | a -> b
@@ -829,7 +829,8 @@ zonk_eq_types = go
-> do { cts <- readTcRef ref
; case cts of
Flexi        -> give_up
-                      Indirect ty' -> unSwap swapped go ty' ty }
+                      Indirect ty' -> do { trace_indirect tv ty'
+                                         ; unSwap swapped go ty' ty } }
_ -> give_up
where
give_up = return \$ Left \$ unSwap swapped Pair (mkTyVarTy tv) ty
@@ -842,12 +843,17 @@ zonk_eq_types = go
then go ty1' ty2'
else return \$ Left (Pair (TyVarTy tv1) (TyVarTy tv2)) }

+    trace_indirect tv ty
+       = traceTcS "Following filled tyvar (zonk_eq_types)"
+                  (ppr tv <+> equals <+> ppr ty)
+
quick_zonk tv = case tcTyVarDetails tv of
MetaTv { mtv_ref = ref }
-> do { cts <- readTcRef ref
; case cts of
Flexi        -> return (TyVarTy tv, False)
-                  Indirect ty' -> return (ty', True) }
+                  Indirect ty' -> do { trace_indirect tv ty'
+                                     ; return (ty', True) } }
_ -> return (TyVarTy tv, False)

-- This happens for type families, too. But recall that failure
@@ -1617,7 +1623,7 @@ canEqTyVarTyVar, are these

Note [Avoid unnecessary swaps]
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
-If we swap without actually improving matters, we can get an infnite loop.
+If we swap without actually improving matters, we can get an infinite loop.
Consider
work item:  a ~ b
inert item:  b ~ c