summaryrefslogtreecommitdiff
path: root/compiler/typecheck/FunDeps.hs
diff options
context:
space:
mode:
authorAustin Seipp <austin@well-typed.com>2015-05-14 10:55:03 -0500
committerAustin Seipp <austin@well-typed.com>2015-05-14 10:55:03 -0500
commit3cf8ecdc70cb295a2b9606080a1c7b5fa8eb16f4 (patch)
treee7989a081754885163e9dc20a6545820ebeab532 /compiler/typecheck/FunDeps.hs
parent04a484eafc9eb9f8774b4bdd41a5dc6c9f640daf (diff)
downloadhaskell-3cf8ecdc70cb295a2b9606080a1c7b5fa8eb16f4.tar.gz
Revert multiple commits
This reverts multiple commits from Simon: - 04a484eafc9eb9f8774b4bdd41a5dc6c9f640daf Test Trac #10359 - a9ccd37add8315e061c02e5bf26c08f05fad9ac9 Test Trac #10403 - c0aae6f699cbd222d826d0b8d78d6cb3f682079e Test Trac #10248 - eb6ca851f553262efe0824b8dcbe64952de4963d Make the "matchable-given" check happen first - ca173aa30467a0b1023682d573fcd94244d85c50 Add a case to checkValidTyCon - 51cbad15f86fca1d1b0e777199eb1079a1b64d74 Update haddock submodule - 6e1174da5b8e0b296f5bfc8b39904300d04eb5b7 Separate transCloVarSet from fixVarSet - a8493e03b89f3b3bfcdb6005795de050501f5c29 Fix imports in HscMain (stage2) - a154944bf07b2e13175519bafebd5a03926bf105 Two wibbles to fix the build - 5910a1bc8142b4e56a19abea104263d7bb5c5d3f Change in capitalisation of error msg - 130e93aab220bdf14d08028771f83df210da340b Refactor tuple constraints - 8da785d59f5989b9a9df06386d5bd13f65435bc0 Delete commented-out line These break the build by causing Haddock to fail mysteriously when trying to examine GHC.Prim it seems.
Diffstat (limited to 'compiler/typecheck/FunDeps.hs')
-rw-r--r--compiler/typecheck/FunDeps.hs32
1 files changed, 17 insertions, 15 deletions
diff --git a/compiler/typecheck/FunDeps.hs b/compiler/typecheck/FunDeps.hs
index 830873c1b9..53ecb48cc7 100644
--- a/compiler/typecheck/FunDeps.hs
+++ b/compiler/typecheck/FunDeps.hs
@@ -23,7 +23,6 @@ import Name
import Var
import Class
import Type
-import TcType( immSuperClasses )
import Unify
import InstEnv
import VarSet
@@ -446,29 +445,32 @@ oclose :: [PredType] -> TyVarSet -> TyVarSet
-- See Note [The liberal coverage condition]
oclose preds fixed_tvs
| null tv_fds = fixed_tvs -- Fast escape hatch for common case.
- | otherwise = fixVarSet extend fixed_tvs
+ | otherwise = loop fixed_tvs
where
- extend fixed_tvs = foldl add fixed_tvs tv_fds
- where
- add fixed_tvs (ls,rs)
- | ls `subVarSet` fixed_tvs = fixed_tvs `unionVarSet` rs
- | otherwise = fixed_tvs
+ loop fixed_tvs
+ | new_fixed_tvs `subVarSet` fixed_tvs = fixed_tvs
+ | otherwise = loop new_fixed_tvs
+ where new_fixed_tvs = foldl extend fixed_tvs tv_fds
+
+ extend fixed_tvs (ls,rs)
+ | ls `subVarSet` fixed_tvs = fixed_tvs `unionVarSet` rs
+ | otherwise = fixed_tvs
tv_fds :: [(TyVarSet,TyVarSet)]
tv_fds = [ (tyVarsOfTypes xs, tyVarsOfTypes ys)
- | (xs, ys) <- concatMap determined preds ]
+ | (xs, ys) <- concatMap determined preds
+ ]
determined :: PredType -> [([Type],[Type])]
determined pred
= case classifyPredType pred of
+ ClassPred cls tys ->
+ do let (cls_tvs, cls_fds) = classTvsFds cls
+ fd <- cls_fds
+ return (instFD fd cls_tvs tys)
EqPred NomEq t1 t2 -> [([t1],[t2]), ([t2],[t1])]
- ClassPred cls tys -> local_fds ++ concatMap determined superclasses
- where
- local_fds = [ instFD fd cls_tvs tys
- | fd <- cls_fds ]
- (cls_tvs, cls_fds) = classTvsFds cls
- superclasses = immSuperClasses cls tys
- _ -> []
+ TuplePred ts -> concatMap determined ts
+ _ -> []
{-
************************************************************************