2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 \section[TcSimplify]{TcSimplify}
10 tcSimplifyInfer, tcSimplifyInferCheck,
11 tcSimplifyCheck, tcSimplifyRestricted,
12 tcSimplifyToDicts, tcSimplifyIPs,
13 tcSimplifySuperClasses,
14 tcSimplifyTop, tcSimplifyInteractive,
17 tcSimplifyDeriv, tcSimplifyDefault,
21 #include "HsVersions.h"
23 import {-# SOURCE #-} TcUnify( unifyType )
24 import TypeRep ( Type(..) )
25 import HsSyn ( HsBind(..), HsExpr(..), LHsExpr, emptyLHsBinds )
26 import TcHsSyn ( mkHsApp, mkHsTyApp, mkHsDictApp )
29 import Inst ( lookupInst, LookupInstResult(..),
30 tyVarsOfInst, fdPredsOfInsts, newDicts,
31 isDict, isClassDict, isLinearInst, linearInstType,
32 isMethodFor, isMethod,
33 instToId, tyVarsOfInsts, cloneDict,
34 ipNamesOfInsts, ipNamesOfInst, dictPred,
36 newDictsAtLoc, tcInstClassOp,
37 getDictClassTys, isTyVarDict, instLoc,
38 zonkInst, tidyInsts, tidyMoreInsts,
39 pprInsts, pprDictsInFull, pprInstInFull, tcGetInstEnvs,
40 isInheritableInst, pprDictsTheta
42 import TcEnv ( tcGetGlobalTyVars, tcLookupId, findGlobals, pprBinders,
43 lclEnvElts, tcMetaTy )
44 import InstEnv ( lookupInstEnv, classInstances, pprInstances )
45 import TcMType ( zonkTcTyVarsAndFV, tcInstTyVars,
46 checkAmbiguity, checkInstTermination )
47 import TcType ( TcTyVar, TcTyVarSet, ThetaType, TcPredType,
48 mkClassPred, isOverloadedTy, mkTyConApp, isSkolemTyVar,
49 mkTyVarTy, tcGetTyVar, isTyVarClassPred, mkTyVarTys,
50 tyVarsOfPred, tcEqType, pprPred, mkPredTy, tcIsTyVarTy )
51 import TcIface ( checkWiredInTyCon )
52 import Id ( idType, mkUserLocal )
54 import TyCon ( TyCon )
55 import Name ( Name, getOccName, getSrcLoc )
56 import NameSet ( NameSet, mkNameSet, elemNameSet )
57 import Class ( classBigSig, classKey )
58 import FunDeps ( oclose, grow, improve, pprEquationDoc )
59 import PrelInfo ( isNumericClass, isStandardClass )
60 import PrelNames ( splitName, fstName, sndName, integerTyConName,
61 showClassKey, eqClassKey, ordClassKey )
62 import Type ( zipTopTvSubst, substTheta, substTy )
63 import TysWiredIn ( pairTyCon, doubleTy, doubleTyCon )
64 import ErrUtils ( Message )
65 import BasicTypes ( TopLevelFlag, isNotTopLevel )
67 import VarEnv ( TidyEnv )
71 import ListSetOps ( equivClasses )
72 import Util ( zipEqual, isSingleton )
73 import List ( partition )
74 import SrcLoc ( Located(..) )
75 import DynFlags ( DynFlag(..) )
80 %************************************************************************
84 %************************************************************************
86 --------------------------------------
87 Notes on functional dependencies (a bug)
88 --------------------------------------
90 | > class Foo a b | a->b
92 | > class Bar a b | a->b
96 | > instance Bar Obj Obj
98 | > instance (Bar a b) => Foo a b
100 | > foo:: (Foo a b) => a -> String
103 | > runFoo:: (forall a b. (Foo a b) => a -> w) -> w
109 | Could not deduce (Bar a b) from the context (Foo a b)
110 | arising from use of `foo' at <interactive>:1
112 | Add (Bar a b) to the expected type of an expression
113 | In the first argument of `runFoo', namely `foo'
114 | In the definition of `it': it = runFoo foo
116 | Why all of the sudden does GHC need the constraint Bar a b? The
117 | function foo didn't ask for that...
119 The trouble is that to type (runFoo foo), GHC has to solve the problem:
121 Given constraint Foo a b
122 Solve constraint Foo a b'
124 Notice that b and b' aren't the same. To solve this, just do
125 improvement and then they are the same. But GHC currently does
130 That is usually fine, but it isn't here, because it sees that Foo a b is
131 not the same as Foo a b', and so instead applies the instance decl for
132 instance Bar a b => Foo a b. And that's where the Bar constraint comes
135 The Right Thing is to improve whenever the constraint set changes at
136 all. Not hard in principle, but it'll take a bit of fiddling to do.
140 --------------------------------------
141 Notes on quantification
142 --------------------------------------
144 Suppose we are about to do a generalisation step.
148 T the type of the RHS
149 C the constraints from that RHS
151 The game is to figure out
153 Q the set of type variables over which to quantify
154 Ct the constraints we will *not* quantify over
155 Cq the constraints we will quantify over
157 So we're going to infer the type
161 and float the constraints Ct further outwards.
163 Here are the things that *must* be true:
165 (A) Q intersect fv(G) = EMPTY limits how big Q can be
166 (B) Q superset fv(Cq union T) \ oclose(fv(G),C) limits how small Q can be
168 (A) says we can't quantify over a variable that's free in the
169 environment. (B) says we must quantify over all the truly free
170 variables in T, else we won't get a sufficiently general type. We do
171 not *need* to quantify over any variable that is fixed by the free
172 vars of the environment G.
174 BETWEEN THESE TWO BOUNDS, ANY Q WILL DO!
176 Example: class H x y | x->y where ...
178 fv(G) = {a} C = {H a b, H c d}
181 (A) Q intersect {a} is empty
182 (B) Q superset {a,b,c,d} \ oclose({a}, C) = {a,b,c,d} \ {a,b} = {c,d}
184 So Q can be {c,d}, {b,c,d}
186 Other things being equal, however, we'd like to quantify over as few
187 variables as possible: smaller types, fewer type applications, more
188 constraints can get into Ct instead of Cq.
191 -----------------------------------------
194 fv(T) the free type vars of T
196 oclose(vs,C) The result of extending the set of tyvars vs
197 using the functional dependencies from C
199 grow(vs,C) The result of extend the set of tyvars vs
200 using all conceivable links from C.
202 E.g. vs = {a}, C = {H [a] b, K (b,Int) c, Eq e}
203 Then grow(vs,C) = {a,b,c}
205 Note that grow(vs,C) `superset` grow(vs,simplify(C))
206 That is, simplfication can only shrink the result of grow.
209 oclose is conservative one way: v `elem` oclose(vs,C) => v is definitely fixed by vs
210 grow is conservative the other way: if v might be fixed by vs => v `elem` grow(vs,C)
213 -----------------------------------------
217 Here's a good way to choose Q:
219 Q = grow( fv(T), C ) \ oclose( fv(G), C )
221 That is, quantify over all variable that that MIGHT be fixed by the
222 call site (which influences T), but which aren't DEFINITELY fixed by
223 G. This choice definitely quantifies over enough type variables,
224 albeit perhaps too many.
226 Why grow( fv(T), C ) rather than fv(T)? Consider
228 class H x y | x->y where ...
233 If we used fv(T) = {c} we'd get the type
235 forall c. H c d => c -> b
237 And then if the fn was called at several different c's, each of
238 which fixed d differently, we'd get a unification error, because
239 d isn't quantified. Solution: quantify d. So we must quantify
240 everything that might be influenced by c.
242 Why not oclose( fv(T), C )? Because we might not be able to see
243 all the functional dependencies yet:
245 class H x y | x->y where ...
246 instance H x y => Eq (T x y) where ...
251 Now oclose(fv(T),C) = {c}, because the functional dependency isn't
252 apparent yet, and that's wrong. We must really quantify over d too.
255 There really isn't any point in quantifying over any more than
256 grow( fv(T), C ), because the call sites can't possibly influence
257 any other type variables.
261 --------------------------------------
263 --------------------------------------
265 It's very hard to be certain when a type is ambiguous. Consider
269 instance H x y => K (x,y)
271 Is this type ambiguous?
272 forall a b. (K (a,b), Eq b) => a -> a
274 Looks like it! But if we simplify (K (a,b)) we get (H a b) and
275 now we see that a fixes b. So we can't tell about ambiguity for sure
276 without doing a full simplification. And even that isn't possible if
277 the context has some free vars that may get unified. Urgle!
279 Here's another example: is this ambiguous?
280 forall a b. Eq (T b) => a -> a
281 Not if there's an insance decl (with no context)
282 instance Eq (T b) where ...
284 You may say of this example that we should use the instance decl right
285 away, but you can't always do that:
287 class J a b where ...
288 instance J Int b where ...
290 f :: forall a b. J a b => a -> a
292 (Notice: no functional dependency in J's class decl.)
293 Here f's type is perfectly fine, provided f is only called at Int.
294 It's premature to complain when meeting f's signature, or even
295 when inferring a type for f.
299 However, we don't *need* to report ambiguity right away. It'll always
300 show up at the call site.... and eventually at main, which needs special
301 treatment. Nevertheless, reporting ambiguity promptly is an excellent thing.
303 So here's the plan. We WARN about probable ambiguity if
305 fv(Cq) is not a subset of oclose(fv(T) union fv(G), C)
307 (all tested before quantification).
308 That is, all the type variables in Cq must be fixed by the the variables
309 in the environment, or by the variables in the type.
311 Notice that we union before calling oclose. Here's an example:
313 class J a b c | a b -> c
317 forall b c. (J a b c) => b -> b
319 Only if we union {a} from G with {b} from T before using oclose,
320 do we see that c is fixed.
322 It's a bit vague exactly which C we should use for this oclose call. If we
323 don't fix enough variables we might complain when we shouldn't (see
324 the above nasty example). Nothing will be perfect. That's why we can
325 only issue a warning.
328 Can we ever be *certain* about ambiguity? Yes: if there's a constraint
330 c in C such that fv(c) intersect (fv(G) union fv(T)) = EMPTY
332 then c is a "bubble"; there's no way it can ever improve, and it's
333 certainly ambiguous. UNLESS it is a constant (sigh). And what about
338 instance H x y => K (x,y)
340 Is this type ambiguous?
341 forall a b. (K (a,b), Eq b) => a -> a
343 Urk. The (Eq b) looks "definitely ambiguous" but it isn't. What we are after
344 is a "bubble" that's a set of constraints
346 Cq = Ca union Cq' st fv(Ca) intersect (fv(Cq') union fv(T) union fv(G)) = EMPTY
348 Hence another idea. To decide Q start with fv(T) and grow it
349 by transitive closure in Cq (no functional dependencies involved).
350 Now partition Cq using Q, leaving the definitely-ambiguous and probably-ok.
351 The definitely-ambiguous can then float out, and get smashed at top level
352 (which squashes out the constants, like Eq (T a) above)
355 --------------------------------------
356 Notes on principal types
357 --------------------------------------
362 f x = let g y = op (y::Int) in True
364 Here the principal type of f is (forall a. a->a)
365 but we'll produce the non-principal type
366 f :: forall a. C Int => a -> a
369 --------------------------------------
370 The need for forall's in constraints
371 --------------------------------------
373 [Exchange on Haskell Cafe 5/6 Dec 2000]
375 class C t where op :: t -> Bool
376 instance C [t] where op x = True
378 p y = (let f :: c -> Bool; f x = op (y >> return x) in f, y ++ [])
379 q y = (y ++ [], let f :: c -> Bool; f x = op (y >> return x) in f)
381 The definitions of p and q differ only in the order of the components in
382 the pair on their right-hand sides. And yet:
384 ghc and "Typing Haskell in Haskell" reject p, but accept q;
385 Hugs rejects q, but accepts p;
386 hbc rejects both p and q;
387 nhc98 ... (Malcolm, can you fill in the blank for us!).
389 The type signature for f forces context reduction to take place, and
390 the results of this depend on whether or not the type of y is known,
391 which in turn depends on which component of the pair the type checker
394 Solution: if y::m a, float out the constraints
395 Monad m, forall c. C (m c)
396 When m is later unified with [], we can solve both constraints.
399 --------------------------------------
400 Notes on implicit parameters
401 --------------------------------------
403 Question 1: can we "inherit" implicit parameters
404 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
409 where f is *not* a top-level binding.
410 From the RHS of f we'll get the constraint (?y::Int).
411 There are two types we might infer for f:
415 (so we get ?y from the context of f's definition), or
417 f :: (?y::Int) => Int -> Int
419 At first you might think the first was better, becuase then
420 ?y behaves like a free variable of the definition, rather than
421 having to be passed at each call site. But of course, the WHOLE
422 IDEA is that ?y should be passed at each call site (that's what
423 dynamic binding means) so we'd better infer the second.
425 BOTTOM LINE: when *inferring types* you *must* quantify
426 over implicit parameters. See the predicate isFreeWhenInferring.
429 Question 2: type signatures
430 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
431 BUT WATCH OUT: When you supply a type signature, we can't force you
432 to quantify over implicit parameters. For example:
436 This is perfectly reasonable. We do not want to insist on
438 (?x + 1) :: (?x::Int => Int)
440 That would be silly. Here, the definition site *is* the occurrence site,
441 so the above strictures don't apply. Hence the difference between
442 tcSimplifyCheck (which *does* allow implicit paramters to be inherited)
443 and tcSimplifyCheckBind (which does not).
445 What about when you supply a type signature for a binding?
446 Is it legal to give the following explicit, user type
447 signature to f, thus:
452 At first sight this seems reasonable, but it has the nasty property
453 that adding a type signature changes the dynamic semantics.
456 (let f x = (x::Int) + ?y
457 in (f 3, f 3 with ?y=5)) with ?y = 6
463 in (f 3, f 3 with ?y=5)) with ?y = 6
467 Indeed, simply inlining f (at the Haskell source level) would change the
470 Nevertheless, as Launchbury says (email Oct 01) we can't really give the
471 semantics for a Haskell program without knowing its typing, so if you
472 change the typing you may change the semantics.
474 To make things consistent in all cases where we are *checking* against
475 a supplied signature (as opposed to inferring a type), we adopt the
478 a signature does not need to quantify over implicit params.
480 [This represents a (rather marginal) change of policy since GHC 5.02,
481 which *required* an explicit signature to quantify over all implicit
482 params for the reasons mentioned above.]
484 But that raises a new question. Consider
486 Given (signature) ?x::Int
487 Wanted (inferred) ?x::Int, ?y::Bool
489 Clearly we want to discharge the ?x and float the ?y out. But
490 what is the criterion that distinguishes them? Clearly it isn't
491 what free type variables they have. The Right Thing seems to be
492 to float a constraint that
493 neither mentions any of the quantified type variables
494 nor any of the quantified implicit parameters
496 See the predicate isFreeWhenChecking.
499 Question 3: monomorphism
500 ~~~~~~~~~~~~~~~~~~~~~~~~
501 There's a nasty corner case when the monomorphism restriction bites:
505 The argument above suggests that we *must* generalise
506 over the ?y parameter, to get
507 z :: (?y::Int) => Int,
508 but the monomorphism restriction says that we *must not*, giving
510 Why does the momomorphism restriction say this? Because if you have
512 let z = x + ?y in z+z
514 you might not expect the addition to be done twice --- but it will if
515 we follow the argument of Question 2 and generalise over ?y.
518 Question 4: top level
519 ~~~~~~~~~~~~~~~~~~~~~
520 At the top level, monomorhism makes no sense at all.
523 main = let ?x = 5 in print foo
527 woggle :: (?x :: Int) => Int -> Int
530 We definitely don't want (foo :: Int) with a top-level implicit parameter
531 (?x::Int) becuase there is no way to bind it.
536 (A) Always generalise over implicit parameters
537 Bindings that fall under the monomorphism restriction can't
541 * Inlining remains valid
542 * No unexpected loss of sharing
543 * But simple bindings like
545 will be rejected, unless you add an explicit type signature
546 (to avoid the monomorphism restriction)
547 z :: (?y::Int) => Int
549 This seems unacceptable
551 (B) Monomorphism restriction "wins"
552 Bindings that fall under the monomorphism restriction can't
554 Always generalise over implicit parameters *except* for bindings
555 that fall under the monomorphism restriction
558 * Inlining isn't valid in general
559 * No unexpected loss of sharing
560 * Simple bindings like
562 accepted (get value of ?y from binding site)
564 (C) Always generalise over implicit parameters
565 Bindings that fall under the monomorphism restriction can't
566 be generalised, EXCEPT for implicit parameters
568 * Inlining remains valid
569 * Unexpected loss of sharing (from the extra generalisation)
570 * Simple bindings like
572 accepted (get value of ?y from occurrence sites)
577 None of these choices seems very satisfactory. But at least we should
578 decide which we want to do.
580 It's really not clear what is the Right Thing To Do. If you see
584 would you expect the value of ?y to be got from the *occurrence sites*
585 of 'z', or from the valuue of ?y at the *definition* of 'z'? In the
586 case of function definitions, the answer is clearly the former, but
587 less so in the case of non-fucntion definitions. On the other hand,
588 if we say that we get the value of ?y from the definition site of 'z',
589 then inlining 'z' might change the semantics of the program.
591 Choice (C) really says "the monomorphism restriction doesn't apply
592 to implicit parameters". Which is fine, but remember that every
593 innocent binding 'x = ...' that mentions an implicit parameter in
594 the RHS becomes a *function* of that parameter, called at each
595 use of 'x'. Now, the chances are that there are no intervening 'with'
596 clauses that bind ?y, so a decent compiler should common up all
597 those function calls. So I think I strongly favour (C). Indeed,
598 one could make a similar argument for abolishing the monomorphism
599 restriction altogether.
601 BOTTOM LINE: we choose (B) at present. See tcSimplifyRestricted
605 %************************************************************************
607 \subsection{tcSimplifyInfer}
609 %************************************************************************
611 tcSimplify is called when we *inferring* a type. Here's the overall game plan:
613 1. Compute Q = grow( fvs(T), C )
615 2. Partition C based on Q into Ct and Cq. Notice that ambiguous
616 predicates will end up in Ct; we deal with them at the top level
618 3. Try improvement, using functional dependencies
620 4. If Step 3 did any unification, repeat from step 1
621 (Unification can change the result of 'grow'.)
623 Note: we don't reduce dictionaries in step 2. For example, if we have
624 Eq (a,b), we don't simplify to (Eq a, Eq b). So Q won't be different
625 after step 2. However note that we may therefore quantify over more
626 type variables than we absolutely have to.
628 For the guts, we need a loop, that alternates context reduction and
629 improvement with unification. E.g. Suppose we have
631 class C x y | x->y where ...
633 and tcSimplify is called with:
635 Then improvement unifies a with b, giving
638 If we need to unify anything, we rattle round the whole thing all over
645 -> TcTyVarSet -- fv(T); type vars
647 -> TcM ([TcTyVar], -- Tyvars to quantify (zonked)
648 TcDictBinds, -- Bindings
649 [TcId]) -- Dict Ids that must be bound here (zonked)
650 -- Any free (escaping) Insts are tossed into the environment
655 tcSimplifyInfer doc tau_tvs wanted_lie
656 = inferLoop doc (varSetElems tau_tvs)
657 wanted_lie `thenM` \ (qtvs, frees, binds, irreds) ->
659 extendLIEs frees `thenM_`
660 returnM (qtvs, binds, map instToId irreds)
662 inferLoop doc tau_tvs wanteds
664 zonkTcTyVarsAndFV tau_tvs `thenM` \ tau_tvs' ->
665 mappM zonkInst wanteds `thenM` \ wanteds' ->
666 tcGetGlobalTyVars `thenM` \ gbl_tvs ->
668 preds = fdPredsOfInsts wanteds'
669 qtvs = grow preds tau_tvs' `minusVarSet` oclose preds gbl_tvs
672 | isFreeWhenInferring qtvs inst = Free
673 | isClassDict inst = DontReduceUnlessConstant -- Dicts
674 | otherwise = ReduceMe NoSCs -- Lits and Methods
676 traceTc (text "infloop" <+> vcat [ppr tau_tvs', ppr wanteds', ppr preds,
677 ppr (grow preds tau_tvs'), ppr qtvs]) `thenM_`
679 reduceContext doc try_me [] wanteds' `thenM` \ (no_improvement, frees, binds, irreds) ->
682 if no_improvement then
683 returnM (varSetElems qtvs, frees, binds, irreds)
685 -- If improvement did some unification, we go round again. There
686 -- are two subtleties:
687 -- a) We start again with irreds, not wanteds
688 -- Using an instance decl might have introduced a fresh type variable
689 -- which might have been unified, so we'd get an infinite loop
690 -- if we started again with wanteds! See example [LOOP]
692 -- b) It's also essential to re-process frees, because unification
693 -- might mean that a type variable that looked free isn't now.
695 -- Hence the (irreds ++ frees)
697 -- However, NOTICE that when we are done, we might have some bindings, but
698 -- the final qtvs might be empty. See [NO TYVARS] below.
700 inferLoop doc tau_tvs (irreds ++ frees) `thenM` \ (qtvs1, frees1, binds1, irreds1) ->
701 returnM (qtvs1, frees1, binds `unionBags` binds1, irreds1)
706 class If b t e r | b t e -> r
709 class Lte a b c | a b -> c where lte :: a -> b -> c
711 instance (Lte a b l,If l b a c) => Max a b c
713 Wanted: Max Z (S x) y
715 Then we'll reduce using the Max instance to:
716 (Lte Z (S x) l, If l (S x) Z y)
717 and improve by binding l->T, after which we can do some reduction
718 on both the Lte and If constraints. What we *can't* do is start again
719 with (Max Z (S x) y)!
723 class Y a b | a -> b where
726 instance Y [[a]] a where
729 k :: X a -> X a -> X a
731 g :: Num a => [X a] -> [X a]
734 h ys = ys ++ map (k (y [[0]])) xs
736 The excitement comes when simplifying the bindings for h. Initially
737 try to simplify {y @ [[t1]] t2, 0 @ t1}, with initial qtvs = {t2}.
738 From this we get t1:=:t2, but also various bindings. We can't forget
739 the bindings (because of [LOOP]), but in fact t1 is what g is
742 The net effect of [NO TYVARS]
745 isFreeWhenInferring :: TyVarSet -> Inst -> Bool
746 isFreeWhenInferring qtvs inst
747 = isFreeWrtTyVars qtvs inst -- Constrains no quantified vars
748 && isInheritableInst inst -- And no implicit parameter involved
749 -- (see "Notes on implicit parameters")
751 isFreeWhenChecking :: TyVarSet -- Quantified tyvars
752 -> NameSet -- Quantified implicit parameters
754 isFreeWhenChecking qtvs ips inst
755 = isFreeWrtTyVars qtvs inst
756 && isFreeWrtIPs ips inst
758 isFreeWrtTyVars qtvs inst = not (tyVarsOfInst inst `intersectsVarSet` qtvs)
759 isFreeWrtIPs ips inst = not (any (`elemNameSet` ips) (ipNamesOfInst inst))
763 %************************************************************************
765 \subsection{tcSimplifyCheck}
767 %************************************************************************
769 @tcSimplifyCheck@ is used when we know exactly the set of variables
770 we are going to quantify over. For example, a class or instance declaration.
775 -> [TcTyVar] -- Quantify over these
778 -> TcM TcDictBinds -- Bindings
780 -- tcSimplifyCheck is used when checking expression type signatures,
781 -- class decls, instance decls etc.
783 -- NB: tcSimplifyCheck does not consult the
784 -- global type variables in the environment; so you don't
785 -- need to worry about setting them before calling tcSimplifyCheck
786 tcSimplifyCheck doc qtvs givens wanted_lie
787 = ASSERT( all isSkolemTyVar qtvs )
788 do { (qtvs', frees, binds) <- tcSimplCheck doc get_qtvs AddSCs givens wanted_lie
792 -- get_qtvs = zonkTcTyVarsAndFV qtvs
793 get_qtvs = return (mkVarSet qtvs) -- All skolems
796 -- tcSimplifyInferCheck is used when we know the constraints we are to simplify
797 -- against, but we don't know the type variables over which we are going to quantify.
798 -- This happens when we have a type signature for a mutually recursive group
801 -> TcTyVarSet -- fv(T)
804 -> TcM ([TcTyVar], -- Variables over which to quantify
805 TcDictBinds) -- Bindings
807 tcSimplifyInferCheck doc tau_tvs givens wanted_lie
808 = do { (qtvs', frees, binds) <- tcSimplCheck doc get_qtvs AddSCs givens wanted_lie
810 ; return (qtvs', binds) }
812 -- Figure out which type variables to quantify over
813 -- You might think it should just be the signature tyvars,
814 -- but in bizarre cases you can get extra ones
815 -- f :: forall a. Num a => a -> a
816 -- f x = fst (g (x, head [])) + 1
818 -- Here we infer g :: forall a b. a -> b -> (b,a)
819 -- We don't want g to be monomorphic in b just because
820 -- f isn't quantified over b.
821 all_tvs = varSetElems (tau_tvs `unionVarSet` tyVarsOfInsts givens)
823 get_qtvs = zonkTcTyVarsAndFV all_tvs `thenM` \ all_tvs' ->
824 tcGetGlobalTyVars `thenM` \ gbl_tvs ->
826 qtvs = all_tvs' `minusVarSet` gbl_tvs
827 -- We could close gbl_tvs, but its not necessary for
828 -- soundness, and it'll only affect which tyvars, not which
829 -- dictionaries, we quantify over
834 Here is the workhorse function for all three wrappers.
837 tcSimplCheck doc get_qtvs want_scs givens wanted_lie
838 = do { (qtvs, frees, binds, irreds) <- check_loop givens wanted_lie
840 -- Complain about any irreducible ones
841 ; if not (null irreds)
842 then do { givens' <- mappM zonkInst given_dicts_and_ips
843 ; groupErrs (addNoInstanceErrs (Just doc) givens') irreds }
846 ; returnM (qtvs, frees, binds) }
848 given_dicts_and_ips = filter (not . isMethod) givens
849 -- For error reporting, filter out methods, which are
850 -- only added to the given set as an optimisation
852 ip_set = mkNameSet (ipNamesOfInsts givens)
854 check_loop givens wanteds
856 mappM zonkInst givens `thenM` \ givens' ->
857 mappM zonkInst wanteds `thenM` \ wanteds' ->
858 get_qtvs `thenM` \ qtvs' ->
862 -- When checking against a given signature we always reduce
863 -- until we find a match against something given, or can't reduce
864 try_me inst | isFreeWhenChecking qtvs' ip_set inst = Free
865 | otherwise = ReduceMe want_scs
867 reduceContext doc try_me givens' wanteds' `thenM` \ (no_improvement, frees, binds, irreds) ->
870 if no_improvement then
871 returnM (varSetElems qtvs', frees, binds, irreds)
873 check_loop givens' (irreds ++ frees) `thenM` \ (qtvs', frees1, binds1, irreds1) ->
874 returnM (qtvs', frees1, binds `unionBags` binds1, irreds1)
878 %************************************************************************
880 tcSimplifySuperClasses
882 %************************************************************************
884 Note [SUPERCLASS-LOOP 1]
885 ~~~~~~~~~~~~~~~~~~~~~~~~
886 We have to be very, very careful when generating superclasses, lest we
887 accidentally build a loop. Here's an example:
891 class S a => C a where { opc :: a -> a }
892 class S b => D b where { opd :: b -> b }
900 From (instance C Int) we get the constraint set {ds1:S Int, dd:D Int}
901 Simplifying, we may well get:
902 $dfCInt = :C ds1 (opd dd)
905 Notice that we spot that we can extract ds1 from dd.
907 Alas! Alack! We can do the same for (instance D Int):
909 $dfDInt = :D ds2 (opc dc)
913 And now we've defined the superclass in terms of itself.
915 Solution: never generate a superclass selectors at all when
916 satisfying the superclass context of an instance declaration.
918 Two more nasty cases are in
923 tcSimplifySuperClasses qtvs givens sc_wanteds
924 = ASSERT( all isSkolemTyVar qtvs )
925 do { (_, frees, binds1) <- tcSimplCheck doc get_qtvs NoSCs givens sc_wanteds
926 ; binds2 <- tc_simplify_top doc False NoSCs frees
927 ; return (binds1 `unionBags` binds2) }
929 get_qtvs = return (mkVarSet qtvs)
930 doc = ptext SLIT("instance declaration superclass context")
934 %************************************************************************
936 \subsection{tcSimplifyRestricted}
938 %************************************************************************
940 tcSimplifyRestricted infers which type variables to quantify for a
941 group of restricted bindings. This isn't trivial.
944 We want to quantify over a to get id :: forall a. a->a
947 We do not want to quantify over a, because there's an Eq a
948 constraint, so we get eq :: a->a->Bool (notice no forall)
951 RHS has type 'tau', whose free tyvars are tau_tvs
952 RHS has constraints 'wanteds'
955 Quantify over (tau_tvs \ ftvs(wanteds))
956 This is bad. The constraints may contain (Monad (ST s))
957 where we have instance Monad (ST s) where...
958 so there's no need to be monomorphic in s!
960 Also the constraint might be a method constraint,
961 whose type mentions a perfectly innocent tyvar:
962 op :: Num a => a -> b -> a
963 Here, b is unconstrained. A good example would be
965 We want to infer the polymorphic type
966 foo :: forall b. b -> b
969 Plan B (cunning, used for a long time up to and including GHC 6.2)
970 Step 1: Simplify the constraints as much as possible (to deal
971 with Plan A's problem). Then set
972 qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
974 Step 2: Now simplify again, treating the constraint as 'free' if
975 it does not mention qtvs, and trying to reduce it otherwise.
976 The reasons for this is to maximise sharing.
978 This fails for a very subtle reason. Suppose that in the Step 2
979 a constraint (Foo (Succ Zero) (Succ Zero) b) gets thrown upstairs as 'free'.
980 In the Step 1 this constraint might have been simplified, perhaps to
981 (Foo Zero Zero b), AND THEN THAT MIGHT BE IMPROVED, to bind 'b' to 'T'.
982 This won't happen in Step 2... but that in turn might prevent some other
983 constraint (Baz [a] b) being simplified (e.g. via instance Baz [a] T where {..})
984 and that in turn breaks the invariant that no constraints are quantified over.
986 Test typecheck/should_compile/tc177 (which failed in GHC 6.2) demonstrates
991 Step 1: Simplify the constraints as much as possible (to deal
992 with Plan A's problem). Then set
993 qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
994 Return the bindings from Step 1.
997 A note about Plan C (arising from "bug" reported by George Russel March 2004)
1000 instance (HasBinary ty IO) => HasCodedValue ty
1002 foo :: HasCodedValue a => String -> IO a
1004 doDecodeIO :: HasCodedValue a => () -> () -> IO a
1005 doDecodeIO codedValue view
1006 = let { act = foo "foo" } in act
1008 You might think this should work becuase the call to foo gives rise to a constraint
1009 (HasCodedValue t), which can be satisfied by the type sig for doDecodeIO. But the
1010 restricted binding act = ... calls tcSimplifyRestricted, and PlanC simplifies the
1011 constraint using the (rather bogus) instance declaration, and now we are stuffed.
1013 I claim this is not really a bug -- but it bit Sergey as well as George. So here's
1017 Plan D (a variant of plan B)
1018 Step 1: Simplify the constraints as much as possible (to deal
1019 with Plan A's problem), BUT DO NO IMPROVEMENT. Then set
1020 qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
1022 Step 2: Now simplify again, treating the constraint as 'free' if
1023 it does not mention qtvs, and trying to reduce it otherwise.
1025 The point here is that it's generally OK to have too few qtvs; that is,
1026 to make the thing more monomorphic than it could be. We don't want to
1027 do that in the common cases, but in wierd cases it's ok: the programmer
1028 can always add a signature.
1030 Too few qtvs => too many wanteds, which is what happens if you do less
1035 tcSimplifyRestricted -- Used for restricted binding groups
1036 -- i.e. ones subject to the monomorphism restriction
1039 -> [Name] -- Things bound in this group
1040 -> TcTyVarSet -- Free in the type of the RHSs
1041 -> [Inst] -- Free in the RHSs
1042 -> TcM ([TcTyVar], -- Tyvars to quantify (zonked)
1043 TcDictBinds) -- Bindings
1044 -- tcSimpifyRestricted returns no constraints to
1045 -- quantify over; by definition there are none.
1046 -- They are all thrown back in the LIE
1048 tcSimplifyRestricted doc top_lvl bndrs tau_tvs wanteds
1049 -- Zonk everything in sight
1050 = mappM zonkInst wanteds `thenM` \ wanteds' ->
1051 zonkTcTyVarsAndFV (varSetElems tau_tvs) `thenM` \ tau_tvs' ->
1052 tcGetGlobalTyVars `thenM` \ gbl_tvs' ->
1054 -- 'reduceMe': Reduce as far as we can. Don't stop at
1055 -- dicts; the idea is to get rid of as many type
1056 -- variables as possible, and we don't want to stop
1057 -- at (say) Monad (ST s), because that reduces
1058 -- immediately, with no constraint on s.
1060 -- BUT do no improvement! See Plan D above
1061 reduceContextWithoutImprovement
1062 doc reduceMe wanteds' `thenM` \ (_frees, _binds, constrained_dicts) ->
1064 -- Next, figure out the tyvars we will quantify over
1066 constrained_tvs = tyVarsOfInsts constrained_dicts
1067 qtvs = (tau_tvs' `minusVarSet` oclose (fdPredsOfInsts constrained_dicts) gbl_tvs')
1068 `minusVarSet` constrained_tvs
1070 traceTc (text "tcSimplifyRestricted" <+> vcat [
1071 pprInsts wanteds, pprInsts _frees, pprInsts constrained_dicts,
1073 ppr constrained_tvs, ppr tau_tvs', ppr qtvs ]) `thenM_`
1075 -- The first step may have squashed more methods than
1076 -- necessary, so try again, this time more gently, knowing the exact
1077 -- set of type variables to quantify over.
1079 -- We quantify only over constraints that are captured by qtvs;
1080 -- these will just be a subset of non-dicts. This in contrast
1081 -- to normal inference (using isFreeWhenInferring) in which we quantify over
1082 -- all *non-inheritable* constraints too. This implements choice
1083 -- (B) under "implicit parameter and monomorphism" above.
1085 -- Remember that we may need to do *some* simplification, to
1086 -- (for example) squash {Monad (ST s)} into {}. It's not enough
1087 -- just to float all constraints
1089 -- At top level, we *do* squash methods becuase we want to
1090 -- expose implicit parameters to the test that follows
1092 is_nested_group = isNotTopLevel top_lvl
1093 try_me inst | isFreeWrtTyVars qtvs inst,
1094 (is_nested_group || isDict inst) = Free
1095 | otherwise = ReduceMe AddSCs
1097 reduceContextWithoutImprovement
1098 doc try_me wanteds' `thenM` \ (frees, binds, irreds) ->
1099 ASSERT( null irreds )
1101 -- See "Notes on implicit parameters, Question 4: top level"
1102 if is_nested_group then
1103 extendLIEs frees `thenM_`
1104 returnM (varSetElems qtvs, binds)
1107 (non_ips, bad_ips) = partition isClassDict frees
1109 addTopIPErrs bndrs bad_ips `thenM_`
1110 extendLIEs non_ips `thenM_`
1111 returnM (varSetElems qtvs, binds)
1115 %************************************************************************
1117 \subsection{tcSimplifyToDicts}
1119 %************************************************************************
1121 On the LHS of transformation rules we only simplify methods and constants,
1122 getting dictionaries. We want to keep all of them unsimplified, to serve
1123 as the available stuff for the RHS of the rule.
1125 The same thing is used for specialise pragmas. Consider
1127 f :: Num a => a -> a
1128 {-# SPECIALISE f :: Int -> Int #-}
1131 The type checker generates a binding like:
1133 f_spec = (f :: Int -> Int)
1135 and we want to end up with
1137 f_spec = _inline_me_ (f Int dNumInt)
1139 But that means that we must simplify the Method for f to (f Int dNumInt)!
1140 So tcSimplifyToDicts squeezes out all Methods.
1142 IMPORTANT NOTE: we *don't* want to do superclass commoning up. Consider
1144 fromIntegral :: (Integral a, Num b) => a -> b
1145 {-# RULES "foo" fromIntegral = id :: Int -> Int #-}
1147 Here, a=b=Int, and Num Int is a superclass of Integral Int. But we *dont*
1150 forall dIntegralInt.
1151 fromIntegral Int Int dIntegralInt (scsel dIntegralInt) = id Int
1153 because the scsel will mess up RULE matching. Instead we want
1155 forall dIntegralInt, dNumInt.
1156 fromIntegral Int Int dIntegralInt dNumInt = id Int
1161 tcSimplifyToDicts :: [Inst] -> TcM (TcDictBinds)
1162 tcSimplifyToDicts wanteds
1163 = simpleReduceLoop doc try_me wanteds `thenM` \ (frees, binds, irreds) ->
1164 -- Since try_me doesn't look at types, we don't need to
1165 -- do any zonking, so it's safe to call reduceContext directly
1166 ASSERT( null frees )
1167 extendLIEs irreds `thenM_`
1171 doc = text "tcSimplifyToDicts"
1173 -- Reduce methods and lits only; stop as soon as we get a dictionary
1174 try_me inst | isDict inst = KeepDictWithoutSCs -- See notes above re "WithoutSCs"
1175 | otherwise = ReduceMe NoSCs
1180 tcSimplifyBracket is used when simplifying the constraints arising from
1181 a Template Haskell bracket [| ... |]. We want to check that there aren't
1182 any constraints that can't be satisfied (e.g. Show Foo, where Foo has no
1183 Show instance), but we aren't otherwise interested in the results.
1184 Nor do we care about ambiguous dictionaries etc. We will type check
1185 this bracket again at its usage site.
1188 tcSimplifyBracket :: [Inst] -> TcM ()
1189 tcSimplifyBracket wanteds
1190 = simpleReduceLoop doc reduceMe wanteds `thenM_`
1193 doc = text "tcSimplifyBracket"
1197 %************************************************************************
1199 \subsection{Filtering at a dynamic binding}
1201 %************************************************************************
1206 we must discharge all the ?x constraints from B. We also do an improvement
1207 step; if we have ?x::t1 and ?x::t2 we must unify t1, t2.
1209 Actually, the constraints from B might improve the types in ?x. For example
1211 f :: (?x::Int) => Char -> Char
1214 then the constraint (?x::Int) arising from the call to f will
1215 force the binding for ?x to be of type Int.
1218 tcSimplifyIPs :: [Inst] -- The implicit parameters bound here
1221 tcSimplifyIPs given_ips wanteds
1222 = simpl_loop given_ips wanteds `thenM` \ (frees, binds) ->
1223 extendLIEs frees `thenM_`
1226 doc = text "tcSimplifyIPs" <+> ppr given_ips
1227 ip_set = mkNameSet (ipNamesOfInsts given_ips)
1229 -- Simplify any methods that mention the implicit parameter
1230 try_me inst | isFreeWrtIPs ip_set inst = Free
1231 | otherwise = ReduceMe NoSCs
1233 simpl_loop givens wanteds
1234 = mappM zonkInst givens `thenM` \ givens' ->
1235 mappM zonkInst wanteds `thenM` \ wanteds' ->
1237 reduceContext doc try_me givens' wanteds' `thenM` \ (no_improvement, frees, binds, irreds) ->
1239 if no_improvement then
1240 ASSERT( null irreds )
1241 returnM (frees, binds)
1243 simpl_loop givens' (irreds ++ frees) `thenM` \ (frees1, binds1) ->
1244 returnM (frees1, binds `unionBags` binds1)
1248 %************************************************************************
1250 \subsection[binds-for-local-funs]{@bindInstsOfLocalFuns@}
1252 %************************************************************************
1254 When doing a binding group, we may have @Insts@ of local functions.
1255 For example, we might have...
1257 let f x = x + 1 -- orig local function (overloaded)
1258 f.1 = f Int -- two instances of f
1263 The point is: we must drop the bindings for @f.1@ and @f.2@ here,
1264 where @f@ is in scope; those @Insts@ must certainly not be passed
1265 upwards towards the top-level. If the @Insts@ were binding-ified up
1266 there, they would have unresolvable references to @f@.
1268 We pass in an @init_lie@ of @Insts@ and a list of locally-bound @Ids@.
1269 For each method @Inst@ in the @init_lie@ that mentions one of the
1270 @Ids@, we create a binding. We return the remaining @Insts@ (in an
1271 @LIE@), as well as the @HsBinds@ generated.
1274 bindInstsOfLocalFuns :: [Inst] -> [TcId] -> TcM TcDictBinds
1275 -- Simlifies only MethodInsts, and generate only bindings of form
1277 -- We're careful not to even generate bindings of the form
1279 -- You'd think that'd be fine, but it interacts with what is
1280 -- arguably a bug in Match.tidyEqnInfo (see notes there)
1282 bindInstsOfLocalFuns wanteds local_ids
1283 | null overloaded_ids
1285 = extendLIEs wanteds `thenM_`
1286 returnM emptyLHsBinds
1289 = simpleReduceLoop doc try_me for_me `thenM` \ (frees, binds, irreds) ->
1290 ASSERT( null irreds )
1291 extendLIEs not_for_me `thenM_`
1292 extendLIEs frees `thenM_`
1295 doc = text "bindInsts" <+> ppr local_ids
1296 overloaded_ids = filter is_overloaded local_ids
1297 is_overloaded id = isOverloadedTy (idType id)
1298 (for_me, not_for_me) = partition (isMethodFor overloaded_set) wanteds
1300 overloaded_set = mkVarSet overloaded_ids -- There can occasionally be a lot of them
1301 -- so it's worth building a set, so that
1302 -- lookup (in isMethodFor) is faster
1303 try_me inst | isMethod inst = ReduceMe NoSCs
1308 %************************************************************************
1310 \subsection{Data types for the reduction mechanism}
1312 %************************************************************************
1314 The main control over context reduction is here
1318 = ReduceMe WantSCs -- Try to reduce this
1319 -- If there's no instance, behave exactly like
1320 -- DontReduce: add the inst to the irreductible ones,
1321 -- but don't produce an error message of any kind.
1322 -- It might be quite legitimate such as (Eq a)!
1324 | KeepDictWithoutSCs -- Return as irreducible; don't add its superclasses
1325 -- Rather specialised: see notes with tcSimplifyToDicts
1327 | DontReduceUnlessConstant -- Return as irreducible unless it can
1328 -- be reduced to a constant in one step
1330 | Free -- Return as free
1332 reduceMe :: Inst -> WhatToDo
1333 reduceMe inst = ReduceMe AddSCs
1335 data WantSCs = NoSCs | AddSCs -- Tells whether we should add the superclasses
1336 -- of a predicate when adding it to the avails
1337 -- The reason for this flag is entirely the super-class loop problem
1338 -- Note [SUPER-CLASS LOOP 1]
1344 type Avails = FiniteMap Inst Avail
1345 emptyAvails = emptyFM
1348 = IsFree -- Used for free Insts
1349 | Irred -- Used for irreducible dictionaries,
1350 -- which are going to be lambda bound
1352 | Given TcId -- Used for dictionaries for which we have a binding
1353 -- e.g. those "given" in a signature
1354 Bool -- True <=> actually consumed (splittable IPs only)
1356 | Rhs -- Used when there is a RHS
1357 (LHsExpr TcId) -- The RHS
1358 [Inst] -- Insts free in the RHS; we need these too
1360 | Linear -- Splittable Insts only.
1361 Int -- The Int is always 2 or more; indicates how
1362 -- many copies are required
1363 Inst -- The splitter
1364 Avail -- Where the "master copy" is
1366 | LinRhss -- Splittable Insts only; this is used only internally
1367 -- by extractResults, where a Linear
1368 -- is turned into an LinRhss
1369 [LHsExpr TcId] -- A supply of suitable RHSs
1371 pprAvails avails = vcat [sep [ppr inst, nest 2 (equals <+> pprAvail avail)]
1372 | (inst,avail) <- fmToList avails ]
1374 instance Outputable Avail where
1377 pprAvail IsFree = text "Free"
1378 pprAvail Irred = text "Irred"
1379 pprAvail (Given x b) = text "Given" <+> ppr x <+>
1380 if b then text "(used)" else empty
1381 pprAvail (Rhs rhs bs) = text "Rhs" <+> ppr rhs <+> braces (ppr bs)
1382 pprAvail (Linear n i a) = text "Linear" <+> ppr n <+> braces (ppr i) <+> ppr a
1383 pprAvail (LinRhss rhss) = text "LinRhss" <+> ppr rhss
1386 Extracting the bindings from a bunch of Avails.
1387 The bindings do *not* come back sorted in dependency order.
1388 We assume that they'll be wrapped in a big Rec, so that the
1389 dependency analyser can sort them out later
1393 extractResults :: Avails
1395 -> TcM (TcDictBinds, -- Bindings
1396 [Inst], -- Irreducible ones
1397 [Inst]) -- Free ones
1399 extractResults avails wanteds
1400 = go avails emptyBag [] [] wanteds
1402 go avails binds irreds frees []
1403 = returnM (binds, irreds, frees)
1405 go avails binds irreds frees (w:ws)
1406 = case lookupFM avails w of
1407 Nothing -> pprTrace "Urk: extractResults" (ppr w) $
1408 go avails binds irreds frees ws
1410 Just IsFree -> go (add_free avails w) binds irreds (w:frees) ws
1411 Just Irred -> go (add_given avails w) binds (w:irreds) frees ws
1413 Just (Given id _) -> go avails new_binds irreds frees ws
1415 new_binds | id == instToId w = binds
1416 | otherwise = addBind binds w (L (instSpan w) (HsVar id))
1417 -- The sought Id can be one of the givens, via a superclass chain
1418 -- and then we definitely don't want to generate an x=x binding!
1420 Just (Rhs rhs ws') -> go (add_given avails w) new_binds irreds frees (ws' ++ ws)
1422 new_binds = addBind binds w rhs
1424 Just (Linear n split_inst avail) -- Transform Linear --> LinRhss
1425 -> get_root irreds frees avail w `thenM` \ (irreds', frees', root_id) ->
1426 split n (instToId split_inst) root_id w `thenM` \ (binds', rhss) ->
1427 go (addToFM avails w (LinRhss rhss))
1428 (binds `unionBags` binds')
1429 irreds' frees' (split_inst : w : ws)
1431 Just (LinRhss (rhs:rhss)) -- Consume one of the Rhss
1432 -> go new_avails new_binds irreds frees ws
1434 new_binds = addBind binds w rhs
1435 new_avails = addToFM avails w (LinRhss rhss)
1437 get_root irreds frees (Given id _) w = returnM (irreds, frees, id)
1438 get_root irreds frees Irred w = cloneDict w `thenM` \ w' ->
1439 returnM (w':irreds, frees, instToId w')
1440 get_root irreds frees IsFree w = cloneDict w `thenM` \ w' ->
1441 returnM (irreds, w':frees, instToId w')
1443 add_given avails w = addToFM avails w (Given (instToId w) True)
1445 add_free avails w | isMethod w = avails
1446 | otherwise = add_given avails w
1448 -- Do *not* replace Free by Given if it's a method.
1449 -- The following situation shows why this is bad:
1450 -- truncate :: forall a. RealFrac a => forall b. Integral b => a -> b
1451 -- From an application (truncate f i) we get
1452 -- t1 = truncate at f
1454 -- If we have also have a second occurrence of truncate, we get
1455 -- t3 = truncate at f
1457 -- When simplifying with i,f free, we might still notice that
1458 -- t1=t3; but alas, the binding for t2 (which mentions t1)
1459 -- will continue to float out!
1460 -- (split n i a) returns: n rhss
1461 -- auxiliary bindings
1462 -- 1 or 0 insts to add to irreds
1465 split :: Int -> TcId -> TcId -> Inst
1466 -> TcM (TcDictBinds, [LHsExpr TcId])
1467 -- (split n split_id root_id wanted) returns
1468 -- * a list of 'n' expressions, all of which witness 'avail'
1469 -- * a bunch of auxiliary bindings to support these expressions
1470 -- * one or zero insts needed to witness the whole lot
1471 -- (maybe be zero if the initial Inst is a Given)
1473 -- NB: 'wanted' is just a template
1475 split n split_id root_id wanted
1478 ty = linearInstType wanted
1479 pair_ty = mkTyConApp pairTyCon [ty,ty]
1480 id = instToId wanted
1483 span = instSpan wanted
1485 go 1 = returnM (emptyBag, [L span $ HsVar root_id])
1487 go n = go ((n+1) `div` 2) `thenM` \ (binds1, rhss) ->
1488 expand n rhss `thenM` \ (binds2, rhss') ->
1489 returnM (binds1 `unionBags` binds2, rhss')
1492 -- Given ((n+1)/2) rhss, make n rhss, using auxiliary bindings
1493 -- e.g. expand 3 [rhs1, rhs2]
1494 -- = ( { x = split rhs1 },
1495 -- [fst x, snd x, rhs2] )
1497 | n `rem` 2 == 0 = go rhss -- n is even
1498 | otherwise = go (tail rhss) `thenM` \ (binds', rhss') ->
1499 returnM (binds', head rhss : rhss')
1501 go rhss = mapAndUnzipM do_one rhss `thenM` \ (binds', rhss') ->
1502 returnM (listToBag binds', concat rhss')
1504 do_one rhs = newUnique `thenM` \ uniq ->
1505 tcLookupId fstName `thenM` \ fst_id ->
1506 tcLookupId sndName `thenM` \ snd_id ->
1508 x = mkUserLocal occ uniq pair_ty loc
1510 returnM (L span (VarBind x (mk_app span split_id rhs)),
1511 [mk_fs_app span fst_id ty x, mk_fs_app span snd_id ty x])
1513 mk_fs_app span id ty var = L span (HsVar id) `mkHsTyApp` [ty,ty] `mkHsApp` (L span (HsVar var))
1515 mk_app span id rhs = L span (HsApp (L span (HsVar id)) rhs)
1517 addBind binds inst rhs = binds `unionBags` unitBag (L (instLocSrcSpan (instLoc inst))
1518 (VarBind (instToId inst) rhs))
1519 instSpan wanted = instLocSrcSpan (instLoc wanted)
1523 %************************************************************************
1525 \subsection[reduce]{@reduce@}
1527 %************************************************************************
1529 When the "what to do" predicate doesn't depend on the quantified type variables,
1530 matters are easier. We don't need to do any zonking, unless the improvement step
1531 does something, in which case we zonk before iterating.
1533 The "given" set is always empty.
1536 simpleReduceLoop :: SDoc
1537 -> (Inst -> WhatToDo) -- What to do, *not* based on the quantified type variables
1539 -> TcM ([Inst], -- Free
1541 [Inst]) -- Irreducible
1543 simpleReduceLoop doc try_me wanteds
1544 = mappM zonkInst wanteds `thenM` \ wanteds' ->
1545 reduceContext doc try_me [] wanteds' `thenM` \ (no_improvement, frees, binds, irreds) ->
1546 if no_improvement then
1547 returnM (frees, binds, irreds)
1549 simpleReduceLoop doc try_me (irreds ++ frees) `thenM` \ (frees1, binds1, irreds1) ->
1550 returnM (frees1, binds `unionBags` binds1, irreds1)
1556 reduceContext :: SDoc
1557 -> (Inst -> WhatToDo)
1560 -> TcM (Bool, -- True <=> improve step did no unification
1562 TcDictBinds, -- Dictionary bindings
1563 [Inst]) -- Irreducible
1565 reduceContext doc try_me givens wanteds
1567 traceTc (text "reduceContext" <+> (vcat [
1568 text "----------------------",
1570 text "given" <+> ppr givens,
1571 text "wanted" <+> ppr wanteds,
1572 text "----------------------"
1575 -- Build the Avail mapping from "givens"
1576 foldlM addGiven emptyAvails givens `thenM` \ init_state ->
1579 reduceList (0,[]) try_me wanteds init_state `thenM` \ avails ->
1581 -- Do improvement, using everything in avails
1582 -- In particular, avails includes all superclasses of everything
1583 tcImprove avails `thenM` \ no_improvement ->
1585 extractResults avails wanteds `thenM` \ (binds, irreds, frees) ->
1587 traceTc (text "reduceContext end" <+> (vcat [
1588 text "----------------------",
1590 text "given" <+> ppr givens,
1591 text "wanted" <+> ppr wanteds,
1593 text "avails" <+> pprAvails avails,
1594 text "frees" <+> ppr frees,
1595 text "no_improvement =" <+> ppr no_improvement,
1596 text "----------------------"
1599 returnM (no_improvement, frees, binds, irreds)
1601 -- reduceContextWithoutImprovement differs from reduceContext
1602 -- (a) no improvement
1603 -- (b) 'givens' is assumed empty
1604 reduceContextWithoutImprovement doc try_me wanteds
1606 traceTc (text "reduceContextWithoutImprovement" <+> (vcat [
1607 text "----------------------",
1609 text "wanted" <+> ppr wanteds,
1610 text "----------------------"
1614 reduceList (0,[]) try_me wanteds emptyAvails `thenM` \ avails ->
1615 extractResults avails wanteds `thenM` \ (binds, irreds, frees) ->
1617 traceTc (text "reduceContextWithoutImprovement end" <+> (vcat [
1618 text "----------------------",
1620 text "wanted" <+> ppr wanteds,
1622 text "avails" <+> pprAvails avails,
1623 text "frees" <+> ppr frees,
1624 text "----------------------"
1627 returnM (frees, binds, irreds)
1629 tcImprove :: Avails -> TcM Bool -- False <=> no change
1630 -- Perform improvement using all the predicates in Avails
1632 = tcGetInstEnvs `thenM` \ inst_envs ->
1634 preds = [ (pred, pp_loc)
1635 | (inst, avail) <- fmToList avails,
1636 pred <- get_preds inst avail,
1637 let pp_loc = pprInstLoc (instLoc inst)
1639 -- Avails has all the superclasses etc (good)
1640 -- It also has all the intermediates of the deduction (good)
1641 -- It does not have duplicates (good)
1642 -- NB that (?x::t1) and (?x::t2) will be held separately in avails
1643 -- so that improve will see them separate
1645 -- For free Methods, we want to take predicates from their context,
1646 -- but for Methods that have been squished their context will already
1647 -- be in Avails, and we don't want duplicates. Hence this rather
1648 -- horrid get_preds function
1649 get_preds inst IsFree = fdPredsOfInst inst
1650 get_preds inst other | isDict inst = [dictPred inst]
1653 eqns = improve get_insts preds
1654 get_insts clas = classInstances inst_envs clas
1659 traceTc (ptext SLIT("Improve:") <+> vcat (map pprEquationDoc eqns)) `thenM_`
1660 mappM_ unify eqns `thenM_`
1663 unify ((qtvs, pairs), doc)
1665 tcInstTyVars (varSetElems qtvs) `thenM` \ (_, _, tenv) ->
1666 mapM_ (unif_pr tenv) pairs
1667 unif_pr tenv (ty1,ty2) = unifyType (substTy tenv ty1) (substTy tenv ty2)
1670 The main context-reduction function is @reduce@. Here's its game plan.
1673 reduceList :: (Int,[Inst]) -- Stack (for err msgs)
1674 -- along with its depth
1675 -> (Inst -> WhatToDo)
1682 try_me: given an inst, this function returns
1684 DontReduce return this in "irreds"
1685 Free return this in "frees"
1687 wanteds: The list of insts to reduce
1688 state: An accumulating parameter of type Avails
1689 that contains the state of the algorithm
1691 It returns a Avails.
1693 The (n,stack) pair is just used for error reporting.
1694 n is always the depth of the stack.
1695 The stack is the stack of Insts being reduced: to produce X
1696 I had to produce Y, to produce Y I had to produce Z, and so on.
1699 reduceList (n,stack) try_me wanteds state
1700 | n > opt_MaxContextReductionDepth
1701 = failWithTc (reduceDepthErr n stack)
1707 pprTrace "Interesting! Context reduction stack deeper than 8:"
1708 (int n $$ ifPprDebug (nest 2 (pprStack stack)))
1713 go [] state = returnM state
1714 go (w:ws) state = reduce (n+1, w:stack) try_me w state `thenM` \ state' ->
1717 -- Base case: we're done!
1718 reduce stack try_me wanted avails
1719 -- It's the same as an existing inst, or a superclass thereof
1720 | Just avail <- isAvailable avails wanted
1721 = if isLinearInst wanted then
1722 addLinearAvailable avails avail wanted `thenM` \ (avails', wanteds') ->
1723 reduceList stack try_me wanteds' avails'
1725 returnM avails -- No op for non-linear things
1728 = case try_me wanted of {
1730 KeepDictWithoutSCs -> addIrred NoSCs avails wanted
1732 ; DontReduceUnlessConstant -> -- It's irreducible (or at least should not be reduced)
1733 -- First, see if the inst can be reduced to a constant in one step
1734 try_simple (addIrred AddSCs) -- Assume want superclasses
1736 ; Free -> -- It's free so just chuck it upstairs
1737 -- First, see if the inst can be reduced to a constant in one step
1740 ; ReduceMe want_scs -> -- It should be reduced
1741 lookupInst wanted `thenM` \ lookup_result ->
1742 case lookup_result of
1743 GenInst wanteds' rhs -> addIrred NoSCs avails wanted `thenM` \ avails1 ->
1744 reduceList stack try_me wanteds' avails1 `thenM` \ avails2 ->
1745 addWanted want_scs avails2 wanted rhs wanteds'
1746 -- Experiment with temporarily doing addIrred *before* the reduceList,
1747 -- which has the effect of adding the thing we are trying
1748 -- to prove to the database before trying to prove the things it
1749 -- needs. See note [RECURSIVE DICTIONARIES]
1750 -- NB: we must not do an addWanted before, because that adds the
1751 -- superclasses too, and thaat can lead to a spurious loop; see
1752 -- the examples in [SUPERCLASS-LOOP]
1753 -- So we do an addIrred before, and then overwrite it afterwards with addWanted
1755 SimpleInst rhs -> addWanted want_scs avails wanted rhs []
1757 NoInstance -> -- No such instance!
1758 -- Add it and its superclasses
1759 addIrred want_scs avails wanted
1762 try_simple do_this_otherwise
1763 = lookupInst wanted `thenM` \ lookup_result ->
1764 case lookup_result of
1765 SimpleInst rhs -> addWanted AddSCs avails wanted rhs []
1766 other -> do_this_otherwise avails wanted
1771 -------------------------
1772 isAvailable :: Avails -> Inst -> Maybe Avail
1773 isAvailable avails wanted = lookupFM avails wanted
1774 -- NB 1: the Ord instance of Inst compares by the class/type info
1775 -- *not* by unique. So
1776 -- d1::C Int == d2::C Int
1778 addLinearAvailable :: Avails -> Avail -> Inst -> TcM (Avails, [Inst])
1779 addLinearAvailable avails avail wanted
1780 -- avails currently maps [wanted -> avail]
1781 -- Extend avails to reflect a neeed for an extra copy of avail
1783 | Just avail' <- split_avail avail
1784 = returnM (addToFM avails wanted avail', [])
1787 = tcLookupId splitName `thenM` \ split_id ->
1788 tcInstClassOp (instLoc wanted) split_id
1789 [linearInstType wanted] `thenM` \ split_inst ->
1790 returnM (addToFM avails wanted (Linear 2 split_inst avail), [split_inst])
1793 split_avail :: Avail -> Maybe Avail
1794 -- (Just av) if there's a modified version of avail that
1795 -- we can use to replace avail in avails
1796 -- Nothing if there isn't, so we need to create a Linear
1797 split_avail (Linear n i a) = Just (Linear (n+1) i a)
1798 split_avail (Given id used) | not used = Just (Given id True)
1799 | otherwise = Nothing
1800 split_avail Irred = Nothing
1801 split_avail IsFree = Nothing
1802 split_avail other = pprPanic "addLinearAvailable" (ppr avail $$ ppr wanted $$ ppr avails)
1804 -------------------------
1805 addFree :: Avails -> Inst -> TcM Avails
1806 -- When an Inst is tossed upstairs as 'free' we nevertheless add it
1807 -- to avails, so that any other equal Insts will be commoned up right
1808 -- here rather than also being tossed upstairs. This is really just
1809 -- an optimisation, and perhaps it is more trouble that it is worth,
1810 -- as the following comments show!
1812 -- NB: do *not* add superclasses. If we have
1815 -- but a is not bound here, then we *don't* want to derive
1816 -- dn from df here lest we lose sharing.
1818 addFree avails free = returnM (addToFM avails free IsFree)
1820 addWanted :: WantSCs -> Avails -> Inst -> LHsExpr TcId -> [Inst] -> TcM Avails
1821 addWanted want_scs avails wanted rhs_expr wanteds
1822 = addAvailAndSCs want_scs avails wanted avail
1824 avail = Rhs rhs_expr wanteds
1826 addGiven :: Avails -> Inst -> TcM Avails
1827 addGiven avails given = addAvailAndSCs AddSCs avails given (Given (instToId given) False)
1828 -- Always add superclasses for 'givens'
1830 -- No ASSERT( not (given `elemFM` avails) ) because in an instance
1831 -- decl for Ord t we can add both Ord t and Eq t as 'givens',
1832 -- so the assert isn't true
1834 addIrred :: WantSCs -> Avails -> Inst -> TcM Avails
1835 addIrred want_scs avails irred = ASSERT2( not (irred `elemFM` avails), ppr irred $$ ppr avails )
1836 addAvailAndSCs want_scs avails irred Irred
1838 addAvailAndSCs :: WantSCs -> Avails -> Inst -> Avail -> TcM Avails
1839 addAvailAndSCs want_scs avails inst avail
1840 | not (isClassDict inst) = return avails_with_inst
1841 | NoSCs <- want_scs = return avails_with_inst
1842 | otherwise = do { traceTc (text "addAvailAndSCs" <+> vcat [ppr inst, ppr deps])
1843 ; addSCs is_loop avails_with_inst inst }
1845 avails_with_inst = addToFM avails inst avail
1847 is_loop pred = any (`tcEqType` mkPredTy pred) dep_tys
1848 -- Note: this compares by *type*, not by Unique
1849 deps = findAllDeps (unitVarSet (instToId inst)) avail
1850 dep_tys = map idType (varSetElems deps)
1852 findAllDeps :: IdSet -> Avail -> IdSet
1853 -- Find all the Insts that this one depends on
1854 -- See Note [SUPERCLASS-LOOP 2]
1855 -- Watch out, though. Since the avails may contain loops
1856 -- (see Note [RECURSIVE DICTIONARIES]), so we need to track the ones we've seen so far
1857 findAllDeps so_far (Rhs _ kids) = foldl find_all so_far kids
1858 findAllDeps so_far other = so_far
1860 find_all :: IdSet -> Inst -> IdSet
1862 | kid_id `elemVarSet` so_far = so_far
1863 | Just avail <- lookupFM avails kid = findAllDeps so_far' avail
1864 | otherwise = so_far'
1866 so_far' = extendVarSet so_far kid_id -- Add the new kid to so_far
1867 kid_id = instToId kid
1869 addSCs :: (TcPredType -> Bool) -> Avails -> Inst -> TcM Avails
1870 -- Add all the superclasses of the Inst to Avails
1871 -- The first param says "dont do this because the original thing
1872 -- depends on this one, so you'd build a loop"
1873 -- Invariant: the Inst is already in Avails.
1875 addSCs is_loop avails dict
1876 = do { sc_dicts <- newDictsAtLoc (instLoc dict) sc_theta'
1877 ; foldlM add_sc avails (zipEqual "add_scs" sc_dicts sc_sels) }
1879 (clas, tys) = getDictClassTys dict
1880 (tyvars, sc_theta, sc_sels, _) = classBigSig clas
1881 sc_theta' = substTheta (zipTopTvSubst tyvars tys) sc_theta
1883 add_sc avails (sc_dict, sc_sel)
1884 | is_loop (dictPred sc_dict) = return avails -- See Note [SUPERCLASS-LOOP 2]
1885 | is_given sc_dict = return avails
1886 | otherwise = addSCs is_loop avails' sc_dict
1888 sc_sel_rhs = mkHsDictApp (mkHsTyApp (L (instSpan dict) (HsVar sc_sel)) tys) [instToId dict]
1889 avails' = addToFM avails sc_dict (Rhs sc_sel_rhs [dict])
1891 is_given :: Inst -> Bool
1892 is_given sc_dict = case lookupFM avails sc_dict of
1893 Just (Given _ _) -> True -- Given is cheaper than superclass selection
1897 Note [SUPERCLASS-LOOP 2]
1898 ~~~~~~~~~~~~~~~~~~~~~~~~
1899 But the above isn't enough. Suppose we are *given* d1:Ord a,
1900 and want to deduce (d2:C [a]) where
1902 class Ord a => C a where
1903 instance Ord [a] => C [a] where ...
1905 Then we'll use the instance decl to deduce C [a] from Ord [a], and then add the
1906 superclasses of C [a] to avails. But we must not overwrite the binding
1907 for Ord [a] (which is obtained from Ord a) with a superclass selection or we'll just
1910 Here's another variant, immortalised in tcrun020
1911 class Monad m => C1 m
1912 class C1 m => C2 m x
1913 instance C2 Maybe Bool
1914 For the instance decl we need to build (C1 Maybe), and it's no good if
1915 we run around and add (C2 Maybe Bool) and its superclasses to the avails
1916 before we search for C1 Maybe.
1918 Here's another example
1919 class Eq b => Foo a b
1920 instance Eq a => Foo [a] a
1924 we'll first deduce that it holds (via the instance decl). We must not
1925 then overwrite the Eq t constraint with a superclass selection!
1927 At first I had a gross hack, whereby I simply did not add superclass constraints
1928 in addWanted, though I did for addGiven and addIrred. This was sub-optimal,
1929 becuase it lost legitimate superclass sharing, and it still didn't do the job:
1930 I found a very obscure program (now tcrun021) in which improvement meant the
1931 simplifier got two bites a the cherry... so something seemed to be an Irred
1932 first time, but reducible next time.
1934 Now we implement the Right Solution, which is to check for loops directly
1935 when adding superclasses. It's a bit like the occurs check in unification.
1938 Note [RECURSIVE DICTIONARIES]
1939 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1941 data D r = ZeroD | SuccD (r (D r));
1943 instance (Eq (r (D r))) => Eq (D r) where
1944 ZeroD == ZeroD = True
1945 (SuccD a) == (SuccD b) = a == b
1948 equalDC :: D [] -> D [] -> Bool;
1951 We need to prove (Eq (D [])). Here's how we go:
1955 by instance decl, holds if
1959 by instance decl of Eq, holds if
1961 where d2 = dfEqList d3
1964 But now we can "tie the knot" to give
1970 and it'll even run! The trick is to put the thing we are trying to prove
1971 (in this case Eq (D []) into the database before trying to prove its
1972 contributing clauses.
1975 %************************************************************************
1977 \section{tcSimplifyTop: defaulting}
1979 %************************************************************************
1982 @tcSimplifyTop@ is called once per module to simplify all the constant
1983 and ambiguous Insts.
1985 We need to be careful of one case. Suppose we have
1987 instance Num a => Num (Foo a b) where ...
1989 and @tcSimplifyTop@ is given a constraint (Num (Foo x y)). Then it'll simplify
1990 to (Num x), and default x to Int. But what about y??
1992 It's OK: the final zonking stage should zap y to (), which is fine.
1996 tcSimplifyTop, tcSimplifyInteractive :: [Inst] -> TcM TcDictBinds
1997 tcSimplifyTop wanteds
1998 = tc_simplify_top doc False {- Not interactive loop -} AddSCs wanteds
2000 doc = text "tcSimplifyTop"
2002 tcSimplifyInteractive wanteds
2003 = tc_simplify_top doc True {- Interactive loop -} AddSCs wanteds
2005 doc = text "tcSimplifyTop"
2007 -- The TcLclEnv should be valid here, solely to improve
2008 -- error message generation for the monomorphism restriction
2009 tc_simplify_top doc is_interactive want_scs wanteds
2010 = do { lcl_env <- getLclEnv
2011 ; traceTc (text "tcSimplifyTop" <+> ppr (lclEnvElts lcl_env))
2013 ; let try_me inst = ReduceMe want_scs
2014 ; (frees, binds, irreds) <- simpleReduceLoop doc try_me wanteds
2017 -- First get rid of implicit parameters
2018 (non_ips, bad_ips) = partition isClassDict irreds
2020 -- All the non-tv or multi-param ones are definite errors
2021 (unary_tv_dicts, non_tvs) = partition is_unary_tyvar_dict non_ips
2022 bad_tyvars = unionVarSets (map tyVarsOfInst non_tvs)
2024 -- Group by type variable
2025 tv_groups = equivClasses cmp_by_tyvar unary_tv_dicts
2027 -- Pick the ones which its worth trying to disambiguate
2028 -- namely, the ones whose type variable isn't bound
2029 -- up with one of the non-tyvar classes
2030 (default_gps, non_default_gps) = partition defaultable_group tv_groups
2031 defaultable_group ds
2032 = not (bad_tyvars `intersectsVarSet` tyVarsOfInst (head ds))
2033 && defaultable_classes (map get_clas ds)
2034 defaultable_classes clss
2035 | is_interactive = any isInteractiveClass clss
2036 | otherwise = all isStandardClass clss && any isNumericClass clss
2038 isInteractiveClass cls = isNumericClass cls
2039 || (classKey cls `elem` [showClassKey, eqClassKey, ordClassKey])
2040 -- In interactive mode, we default Show a to Show ()
2041 -- to avoid graututious errors on "show []"
2044 -- Collect together all the bad guys
2045 bad_guys = non_tvs ++ concat non_default_gps
2046 (ambigs, no_insts) = partition isTyVarDict bad_guys
2047 -- If the dict has no type constructors involved, it must be ambiguous,
2048 -- except I suppose that another error with fundeps maybe should have
2049 -- constrained those type variables
2051 -- Report definite errors
2052 ; ASSERT( null frees )
2053 groupErrs (addNoInstanceErrs Nothing []) no_insts
2054 ; strangeTopIPErrs bad_ips
2056 -- Deal with ambiguity errors, but only if
2057 -- if there has not been an error so far:
2058 -- errors often give rise to spurious ambiguous Insts.
2060 -- f = (*) -- Monomorphic
2061 -- g :: Num a => a -> a
2063 -- Here, we get a complaint when checking the type signature for g,
2064 -- that g isn't polymorphic enough; but then we get another one when
2065 -- dealing with the (Num a) context arising from f's definition;
2066 -- we try to unify a with Int (to default it), but find that it's
2067 -- already been unified with the rigid variable from g's type sig
2068 ; binds_ambig <- ifErrsM (returnM []) $
2069 do { -- Complain about the ones that don't fall under
2070 -- the Haskell rules for disambiguation
2071 -- This group includes both non-existent instances
2072 -- e.g. Num (IO a) and Eq (Int -> Int)
2073 -- and ambiguous dictionaries
2075 addTopAmbigErrs ambigs
2077 -- Disambiguate the ones that look feasible
2078 ; mappM disambigGroup default_gps }
2080 ; return (binds `unionBags` unionManyBags binds_ambig) }
2082 ----------------------------------
2083 d1 `cmp_by_tyvar` d2 = get_tv d1 `compare` get_tv d2
2085 is_unary_tyvar_dict :: Inst -> Bool -- Dicts of form (C a)
2086 -- Invariant: argument is a ClassDict, not IP or method
2087 is_unary_tyvar_dict d = case getDictClassTys d of
2088 (_, [ty]) -> tcIsTyVarTy ty
2091 get_tv d = case getDictClassTys d of
2092 (clas, [ty]) -> tcGetTyVar "tcSimplify" ty
2093 get_clas d = case getDictClassTys d of
2097 If a dictionary constrains a type variable which is
2098 * not mentioned in the environment
2099 * and not mentioned in the type of the expression
2100 then it is ambiguous. No further information will arise to instantiate
2101 the type variable; nor will it be generalised and turned into an extra
2102 parameter to a function.
2104 It is an error for this to occur, except that Haskell provided for
2105 certain rules to be applied in the special case of numeric types.
2107 * at least one of its classes is a numeric class, and
2108 * all of its classes are numeric or standard
2109 then the type variable can be defaulted to the first type in the
2110 default-type list which is an instance of all the offending classes.
2112 So here is the function which does the work. It takes the ambiguous
2113 dictionaries and either resolves them (producing bindings) or
2114 complains. It works by splitting the dictionary list by type
2115 variable, and using @disambigOne@ to do the real business.
2117 @disambigOne@ assumes that its arguments dictionaries constrain all
2118 the same type variable.
2120 ADR Comment 20/6/94: I've changed the @CReturnable@ case to default to
2121 @()@ instead of @Int@. I reckon this is the Right Thing to do since
2122 the most common use of defaulting is code like:
2124 _ccall_ foo `seqPrimIO` bar
2126 Since we're not using the result of @foo@, the result if (presumably)
2130 disambigGroup :: [Inst] -- All standard classes of form (C a)
2134 = -- THE DICTS OBEY THE DEFAULTABLE CONSTRAINT
2135 -- SO, TRY DEFAULT TYPES IN ORDER
2137 -- Failure here is caused by there being no type in the
2138 -- default list which can satisfy all the ambiguous classes.
2139 -- For example, if Real a is reqd, but the only type in the
2140 -- default list is Int.
2141 get_default_tys `thenM` \ default_tys ->
2143 try_default [] -- No defaults work, so fail
2146 try_default (default_ty : default_tys)
2147 = tryTcLIE_ (try_default default_tys) $ -- If default_ty fails, we try
2148 -- default_tys instead
2149 tcSimplifyDefault theta `thenM` \ _ ->
2152 theta = [mkClassPred clas [default_ty] | clas <- classes]
2154 -- See if any default works
2155 tryM (try_default default_tys) `thenM` \ mb_ty ->
2158 Right chosen_default_ty -> choose_default chosen_default_ty
2160 tyvar = get_tv (head dicts) -- Should be non-empty
2161 classes = map get_clas dicts
2163 choose_default default_ty -- Commit to tyvar = default_ty
2164 = -- Bind the type variable
2165 unifyType default_ty (mkTyVarTy tyvar) `thenM_`
2166 -- and reduce the context, for real this time
2167 simpleReduceLoop (text "disambig" <+> ppr dicts)
2168 reduceMe dicts `thenM` \ (frees, binds, ambigs) ->
2169 WARN( not (null frees && null ambigs), ppr frees $$ ppr ambigs )
2170 warnDefault dicts default_ty `thenM_`
2173 bomb_out = addTopAmbigErrs dicts `thenM_`
2177 = do { mb_defaults <- getDefaultTys
2178 ; case mb_defaults of
2179 Just tys -> return tys
2180 Nothing -> -- No use-supplied default;
2181 -- use [Integer, Double]
2182 do { integer_ty <- tcMetaTy integerTyConName
2183 ; checkWiredInTyCon doubleTyCon
2184 ; return [integer_ty, doubleTy] } }
2187 [Aside - why the defaulting mechanism is turned off when
2188 dealing with arguments and results to ccalls.
2190 When typechecking _ccall_s, TcExpr ensures that the external
2191 function is only passed arguments (and in the other direction,
2192 results) of a restricted set of 'native' types.
2194 The interaction between the defaulting mechanism for numeric
2195 values and CC & CR can be a bit puzzling to the user at times.
2204 What type has 'x' got here? That depends on the default list
2205 in operation, if it is equal to Haskell 98's default-default
2206 of (Integer, Double), 'x' has type Double, since Integer
2207 is not an instance of CR. If the default list is equal to
2208 Haskell 1.4's default-default of (Int, Double), 'x' has type
2214 %************************************************************************
2216 \subsection[simple]{@Simple@ versions}
2218 %************************************************************************
2220 Much simpler versions when there are no bindings to make!
2222 @tcSimplifyThetas@ simplifies class-type constraints formed by
2223 @deriving@ declarations and when specialising instances. We are
2224 only interested in the simplified bunch of class/type constraints.
2226 It simplifies to constraints of the form (C a b c) where
2227 a,b,c are type variables. This is required for the context of
2228 instance declarations.
2231 tcSimplifyDeriv :: TyCon
2233 -> ThetaType -- Wanted
2234 -> TcM ThetaType -- Needed
2236 tcSimplifyDeriv tc tyvars theta
2237 = tcInstTyVars tyvars `thenM` \ (tvs, _, tenv) ->
2238 -- The main loop may do unification, and that may crash if
2239 -- it doesn't see a TcTyVar, so we have to instantiate. Sigh
2240 -- ToDo: what if two of them do get unified?
2241 newDicts DerivOrigin (substTheta tenv theta) `thenM` \ wanteds ->
2242 simpleReduceLoop doc reduceMe wanteds `thenM` \ (frees, _, irreds) ->
2243 ASSERT( null frees ) -- reduceMe never returns Free
2245 doptM Opt_GlasgowExts `thenM` \ gla_exts ->
2246 doptM Opt_AllowUndecidableInstances `thenM` \ undecidable_ok ->
2248 tv_set = mkVarSet tvs
2250 (bad_insts, ok_insts) = partition is_bad_inst irreds
2252 = let pred = dictPred dict -- reduceMe squashes all non-dicts
2253 in isEmptyVarSet (tyVarsOfPred pred)
2254 -- Things like (Eq T) are bad
2255 || (not gla_exts && not (isTyVarClassPred pred))
2257 simpl_theta = map dictPred ok_insts
2258 weird_preds = [pred | pred <- simpl_theta
2259 , not (tyVarsOfPred pred `subVarSet` tv_set)]
2260 -- Check for a bizarre corner case, when the derived instance decl should
2261 -- have form instance C a b => D (T a) where ...
2262 -- Note that 'b' isn't a parameter of T. This gives rise to all sorts
2263 -- of problems; in particular, it's hard to compare solutions for
2264 -- equality when finding the fixpoint. So I just rule it out for now.
2266 rev_env = zipTopTvSubst tvs (mkTyVarTys tyvars)
2267 -- This reverse-mapping is a Royal Pain,
2268 -- but the result should mention TyVars not TcTyVars
2270 head_ty = TyConApp tc (map TyVarTy tvs)
2273 addNoInstanceErrs Nothing [] bad_insts `thenM_`
2274 mapM_ (addErrTc . badDerivedPred) weird_preds `thenM_`
2275 checkAmbiguity tvs simpl_theta tv_set `thenM_`
2276 -- Check instance termination as for user-declared instances.
2277 -- unless we had -fallow-undecidable-instances (which risks
2278 -- non-termination in the 'deriving' context-inference fixpoint
2280 ifM (gla_exts && not undecidable_ok)
2281 (checkInstTermination simpl_theta [head_ty]) `thenM_`
2282 returnM (substTheta rev_env simpl_theta)
2284 doc = ptext SLIT("deriving classes for a data type")
2287 @tcSimplifyDefault@ just checks class-type constraints, essentially;
2288 used with \tr{default} declarations. We are only interested in
2289 whether it worked or not.
2292 tcSimplifyDefault :: ThetaType -- Wanted; has no type variables in it
2295 tcSimplifyDefault theta
2296 = newDicts DefaultOrigin theta `thenM` \ wanteds ->
2297 simpleReduceLoop doc reduceMe wanteds `thenM` \ (frees, _, irreds) ->
2298 ASSERT( null frees ) -- try_me never returns Free
2299 addNoInstanceErrs Nothing [] irreds `thenM_`
2305 doc = ptext SLIT("default declaration")
2309 %************************************************************************
2311 \section{Errors and contexts}
2313 %************************************************************************
2315 ToDo: for these error messages, should we note the location as coming
2316 from the insts, or just whatever seems to be around in the monad just
2320 groupErrs :: ([Inst] -> TcM ()) -- Deal with one group
2321 -> [Inst] -- The offending Insts
2323 -- Group together insts with the same origin
2324 -- We want to report them together in error messages
2326 groupErrs report_err []
2328 groupErrs report_err (inst:insts)
2329 = do_one (inst:friends) `thenM_`
2330 groupErrs report_err others
2333 -- (It may seem a bit crude to compare the error messages,
2334 -- but it makes sure that we combine just what the user sees,
2335 -- and it avoids need equality on InstLocs.)
2336 (friends, others) = partition is_friend insts
2337 loc_msg = showSDoc (pprInstLoc (instLoc inst))
2338 is_friend friend = showSDoc (pprInstLoc (instLoc friend)) == loc_msg
2339 do_one insts = addInstCtxt (instLoc (head insts)) (report_err insts)
2340 -- Add location and context information derived from the Insts
2342 -- Add the "arising from..." part to a message about bunch of dicts
2343 addInstLoc :: [Inst] -> Message -> Message
2344 addInstLoc insts msg = msg $$ nest 2 (pprInstLoc (instLoc (head insts)))
2346 addTopIPErrs :: [Name] -> [Inst] -> TcM ()
2347 addTopIPErrs bndrs []
2349 addTopIPErrs bndrs ips
2350 = addErrTcM (tidy_env, mk_msg tidy_ips)
2352 (tidy_env, tidy_ips) = tidyInsts ips
2353 mk_msg ips = vcat [sep [ptext SLIT("Implicit parameters escape from"),
2354 nest 2 (ptext SLIT("the monomorphic top-level binding(s) of")
2355 <+> pprBinders bndrs <> colon)],
2356 nest 2 (vcat (map ppr_ip ips)),
2358 ppr_ip ip = pprPred (dictPred ip) <+> pprInstLoc (instLoc ip)
2360 strangeTopIPErrs :: [Inst] -> TcM ()
2361 strangeTopIPErrs dicts -- Strange, becuase addTopIPErrs should have caught them all
2362 = groupErrs report tidy_dicts
2364 (tidy_env, tidy_dicts) = tidyInsts dicts
2365 report dicts = addErrTcM (tidy_env, mk_msg dicts)
2366 mk_msg dicts = addInstLoc dicts (ptext SLIT("Unbound implicit parameter") <>
2367 plural tidy_dicts <+> pprDictsTheta tidy_dicts)
2369 addNoInstanceErrs :: Maybe SDoc -- Nothing => top level
2370 -- Just d => d describes the construct
2371 -> [Inst] -- What is given by the context or type sig
2372 -> [Inst] -- What is wanted
2374 addNoInstanceErrs mb_what givens []
2376 addNoInstanceErrs mb_what givens dicts
2377 = -- Some of the dicts are here because there is no instances
2378 -- and some because there are too many instances (overlap)
2379 tcGetInstEnvs `thenM` \ inst_envs ->
2381 (tidy_env1, tidy_givens) = tidyInsts givens
2382 (tidy_env2, tidy_dicts) = tidyMoreInsts tidy_env1 dicts
2384 -- Run through the dicts, generating a message for each
2385 -- overlapping one, but simply accumulating all the
2386 -- no-instance ones so they can be reported as a group
2387 (overlap_doc, no_inst_dicts) = foldl check_overlap (empty, []) tidy_dicts
2388 check_overlap (overlap_doc, no_inst_dicts) dict
2389 | not (isClassDict dict) = (overlap_doc, dict : no_inst_dicts)
2391 = case lookupInstEnv inst_envs clas tys of
2392 -- The case of exactly one match and no unifiers means
2393 -- a successful lookup. That can't happen here, becuase
2394 -- dicts only end up here if they didn't match in Inst.lookupInst
2396 ([m],[]) -> pprPanic "addNoInstanceErrs" (ppr dict)
2398 ([], _) -> (overlap_doc, dict : no_inst_dicts) -- No match
2399 res -> (mk_overlap_msg dict res $$ overlap_doc, no_inst_dicts)
2401 (clas,tys) = getDictClassTys dict
2404 -- Now generate a good message for the no-instance bunch
2405 mk_probable_fix tidy_env2 no_inst_dicts `thenM` \ (tidy_env3, probable_fix) ->
2407 no_inst_doc | null no_inst_dicts = empty
2408 | otherwise = vcat [addInstLoc no_inst_dicts heading, probable_fix]
2409 heading | null givens = ptext SLIT("No instance") <> plural no_inst_dicts <+>
2410 ptext SLIT("for") <+> pprDictsTheta no_inst_dicts
2411 | otherwise = sep [ptext SLIT("Could not deduce") <+> pprDictsTheta no_inst_dicts,
2412 nest 2 $ ptext SLIT("from the context") <+> pprDictsTheta tidy_givens]
2414 -- And emit both the non-instance and overlap messages
2415 addErrTcM (tidy_env3, no_inst_doc $$ overlap_doc)
2417 mk_overlap_msg dict (matches, unifiers)
2418 = vcat [ addInstLoc [dict] ((ptext SLIT("Overlapping instances for")
2419 <+> pprPred (dictPred dict))),
2420 sep [ptext SLIT("Matching instances") <> colon,
2421 nest 2 (vcat [pprInstances ispecs, pprInstances unifiers])],
2422 ASSERT( not (null matches) )
2423 if not (isSingleton matches)
2424 then -- Two or more matches
2426 else -- One match, plus some unifiers
2427 ASSERT( not (null unifiers) )
2428 parens (vcat [ptext SLIT("The choice depends on the instantiation of") <+>
2429 quotes (pprWithCommas ppr (varSetElems (tyVarsOfInst dict))),
2430 ptext SLIT("Use -fallow-incoherent-instances to use the first choice above")])]
2432 ispecs = [ispec | (_, ispec) <- matches]
2434 mk_probable_fix tidy_env dicts
2435 = returnM (tidy_env, sep [ptext SLIT("Possible fix:"), nest 2 (vcat fixes)])
2437 fixes = add_ors (fix1 ++ fix2)
2439 fix1 = case mb_what of
2440 Nothing -> [] -- Top level
2441 Just what -> -- Nested (type signatures, instance decls)
2442 [ sep [ ptext SLIT("add") <+> pprDictsTheta dicts,
2443 ptext SLIT("to the") <+> what] ]
2445 fix2 | null instance_dicts = []
2446 | otherwise = [ ptext SLIT("add an instance declaration for")
2447 <+> pprDictsTheta instance_dicts ]
2448 instance_dicts = [d | d <- dicts, isClassDict d, not (isTyVarDict d)]
2449 -- Insts for which it is worth suggesting an adding an instance declaration
2450 -- Exclude implicit parameters, and tyvar dicts
2452 add_ors :: [SDoc] -> [SDoc] -- The empty case should not happen
2453 add_ors [] = [ptext SLIT("[No suggested fixes]")] -- Strange
2454 add_ors (f1:fs) = f1 : map (ptext SLIT("or") <+>) fs
2456 addTopAmbigErrs dicts
2457 -- Divide into groups that share a common set of ambiguous tyvars
2458 = mapM report (equivClasses cmp [(d, tvs_of d) | d <- tidy_dicts])
2460 (tidy_env, tidy_dicts) = tidyInsts dicts
2462 tvs_of :: Inst -> [TcTyVar]
2463 tvs_of d = varSetElems (tyVarsOfInst d)
2464 cmp (_,tvs1) (_,tvs2) = tvs1 `compare` tvs2
2466 report :: [(Inst,[TcTyVar])] -> TcM ()
2467 report pairs@((inst,tvs) : _) -- The pairs share a common set of ambiguous tyvars
2468 = mkMonomorphismMsg tidy_env tvs `thenM` \ (tidy_env, mono_msg) ->
2469 setSrcSpan (instLocSrcSpan (instLoc inst)) $
2470 -- the location of the first one will do for the err message
2471 addErrTcM (tidy_env, msg $$ mono_msg)
2473 dicts = map fst pairs
2474 msg = sep [text "Ambiguous type variable" <> plural tvs <+>
2475 pprQuotedList tvs <+> in_msg,
2476 nest 2 (pprDictsInFull dicts)]
2477 in_msg = text "in the constraint" <> plural dicts <> colon
2480 mkMonomorphismMsg :: TidyEnv -> [TcTyVar] -> TcM (TidyEnv, Message)
2481 -- There's an error with these Insts; if they have free type variables
2482 -- it's probably caused by the monomorphism restriction.
2483 -- Try to identify the offending variable
2484 -- ASSUMPTION: the Insts are fully zonked
2485 mkMonomorphismMsg tidy_env inst_tvs
2486 = findGlobals (mkVarSet inst_tvs) tidy_env `thenM` \ (tidy_env, docs) ->
2487 returnM (tidy_env, mk_msg docs)
2489 mk_msg [] = ptext SLIT("Probable fix: add a type signature that fixes these type variable(s)")
2490 -- This happens in things like
2491 -- f x = show (read "foo")
2492 -- whre monomorphism doesn't play any role
2493 mk_msg docs = vcat [ptext SLIT("Possible cause: the monomorphism restriction applied to the following:"),
2497 monomorphism_fix :: SDoc
2498 monomorphism_fix = ptext SLIT("Probable fix:") <+>
2499 (ptext SLIT("give these definition(s) an explicit type signature")
2500 $$ ptext SLIT("or use -fno-monomorphism-restriction"))
2502 warnDefault dicts default_ty
2503 = doptM Opt_WarnTypeDefaults `thenM` \ warn_flag ->
2504 addInstCtxt (instLoc (head dicts)) (warnTc warn_flag warn_msg)
2507 (_, tidy_dicts) = tidyInsts dicts
2508 warn_msg = vcat [ptext SLIT("Defaulting the following constraint(s) to type") <+>
2509 quotes (ppr default_ty),
2510 pprDictsInFull tidy_dicts]
2512 -- Used for the ...Thetas variants; all top level
2514 = vcat [ptext SLIT("Can't derive instances where the instance context mentions"),
2515 ptext SLIT("type variables that are not data type parameters"),
2516 nest 2 (ptext SLIT("Offending constraint:") <+> ppr pred)]
2518 reduceDepthErr n stack
2519 = vcat [ptext SLIT("Context reduction stack overflow; size =") <+> int n,
2520 ptext SLIT("Use -fcontext-stack20 to increase stack size to (e.g.) 20"),
2521 nest 4 (pprStack stack)]
2523 pprStack stack = vcat (map pprInstInFull stack)