else setDictBind v' (EvCast v (mkSymCoercion dict_co))
; return v' }
- -- Add the superclasses of this one here, See Note [Adding superclasses]
- ; sc_cts <- newSCWorkFromFlavored v_new fl cn xis
+ -- Add the superclasses of this one here, See Note [Adding superclasses].
+ -- But only if we are not simplifying the LHS of a rule.
+ ; sctx <- getTcSContext
+ ; sc_cts <- if simplEqsOnly sctx then return emptyCCan
+ else newSCWorkFromFlavored v_new fl cn xis
; return (sc_cts `andCCan` ccs `extendCCans` CDictCan { cc_id = v_new
, cc_flavor = fl
newSCWorkFromFlavored :: EvVar -> CtFlavor -> Class -> [Xi] -> TcS CanonicalCts
-- Returns superclasses, see Note [Adding superclasses]
newSCWorkFromFlavored ev orig_flavor cls xis
- = do { let (tyvars, sc_theta, _, _) = classBigSig cls
+ | isEmptyVarSet (tyVarsOfTypes xis)
+ = return emptyCCan
+ | otherwise
+ = do { let (tyvars, sc_theta, _, _) = classBigSig cls
sc_theta1 = substTheta (zipTopTvSubst tyvars xis) sc_theta
; sc_vars <- zipWithM inst_one sc_theta1 [0..]
; mkCanonicals flavor sc_vars }