summaryrefslogtreecommitdiff
path: root/compiler
diff options
context:
space:
mode:
authorsimonpj@microsoft.com <unknown>2010-12-02 12:31:10 +0000
committersimonpj@microsoft.com <unknown>2010-12-02 12:31:10 +0000
commitfbb99e831a0c0510e79b2f0c91bbdffd142ea951 (patch)
tree44a6474f913c16a49b5c069abe4143b3e0bcfc23 /compiler
parent0c1a685f5727c8516ec3f06806bc3b0ae0be2370 (diff)
downloadhaskell-fbb99e831a0c0510e79b2f0c91bbdffd142ea951.tar.gz
A little refactoring (remove redundant argument passed to isGoodRecEv)
Diffstat (limited to 'compiler')
-rw-r--r--compiler/typecheck/TcInteract.lhs6
-rw-r--r--compiler/typecheck/TcSMonad.lhs15
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