summaryrefslogtreecommitdiff
path: root/compiler/deSugar/DsBinds.hs
diff options
context:
space:
mode:
Diffstat (limited to 'compiler/deSugar/DsBinds.hs')
-rw-r--r--compiler/deSugar/DsBinds.hs16
1 files changed, 10 insertions, 6 deletions
diff --git a/compiler/deSugar/DsBinds.hs b/compiler/deSugar/DsBinds.hs
index 4a6a463b2d..cea7f3215b 100644
--- a/compiler/deSugar/DsBinds.hs
+++ b/compiler/deSugar/DsBinds.hs
@@ -29,7 +29,7 @@ import {-# SOURCE #-} Match( matchWrapper )
import DsMonad
import DsGRHSs
import DsUtils
-import Check ( checkGuardMatches )
+import Check ( needToRunPmCheck, addTyCsDs, checkGuardMatches )
import HsSyn -- lots of things
import CoreSyn -- lots of things
@@ -186,11 +186,15 @@ dsHsBind dflags (AbsBinds { abs_tvs = tyvars, abs_ev_vars = dicts
, abs_exports = exports
, abs_ev_binds = ev_binds
, abs_binds = binds, abs_sig = has_sig })
- = do { ds_binds <- addDictsDs (listToBag dicts) $
- dsLHsBinds binds
- -- addDictsDs: push type constraints deeper
- -- for inner pattern match check
- -- See Check, Note [Type and Term Equality Propagation]
+ = do { ds_binds <- applyWhen (needToRunPmCheck dflags FromSource)
+ -- FromSource might not be accurate, but at worst
+ -- we do superfluous calls to the pattern match
+ -- oracle.
+ -- addTyCsDs: push type constraints deeper
+ -- for inner pattern match check
+ -- See Check, Note [Type and Term Equality Propagation]
+ (addTyCsDs (listToBag dicts))
+ (dsLHsBinds binds)
; ds_ev_binds <- dsTcEvBinds_s ev_binds