diff options
| author | simonpj@microsoft.com <unknown> | 2010-12-02 12:31:10 +0000 |
|---|---|---|
| committer | simonpj@microsoft.com <unknown> | 2010-12-02 12:31:10 +0000 |
| commit | fbb99e831a0c0510e79b2f0c91bbdffd142ea951 (patch) | |
| tree | 44a6474f913c16a49b5c069abe4143b3e0bcfc23 /compiler | |
| parent | 0c1a685f5727c8516ec3f06806bc3b0ae0be2370 (diff) | |
| download | haskell-fbb99e831a0c0510e79b2f0c91bbdffd142ea951.tar.gz | |
A little refactoring (remove redundant argument passed to isGoodRecEv)
Diffstat (limited to 'compiler')
| -rw-r--r-- | compiler/typecheck/TcInteract.lhs | 6 | ||||
| -rw-r--r-- | compiler/typecheck/TcSMonad.lhs | 15 |
2 files changed, 6 insertions, 15 deletions
diff --git a/compiler/typecheck/TcInteract.lhs b/compiler/typecheck/TcInteract.lhs index c04fd0f935..b49ec65616 100644 --- a/compiler/typecheck/TcInteract.lhs +++ b/compiler/typecheck/TcInteract.lhs @@ -840,9 +840,9 @@ interactWithInert fdimprs inert workitem -- We don't have to do this for givens, as we fully know the evidence for them. ; rec_ev_ok <- case (cc_flavor inert, cc_flavor workitem) of - (Wanted loc, Derived {}) -> isGoodRecEv work_ev (WantedEvVar inert_ev loc) - (Derived {}, Wanted loc) -> isGoodRecEv inert_ev (WantedEvVar work_ev loc) - _ -> return True + (Wanted {}, Derived {}) -> isGoodRecEv work_ev inert_ev + (Derived {}, Wanted {}) -> isGoodRecEv inert_ev work_ev + _ -> return True ; if is_allowed && rec_ev_ok then doInteractWithInert fdimprs inert workitem diff --git a/compiler/typecheck/TcSMonad.lhs b/compiler/typecheck/TcSMonad.lhs index d688af9513..a45f9a594d 100644 --- a/compiler/typecheck/TcSMonad.lhs +++ b/compiler/typecheck/TcSMonad.lhs @@ -861,7 +861,7 @@ newDictVar cl tys = wrapTcS $ TcM.newDict cl tys \begin{code} -isGoodRecEv :: EvVar -> WantedEvVar -> TcS Bool +isGoodRecEv :: EvVar -> EvVar -> TcS Bool -- In a call (isGoodRecEv ev wv), we are considering solving wv -- using some term that involves ev, such as: -- by setting wv = ev @@ -876,7 +876,7 @@ isGoodRecEv :: EvVar -> WantedEvVar -> TcS Bool -- call (constructor) and -1 for every superclass selection (destructor). -- -- See Note [Superclasses and recursive dictionaries] in TcInteract -isGoodRecEv ev_var (WantedEvVar wv _) +isGoodRecEv ev_var wv = do { tc_evbinds <- getTcEvBindsBag ; mb <- chase_ev_var tc_evbinds wv 0 [] ev_var ; return $ case mb of @@ -896,16 +896,7 @@ isGoodRecEv ev_var (WantedEvVar wv _) | Just (EvBind _ ev_trm) <- lookupEvBind assocs orig = chase_ev assocs trg curr_grav (orig:visited) ev_trm -{- No longer needed: evidence is in the EvBinds - | isTcTyVar orig && isMetaTyVar orig - = do { meta_details <- wrapTcS $ TcM.readWantedCoVar orig - ; case meta_details of - Flexi -> return Nothing - Indirect tyco -> chase_ev assocs trg curr_grav - (orig:visited) (EvCoercion tyco) - } --} - | otherwise = return Nothing + | otherwise = return Nothing chase_ev assocs trg curr_grav visited (EvId v) = chase_ev_var assocs trg curr_grav visited v |
