2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
10 tcSimplifyInfer, tcSimplifyInferCheck,
11 tcSimplifyCheck, tcSimplifyRestricted,
12 tcSimplifyRuleLhs, tcSimplifyIPs,
13 tcSimplifySuperClasses,
14 tcSimplifyTop, tcSimplifyInteractive,
17 tcSimplifyDeriv, tcSimplifyDefault,
21 #include "HsVersions.h"
23 import {-# SOURCE #-} TcUnify( unifyType )
60 %************************************************************************
64 %************************************************************************
66 --------------------------------------
67 Notes on functional dependencies (a bug)
68 --------------------------------------
75 instance D a b => C a b -- Undecidable
76 -- (Not sure if it's crucial to this eg)
77 f :: C a b => a -> Bool
80 g :: C a b => a -> Bool
83 Here f typechecks, but g does not!! Reason: before doing improvement,
84 we reduce the (C a b1) constraint from the call of f to (D a b1).
86 Here is a more complicated example:
88 | > class Foo a b | a->b
90 | > class Bar a b | a->b
94 | > instance Bar Obj Obj
96 | > instance (Bar a b) => Foo a b
98 | > foo:: (Foo a b) => a -> String
101 | > runFoo:: (forall a b. (Foo a b) => a -> w) -> w
107 | Could not deduce (Bar a b) from the context (Foo a b)
108 | arising from use of `foo' at <interactive>:1
110 | Add (Bar a b) to the expected type of an expression
111 | In the first argument of `runFoo', namely `foo'
112 | In the definition of `it': it = runFoo foo
114 | Why all of the sudden does GHC need the constraint Bar a b? The
115 | function foo didn't ask for that...
117 The trouble is that to type (runFoo foo), GHC has to solve the problem:
119 Given constraint Foo a b
120 Solve constraint Foo a b'
122 Notice that b and b' aren't the same. To solve this, just do
123 improvement and then they are the same. But GHC currently does
128 That is usually fine, but it isn't here, because it sees that Foo a b is
129 not the same as Foo a b', and so instead applies the instance decl for
130 instance Bar a b => Foo a b. And that's where the Bar constraint comes
133 The Right Thing is to improve whenever the constraint set changes at
134 all. Not hard in principle, but it'll take a bit of fiddling to do.
138 --------------------------------------
139 Notes on quantification
140 --------------------------------------
142 Suppose we are about to do a generalisation step.
146 T the type of the RHS
147 C the constraints from that RHS
149 The game is to figure out
151 Q the set of type variables over which to quantify
152 Ct the constraints we will *not* quantify over
153 Cq the constraints we will quantify over
155 So we're going to infer the type
159 and float the constraints Ct further outwards.
161 Here are the things that *must* be true:
163 (A) Q intersect fv(G) = EMPTY limits how big Q can be
164 (B) Q superset fv(Cq union T) \ oclose(fv(G),C) limits how small Q can be
166 (A) says we can't quantify over a variable that's free in the
167 environment. (B) says we must quantify over all the truly free
168 variables in T, else we won't get a sufficiently general type. We do
169 not *need* to quantify over any variable that is fixed by the free
170 vars of the environment G.
172 BETWEEN THESE TWO BOUNDS, ANY Q WILL DO!
174 Example: class H x y | x->y where ...
176 fv(G) = {a} C = {H a b, H c d}
179 (A) Q intersect {a} is empty
180 (B) Q superset {a,b,c,d} \ oclose({a}, C) = {a,b,c,d} \ {a,b} = {c,d}
182 So Q can be {c,d}, {b,c,d}
184 Other things being equal, however, we'd like to quantify over as few
185 variables as possible: smaller types, fewer type applications, more
186 constraints can get into Ct instead of Cq.
189 -----------------------------------------
192 fv(T) the free type vars of T
194 oclose(vs,C) The result of extending the set of tyvars vs
195 using the functional dependencies from C
197 grow(vs,C) The result of extend the set of tyvars vs
198 using all conceivable links from C.
200 E.g. vs = {a}, C = {H [a] b, K (b,Int) c, Eq e}
201 Then grow(vs,C) = {a,b,c}
203 Note that grow(vs,C) `superset` grow(vs,simplify(C))
204 That is, simplfication can only shrink the result of grow.
207 oclose is conservative one way: v `elem` oclose(vs,C) => v is definitely fixed by vs
208 grow is conservative the other way: if v might be fixed by vs => v `elem` grow(vs,C)
211 -----------------------------------------
215 Here's a good way to choose Q:
217 Q = grow( fv(T), C ) \ oclose( fv(G), C )
219 That is, quantify over all variable that that MIGHT be fixed by the
220 call site (which influences T), but which aren't DEFINITELY fixed by
221 G. This choice definitely quantifies over enough type variables,
222 albeit perhaps too many.
224 Why grow( fv(T), C ) rather than fv(T)? Consider
226 class H x y | x->y where ...
231 If we used fv(T) = {c} we'd get the type
233 forall c. H c d => c -> b
235 And then if the fn was called at several different c's, each of
236 which fixed d differently, we'd get a unification error, because
237 d isn't quantified. Solution: quantify d. So we must quantify
238 everything that might be influenced by c.
240 Why not oclose( fv(T), C )? Because we might not be able to see
241 all the functional dependencies yet:
243 class H x y | x->y where ...
244 instance H x y => Eq (T x y) where ...
249 Now oclose(fv(T),C) = {c}, because the functional dependency isn't
250 apparent yet, and that's wrong. We must really quantify over d too.
253 There really isn't any point in quantifying over any more than
254 grow( fv(T), C ), because the call sites can't possibly influence
255 any other type variables.
259 -------------------------------------
261 -------------------------------------
263 It's very hard to be certain when a type is ambiguous. Consider
267 instance H x y => K (x,y)
269 Is this type ambiguous?
270 forall a b. (K (a,b), Eq b) => a -> a
272 Looks like it! But if we simplify (K (a,b)) we get (H a b) and
273 now we see that a fixes b. So we can't tell about ambiguity for sure
274 without doing a full simplification. And even that isn't possible if
275 the context has some free vars that may get unified. Urgle!
277 Here's another example: is this ambiguous?
278 forall a b. Eq (T b) => a -> a
279 Not if there's an insance decl (with no context)
280 instance Eq (T b) where ...
282 You may say of this example that we should use the instance decl right
283 away, but you can't always do that:
285 class J a b where ...
286 instance J Int b where ...
288 f :: forall a b. J a b => a -> a
290 (Notice: no functional dependency in J's class decl.)
291 Here f's type is perfectly fine, provided f is only called at Int.
292 It's premature to complain when meeting f's signature, or even
293 when inferring a type for f.
297 However, we don't *need* to report ambiguity right away. It'll always
298 show up at the call site.... and eventually at main, which needs special
299 treatment. Nevertheless, reporting ambiguity promptly is an excellent thing.
301 So here's the plan. We WARN about probable ambiguity if
303 fv(Cq) is not a subset of oclose(fv(T) union fv(G), C)
305 (all tested before quantification).
306 That is, all the type variables in Cq must be fixed by the the variables
307 in the environment, or by the variables in the type.
309 Notice that we union before calling oclose. Here's an example:
311 class J a b c | a b -> c
315 forall b c. (J a b c) => b -> b
317 Only if we union {a} from G with {b} from T before using oclose,
318 do we see that c is fixed.
320 It's a bit vague exactly which C we should use for this oclose call. If we
321 don't fix enough variables we might complain when we shouldn't (see
322 the above nasty example). Nothing will be perfect. That's why we can
323 only issue a warning.
326 Can we ever be *certain* about ambiguity? Yes: if there's a constraint
328 c in C such that fv(c) intersect (fv(G) union fv(T)) = EMPTY
330 then c is a "bubble"; there's no way it can ever improve, and it's
331 certainly ambiguous. UNLESS it is a constant (sigh). And what about
336 instance H x y => K (x,y)
338 Is this type ambiguous?
339 forall a b. (K (a,b), Eq b) => a -> a
341 Urk. The (Eq b) looks "definitely ambiguous" but it isn't. What we are after
342 is a "bubble" that's a set of constraints
344 Cq = Ca union Cq' st fv(Ca) intersect (fv(Cq') union fv(T) union fv(G)) = EMPTY
346 Hence another idea. To decide Q start with fv(T) and grow it
347 by transitive closure in Cq (no functional dependencies involved).
348 Now partition Cq using Q, leaving the definitely-ambiguous and probably-ok.
349 The definitely-ambiguous can then float out, and get smashed at top level
350 (which squashes out the constants, like Eq (T a) above)
353 --------------------------------------
354 Notes on principal types
355 --------------------------------------
360 f x = let g y = op (y::Int) in True
362 Here the principal type of f is (forall a. a->a)
363 but we'll produce the non-principal type
364 f :: forall a. C Int => a -> a
367 --------------------------------------
368 The need for forall's in constraints
369 --------------------------------------
371 [Exchange on Haskell Cafe 5/6 Dec 2000]
373 class C t where op :: t -> Bool
374 instance C [t] where op x = True
376 p y = (let f :: c -> Bool; f x = op (y >> return x) in f, y ++ [])
377 q y = (y ++ [], let f :: c -> Bool; f x = op (y >> return x) in f)
379 The definitions of p and q differ only in the order of the components in
380 the pair on their right-hand sides. And yet:
382 ghc and "Typing Haskell in Haskell" reject p, but accept q;
383 Hugs rejects q, but accepts p;
384 hbc rejects both p and q;
385 nhc98 ... (Malcolm, can you fill in the blank for us!).
387 The type signature for f forces context reduction to take place, and
388 the results of this depend on whether or not the type of y is known,
389 which in turn depends on which component of the pair the type checker
392 Solution: if y::m a, float out the constraints
393 Monad m, forall c. C (m c)
394 When m is later unified with [], we can solve both constraints.
397 --------------------------------------
398 Notes on implicit parameters
399 --------------------------------------
401 Question 1: can we "inherit" implicit parameters
402 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
407 where f is *not* a top-level binding.
408 From the RHS of f we'll get the constraint (?y::Int).
409 There are two types we might infer for f:
413 (so we get ?y from the context of f's definition), or
415 f :: (?y::Int) => Int -> Int
417 At first you might think the first was better, becuase then
418 ?y behaves like a free variable of the definition, rather than
419 having to be passed at each call site. But of course, the WHOLE
420 IDEA is that ?y should be passed at each call site (that's what
421 dynamic binding means) so we'd better infer the second.
423 BOTTOM LINE: when *inferring types* you *must* quantify
424 over implicit parameters. See the predicate isFreeWhenInferring.
427 Question 2: type signatures
428 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
429 BUT WATCH OUT: When you supply a type signature, we can't force you
430 to quantify over implicit parameters. For example:
434 This is perfectly reasonable. We do not want to insist on
436 (?x + 1) :: (?x::Int => Int)
438 That would be silly. Here, the definition site *is* the occurrence site,
439 so the above strictures don't apply. Hence the difference between
440 tcSimplifyCheck (which *does* allow implicit paramters to be inherited)
441 and tcSimplifyCheckBind (which does not).
443 What about when you supply a type signature for a binding?
444 Is it legal to give the following explicit, user type
445 signature to f, thus:
450 At first sight this seems reasonable, but it has the nasty property
451 that adding a type signature changes the dynamic semantics.
454 (let f x = (x::Int) + ?y
455 in (f 3, f 3 with ?y=5)) with ?y = 6
461 in (f 3, f 3 with ?y=5)) with ?y = 6
465 Indeed, simply inlining f (at the Haskell source level) would change the
468 Nevertheless, as Launchbury says (email Oct 01) we can't really give the
469 semantics for a Haskell program without knowing its typing, so if you
470 change the typing you may change the semantics.
472 To make things consistent in all cases where we are *checking* against
473 a supplied signature (as opposed to inferring a type), we adopt the
476 a signature does not need to quantify over implicit params.
478 [This represents a (rather marginal) change of policy since GHC 5.02,
479 which *required* an explicit signature to quantify over all implicit
480 params for the reasons mentioned above.]
482 But that raises a new question. Consider
484 Given (signature) ?x::Int
485 Wanted (inferred) ?x::Int, ?y::Bool
487 Clearly we want to discharge the ?x and float the ?y out. But
488 what is the criterion that distinguishes them? Clearly it isn't
489 what free type variables they have. The Right Thing seems to be
490 to float a constraint that
491 neither mentions any of the quantified type variables
492 nor any of the quantified implicit parameters
494 See the predicate isFreeWhenChecking.
497 Question 3: monomorphism
498 ~~~~~~~~~~~~~~~~~~~~~~~~
499 There's a nasty corner case when the monomorphism restriction bites:
503 The argument above suggests that we *must* generalise
504 over the ?y parameter, to get
505 z :: (?y::Int) => Int,
506 but the monomorphism restriction says that we *must not*, giving
508 Why does the momomorphism restriction say this? Because if you have
510 let z = x + ?y in z+z
512 you might not expect the addition to be done twice --- but it will if
513 we follow the argument of Question 2 and generalise over ?y.
516 Question 4: top level
517 ~~~~~~~~~~~~~~~~~~~~~
518 At the top level, monomorhism makes no sense at all.
521 main = let ?x = 5 in print foo
525 woggle :: (?x :: Int) => Int -> Int
528 We definitely don't want (foo :: Int) with a top-level implicit parameter
529 (?x::Int) becuase there is no way to bind it.
534 (A) Always generalise over implicit parameters
535 Bindings that fall under the monomorphism restriction can't
539 * Inlining remains valid
540 * No unexpected loss of sharing
541 * But simple bindings like
543 will be rejected, unless you add an explicit type signature
544 (to avoid the monomorphism restriction)
545 z :: (?y::Int) => Int
547 This seems unacceptable
549 (B) Monomorphism restriction "wins"
550 Bindings that fall under the monomorphism restriction can't
552 Always generalise over implicit parameters *except* for bindings
553 that fall under the monomorphism restriction
556 * Inlining isn't valid in general
557 * No unexpected loss of sharing
558 * Simple bindings like
560 accepted (get value of ?y from binding site)
562 (C) Always generalise over implicit parameters
563 Bindings that fall under the monomorphism restriction can't
564 be generalised, EXCEPT for implicit parameters
566 * Inlining remains valid
567 * Unexpected loss of sharing (from the extra generalisation)
568 * Simple bindings like
570 accepted (get value of ?y from occurrence sites)
575 None of these choices seems very satisfactory. But at least we should
576 decide which we want to do.
578 It's really not clear what is the Right Thing To Do. If you see
582 would you expect the value of ?y to be got from the *occurrence sites*
583 of 'z', or from the valuue of ?y at the *definition* of 'z'? In the
584 case of function definitions, the answer is clearly the former, but
585 less so in the case of non-fucntion definitions. On the other hand,
586 if we say that we get the value of ?y from the definition site of 'z',
587 then inlining 'z' might change the semantics of the program.
589 Choice (C) really says "the monomorphism restriction doesn't apply
590 to implicit parameters". Which is fine, but remember that every
591 innocent binding 'x = ...' that mentions an implicit parameter in
592 the RHS becomes a *function* of that parameter, called at each
593 use of 'x'. Now, the chances are that there are no intervening 'with'
594 clauses that bind ?y, so a decent compiler should common up all
595 those function calls. So I think I strongly favour (C). Indeed,
596 one could make a similar argument for abolishing the monomorphism
597 restriction altogether.
599 BOTTOM LINE: we choose (B) at present. See tcSimplifyRestricted
603 %************************************************************************
605 \subsection{tcSimplifyInfer}
607 %************************************************************************
609 tcSimplify is called when we *inferring* a type. Here's the overall game plan:
611 1. Compute Q = grow( fvs(T), C )
613 2. Partition C based on Q into Ct and Cq. Notice that ambiguous
614 predicates will end up in Ct; we deal with them at the top level
616 3. Try improvement, using functional dependencies
618 4. If Step 3 did any unification, repeat from step 1
619 (Unification can change the result of 'grow'.)
621 Note: we don't reduce dictionaries in step 2. For example, if we have
622 Eq (a,b), we don't simplify to (Eq a, Eq b). So Q won't be different
623 after step 2. However note that we may therefore quantify over more
624 type variables than we absolutely have to.
626 For the guts, we need a loop, that alternates context reduction and
627 improvement with unification. E.g. Suppose we have
629 class C x y | x->y where ...
631 and tcSimplify is called with:
633 Then improvement unifies a with b, giving
636 If we need to unify anything, we rattle round the whole thing all over
643 -> TcTyVarSet -- fv(T); type vars
645 -> TcM ([TcTyVar], -- Tyvars to quantify (zonked)
646 TcDictBinds, -- Bindings
647 [TcId]) -- Dict Ids that must be bound here (zonked)
648 -- Any free (escaping) Insts are tossed into the environment
653 tcSimplifyInfer doc tau_tvs wanted_lie
654 = inferLoop doc (varSetElems tau_tvs)
655 wanted_lie `thenM` \ (qtvs, frees, binds, irreds) ->
657 extendLIEs frees `thenM_`
658 returnM (qtvs, binds, map instToId irreds)
660 inferLoop doc tau_tvs wanteds
662 zonkTcTyVarsAndFV tau_tvs `thenM` \ tau_tvs' ->
663 mappM zonkInst wanteds `thenM` \ wanteds' ->
664 tcGetGlobalTyVars `thenM` \ gbl_tvs ->
666 preds = fdPredsOfInsts wanteds'
667 qtvs = grow preds tau_tvs' `minusVarSet` oclose preds gbl_tvs
670 | isFreeWhenInferring qtvs inst = Free
671 | isClassDict inst = DontReduceUnlessConstant -- Dicts
672 | otherwise = ReduceMe NoSCs -- Lits and Methods
674 traceTc (text "infloop" <+> vcat [ppr tau_tvs', ppr wanteds', ppr preds,
675 ppr (grow preds tau_tvs'), ppr qtvs]) `thenM_`
677 reduceContext doc try_me [] wanteds' `thenM` \ (no_improvement, frees, binds, irreds) ->
680 if no_improvement then
681 returnM (varSetElems qtvs, frees, binds, irreds)
683 -- If improvement did some unification, we go round again. There
684 -- are two subtleties:
685 -- a) We start again with irreds, not wanteds
686 -- Using an instance decl might have introduced a fresh type variable
687 -- which might have been unified, so we'd get an infinite loop
688 -- if we started again with wanteds! See example [LOOP]
690 -- b) It's also essential to re-process frees, because unification
691 -- might mean that a type variable that looked free isn't now.
693 -- Hence the (irreds ++ frees)
695 -- However, NOTICE that when we are done, we might have some bindings, but
696 -- the final qtvs might be empty. See [NO TYVARS] below.
698 inferLoop doc tau_tvs (irreds ++ frees) `thenM` \ (qtvs1, frees1, binds1, irreds1) ->
699 returnM (qtvs1, frees1, binds `unionBags` binds1, irreds1)
704 class If b t e r | b t e -> r
707 class Lte a b c | a b -> c where lte :: a -> b -> c
709 instance (Lte a b l,If l b a c) => Max a b c
711 Wanted: Max Z (S x) y
713 Then we'll reduce using the Max instance to:
714 (Lte Z (S x) l, If l (S x) Z y)
715 and improve by binding l->T, after which we can do some reduction
716 on both the Lte and If constraints. What we *can't* do is start again
717 with (Max Z (S x) y)!
721 class Y a b | a -> b where
724 instance Y [[a]] a where
727 k :: X a -> X a -> X a
729 g :: Num a => [X a] -> [X a]
732 h ys = ys ++ map (k (y [[0]])) xs
734 The excitement comes when simplifying the bindings for h. Initially
735 try to simplify {y @ [[t1]] t2, 0 @ t1}, with initial qtvs = {t2}.
736 From this we get t1:=:t2, but also various bindings. We can't forget
737 the bindings (because of [LOOP]), but in fact t1 is what g is
740 The net effect of [NO TYVARS]
743 isFreeWhenInferring :: TyVarSet -> Inst -> Bool
744 isFreeWhenInferring qtvs inst
745 = isFreeWrtTyVars qtvs inst -- Constrains no quantified vars
746 && isInheritableInst inst -- And no implicit parameter involved
747 -- (see "Notes on implicit parameters")
749 isFreeWhenChecking :: TyVarSet -- Quantified tyvars
750 -> NameSet -- Quantified implicit parameters
752 isFreeWhenChecking qtvs ips inst
753 = isFreeWrtTyVars qtvs inst
754 && isFreeWrtIPs ips inst
756 isFreeWrtTyVars qtvs inst = tyVarsOfInst inst `disjointVarSet` qtvs
757 isFreeWrtIPs ips inst = not (any (`elemNameSet` ips) (ipNamesOfInst inst))
761 %************************************************************************
763 \subsection{tcSimplifyCheck}
765 %************************************************************************
767 @tcSimplifyCheck@ is used when we know exactly the set of variables
768 we are going to quantify over. For example, a class or instance declaration.
773 -> [TcTyVar] -- Quantify over these
776 -> TcM TcDictBinds -- Bindings
778 -- tcSimplifyCheck is used when checking expression type signatures,
779 -- class decls, instance decls etc.
781 -- NB: tcSimplifyCheck does not consult the
782 -- global type variables in the environment; so you don't
783 -- need to worry about setting them before calling tcSimplifyCheck
784 tcSimplifyCheck doc qtvs givens wanted_lie
785 = ASSERT( all isSkolemTyVar qtvs )
786 do { (qtvs', frees, binds) <- tcSimplCheck doc get_qtvs AddSCs givens wanted_lie
790 -- get_qtvs = zonkTcTyVarsAndFV qtvs
791 get_qtvs = return (mkVarSet qtvs) -- All skolems
794 -- tcSimplifyInferCheck is used when we know the constraints we are to simplify
795 -- against, but we don't know the type variables over which we are going to quantify.
796 -- This happens when we have a type signature for a mutually recursive group
799 -> TcTyVarSet -- fv(T)
802 -> TcM ([TcTyVar], -- Variables over which to quantify
803 TcDictBinds) -- Bindings
805 tcSimplifyInferCheck doc tau_tvs givens wanted_lie
806 = do { (qtvs', frees, binds) <- tcSimplCheck doc get_qtvs AddSCs givens wanted_lie
808 ; return (qtvs', binds) }
810 -- Figure out which type variables to quantify over
811 -- You might think it should just be the signature tyvars,
812 -- but in bizarre cases you can get extra ones
813 -- f :: forall a. Num a => a -> a
814 -- f x = fst (g (x, head [])) + 1
816 -- Here we infer g :: forall a b. a -> b -> (b,a)
817 -- We don't want g to be monomorphic in b just because
818 -- f isn't quantified over b.
819 all_tvs = varSetElems (tau_tvs `unionVarSet` tyVarsOfInsts givens)
821 get_qtvs = zonkTcTyVarsAndFV all_tvs `thenM` \ all_tvs' ->
822 tcGetGlobalTyVars `thenM` \ gbl_tvs ->
824 qtvs = all_tvs' `minusVarSet` gbl_tvs
825 -- We could close gbl_tvs, but its not necessary for
826 -- soundness, and it'll only affect which tyvars, not which
827 -- dictionaries, we quantify over
832 Here is the workhorse function for all three wrappers.
835 tcSimplCheck doc get_qtvs want_scs givens wanted_lie
836 = do { (qtvs, frees, binds, irreds) <- check_loop givens wanted_lie
838 -- Complain about any irreducible ones
839 ; if not (null irreds)
840 then do { givens' <- mappM zonkInst given_dicts_and_ips
841 ; groupErrs (addNoInstanceErrs (Just doc) givens') irreds }
844 ; returnM (qtvs, frees, binds) }
846 given_dicts_and_ips = filter (not . isMethod) givens
847 -- For error reporting, filter out methods, which are
848 -- only added to the given set as an optimisation
850 ip_set = mkNameSet (ipNamesOfInsts givens)
852 check_loop givens wanteds
854 mappM zonkInst givens `thenM` \ givens' ->
855 mappM zonkInst wanteds `thenM` \ wanteds' ->
856 get_qtvs `thenM` \ qtvs' ->
860 -- When checking against a given signature we always reduce
861 -- until we find a match against something given, or can't reduce
862 try_me inst | isFreeWhenChecking qtvs' ip_set inst = Free
863 | otherwise = ReduceMe want_scs
865 reduceContext doc try_me givens' wanteds' `thenM` \ (no_improvement, frees, binds, irreds) ->
868 if no_improvement then
869 returnM (varSetElems qtvs', frees, binds, irreds)
871 check_loop givens' (irreds ++ frees) `thenM` \ (qtvs', frees1, binds1, irreds1) ->
872 returnM (qtvs', frees1, binds `unionBags` binds1, irreds1)
876 %************************************************************************
878 tcSimplifySuperClasses
880 %************************************************************************
882 Note [SUPERCLASS-LOOP 1]
883 ~~~~~~~~~~~~~~~~~~~~~~~~
884 We have to be very, very careful when generating superclasses, lest we
885 accidentally build a loop. Here's an example:
889 class S a => C a where { opc :: a -> a }
890 class S b => D b where { opd :: b -> b }
898 From (instance C Int) we get the constraint set {ds1:S Int, dd:D Int}
899 Simplifying, we may well get:
900 $dfCInt = :C ds1 (opd dd)
903 Notice that we spot that we can extract ds1 from dd.
905 Alas! Alack! We can do the same for (instance D Int):
907 $dfDInt = :D ds2 (opc dc)
911 And now we've defined the superclass in terms of itself.
913 Solution: never generate a superclass selectors at all when
914 satisfying the superclass context of an instance declaration.
916 Two more nasty cases are in
921 tcSimplifySuperClasses qtvs givens sc_wanteds
922 = ASSERT( all isSkolemTyVar qtvs )
923 do { (_, frees, binds1) <- tcSimplCheck doc get_qtvs NoSCs givens sc_wanteds
924 ; ext_default <- doptM Opt_ExtendedDefaultRules
925 ; binds2 <- tc_simplify_top doc ext_default NoSCs frees
926 ; return (binds1 `unionBags` binds2) }
928 get_qtvs = return (mkVarSet qtvs)
929 doc = ptext SLIT("instance declaration superclass context")
933 %************************************************************************
935 \subsection{tcSimplifyRestricted}
937 %************************************************************************
939 tcSimplifyRestricted infers which type variables to quantify for a
940 group of restricted bindings. This isn't trivial.
943 We want to quantify over a to get id :: forall a. a->a
946 We do not want to quantify over a, because there's an Eq a
947 constraint, so we get eq :: a->a->Bool (notice no forall)
950 RHS has type 'tau', whose free tyvars are tau_tvs
951 RHS has constraints 'wanteds'
954 Quantify over (tau_tvs \ ftvs(wanteds))
955 This is bad. The constraints may contain (Monad (ST s))
956 where we have instance Monad (ST s) where...
957 so there's no need to be monomorphic in s!
959 Also the constraint might be a method constraint,
960 whose type mentions a perfectly innocent tyvar:
961 op :: Num a => a -> b -> a
962 Here, b is unconstrained. A good example would be
964 We want to infer the polymorphic type
965 foo :: forall b. b -> b
968 Plan B (cunning, used for a long time up to and including GHC 6.2)
969 Step 1: Simplify the constraints as much as possible (to deal
970 with Plan A's problem). Then set
971 qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
973 Step 2: Now simplify again, treating the constraint as 'free' if
974 it does not mention qtvs, and trying to reduce it otherwise.
975 The reasons for this is to maximise sharing.
977 This fails for a very subtle reason. Suppose that in the Step 2
978 a constraint (Foo (Succ Zero) (Succ Zero) b) gets thrown upstairs as 'free'.
979 In the Step 1 this constraint might have been simplified, perhaps to
980 (Foo Zero Zero b), AND THEN THAT MIGHT BE IMPROVED, to bind 'b' to 'T'.
981 This won't happen in Step 2... but that in turn might prevent some other
982 constraint (Baz [a] b) being simplified (e.g. via instance Baz [a] T where {..})
983 and that in turn breaks the invariant that no constraints are quantified over.
985 Test typecheck/should_compile/tc177 (which failed in GHC 6.2) demonstrates
990 Step 1: Simplify the constraints as much as possible (to deal
991 with Plan A's problem). Then set
992 qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
993 Return the bindings from Step 1.
996 A note about Plan C (arising from "bug" reported by George Russel March 2004)
999 instance (HasBinary ty IO) => HasCodedValue ty
1001 foo :: HasCodedValue a => String -> IO a
1003 doDecodeIO :: HasCodedValue a => () -> () -> IO a
1004 doDecodeIO codedValue view
1005 = let { act = foo "foo" } in act
1007 You might think this should work becuase the call to foo gives rise to a constraint
1008 (HasCodedValue t), which can be satisfied by the type sig for doDecodeIO. But the
1009 restricted binding act = ... calls tcSimplifyRestricted, and PlanC simplifies the
1010 constraint using the (rather bogus) instance declaration, and now we are stuffed.
1012 I claim this is not really a bug -- but it bit Sergey as well as George. So here's
1016 Plan D (a variant of plan B)
1017 Step 1: Simplify the constraints as much as possible (to deal
1018 with Plan A's problem), BUT DO NO IMPROVEMENT. Then set
1019 qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
1021 Step 2: Now simplify again, treating the constraint as 'free' if
1022 it does not mention qtvs, and trying to reduce it otherwise.
1024 The point here is that it's generally OK to have too few qtvs; that is,
1025 to make the thing more monomorphic than it could be. We don't want to
1026 do that in the common cases, but in wierd cases it's ok: the programmer
1027 can always add a signature.
1029 Too few qtvs => too many wanteds, which is what happens if you do less
1034 tcSimplifyRestricted -- Used for restricted binding groups
1035 -- i.e. ones subject to the monomorphism restriction
1038 -> [Name] -- Things bound in this group
1039 -> TcTyVarSet -- Free in the type of the RHSs
1040 -> [Inst] -- Free in the RHSs
1041 -> TcM ([TcTyVar], -- Tyvars to quantify (zonked)
1042 TcDictBinds) -- Bindings
1043 -- tcSimpifyRestricted returns no constraints to
1044 -- quantify over; by definition there are none.
1045 -- They are all thrown back in the LIE
1047 tcSimplifyRestricted doc top_lvl bndrs tau_tvs wanteds
1048 -- Zonk everything in sight
1049 = mappM zonkInst wanteds `thenM` \ wanteds' ->
1051 -- 'reduceMe': Reduce as far as we can. Don't stop at
1052 -- dicts; the idea is to get rid of as many type
1053 -- variables as possible, and we don't want to stop
1054 -- at (say) Monad (ST s), because that reduces
1055 -- immediately, with no constraint on s.
1057 -- BUT do no improvement! See Plan D above
1058 -- HOWEVER, some unification may take place, if we instantiate
1059 -- a method Inst with an equality constraint
1060 reduceContextWithoutImprovement
1061 doc reduceMe wanteds' `thenM` \ (_frees, _binds, constrained_dicts) ->
1063 -- Next, figure out the tyvars we will quantify over
1064 zonkTcTyVarsAndFV (varSetElems tau_tvs) `thenM` \ tau_tvs' ->
1065 tcGetGlobalTyVars `thenM` \ gbl_tvs' ->
1066 mappM zonkInst constrained_dicts `thenM` \ constrained_dicts' ->
1068 constrained_tvs' = tyVarsOfInsts constrained_dicts'
1069 qtvs' = (tau_tvs' `minusVarSet` oclose (fdPredsOfInsts constrained_dicts) gbl_tvs')
1070 `minusVarSet` constrained_tvs'
1072 traceTc (text "tcSimplifyRestricted" <+> vcat [
1073 pprInsts wanteds, pprInsts _frees, pprInsts constrained_dicts',
1075 ppr constrained_tvs', ppr tau_tvs', ppr qtvs' ]) `thenM_`
1077 -- The first step may have squashed more methods than
1078 -- necessary, so try again, this time more gently, knowing the exact
1079 -- set of type variables to quantify over.
1081 -- We quantify only over constraints that are captured by qtvs';
1082 -- these will just be a subset of non-dicts. This in contrast
1083 -- to normal inference (using isFreeWhenInferring) in which we quantify over
1084 -- all *non-inheritable* constraints too. This implements choice
1085 -- (B) under "implicit parameter and monomorphism" above.
1087 -- Remember that we may need to do *some* simplification, to
1088 -- (for example) squash {Monad (ST s)} into {}. It's not enough
1089 -- just to float all constraints
1091 -- At top level, we *do* squash methods becuase we want to
1092 -- expose implicit parameters to the test that follows
1094 is_nested_group = isNotTopLevel top_lvl
1095 try_me inst | isFreeWrtTyVars qtvs' inst,
1096 (is_nested_group || isDict inst) = Free
1097 | otherwise = ReduceMe AddSCs
1099 reduceContextWithoutImprovement
1100 doc try_me wanteds' `thenM` \ (frees, binds, irreds) ->
1101 ASSERT( null irreds )
1103 -- See "Notes on implicit parameters, Question 4: top level"
1104 if is_nested_group then
1105 extendLIEs frees `thenM_`
1106 returnM (varSetElems qtvs', binds)
1109 (non_ips, bad_ips) = partition isClassDict frees
1111 addTopIPErrs bndrs bad_ips `thenM_`
1112 extendLIEs non_ips `thenM_`
1113 returnM (varSetElems qtvs', binds)
1117 %************************************************************************
1121 %************************************************************************
1123 On the LHS of transformation rules we only simplify methods and constants,
1124 getting dictionaries. We want to keep all of them unsimplified, to serve
1125 as the available stuff for the RHS of the rule.
1127 Example. Consider the following left-hand side of a rule
1129 f (x == y) (y > z) = ...
1131 If we typecheck this expression we get constraints
1133 d1 :: Ord a, d2 :: Eq a
1135 We do NOT want to "simplify" to the LHS
1137 forall x::a, y::a, z::a, d1::Ord a.
1138 f ((==) (eqFromOrd d1) x y) ((>) d1 y z) = ...
1142 forall x::a, y::a, z::a, d1::Ord a, d2::Eq a.
1143 f ((==) d2 x y) ((>) d1 y z) = ...
1145 Here is another example:
1147 fromIntegral :: (Integral a, Num b) => a -> b
1148 {-# RULES "foo" fromIntegral = id :: Int -> Int #-}
1150 In the rule, a=b=Int, and Num Int is a superclass of Integral Int. But
1151 we *dont* want to get
1153 forall dIntegralInt.
1154 fromIntegral Int Int dIntegralInt (scsel dIntegralInt) = id Int
1156 because the scsel will mess up RULE matching. Instead we want
1158 forall dIntegralInt, dNumInt.
1159 fromIntegral Int Int dIntegralInt dNumInt = id Int
1163 g (x == y) (y == z) = ..
1165 where the two dictionaries are *identical*, we do NOT WANT
1167 forall x::a, y::a, z::a, d1::Eq a
1168 f ((==) d1 x y) ((>) d1 y z) = ...
1170 because that will only match if the dict args are (visibly) equal.
1171 Instead we want to quantify over the dictionaries separately.
1173 In short, tcSimplifyRuleLhs must *only* squash LitInst and MethInts, leaving
1174 all dicts unchanged, with absolutely no sharing. It's simpler to do this
1175 from scratch, rather than further parameterise simpleReduceLoop etc
1178 tcSimplifyRuleLhs :: [Inst] -> TcM ([Inst], TcDictBinds)
1179 tcSimplifyRuleLhs wanteds
1180 = go [] emptyBag wanteds
1183 = return (dicts, binds)
1184 go dicts binds (w:ws)
1186 = go (w:dicts) binds ws
1188 = do { w' <- zonkInst w -- So that (3::Int) does not generate a call
1189 -- to fromInteger; this looks fragile to me
1190 ; lookup_result <- lookupInst w'
1191 ; case lookup_result of
1192 GenInst ws' rhs -> go dicts (addBind binds w rhs) (ws' ++ ws)
1193 SimpleInst rhs -> go dicts (addBind binds w rhs) ws
1194 NoInstance -> pprPanic "tcSimplifyRuleLhs" (ppr w)
1198 tcSimplifyBracket is used when simplifying the constraints arising from
1199 a Template Haskell bracket [| ... |]. We want to check that there aren't
1200 any constraints that can't be satisfied (e.g. Show Foo, where Foo has no
1201 Show instance), but we aren't otherwise interested in the results.
1202 Nor do we care about ambiguous dictionaries etc. We will type check
1203 this bracket again at its usage site.
1206 tcSimplifyBracket :: [Inst] -> TcM ()
1207 tcSimplifyBracket wanteds
1208 = simpleReduceLoop doc reduceMe wanteds `thenM_`
1211 doc = text "tcSimplifyBracket"
1215 %************************************************************************
1217 \subsection{Filtering at a dynamic binding}
1219 %************************************************************************
1224 we must discharge all the ?x constraints from B. We also do an improvement
1225 step; if we have ?x::t1 and ?x::t2 we must unify t1, t2.
1227 Actually, the constraints from B might improve the types in ?x. For example
1229 f :: (?x::Int) => Char -> Char
1232 then the constraint (?x::Int) arising from the call to f will
1233 force the binding for ?x to be of type Int.
1236 tcSimplifyIPs :: [Inst] -- The implicit parameters bound here
1239 tcSimplifyIPs given_ips wanteds
1240 = simpl_loop given_ips wanteds `thenM` \ (frees, binds) ->
1241 extendLIEs frees `thenM_`
1244 doc = text "tcSimplifyIPs" <+> ppr given_ips
1245 ip_set = mkNameSet (ipNamesOfInsts given_ips)
1247 -- Simplify any methods that mention the implicit parameter
1248 try_me inst | isFreeWrtIPs ip_set inst = Free
1249 | otherwise = ReduceMe NoSCs
1251 simpl_loop givens wanteds
1252 = mappM zonkInst givens `thenM` \ givens' ->
1253 mappM zonkInst wanteds `thenM` \ wanteds' ->
1255 reduceContext doc try_me givens' wanteds' `thenM` \ (no_improvement, frees, binds, irreds) ->
1257 if no_improvement then
1258 ASSERT( null irreds )
1259 returnM (frees, binds)
1261 simpl_loop givens' (irreds ++ frees) `thenM` \ (frees1, binds1) ->
1262 returnM (frees1, binds `unionBags` binds1)
1266 %************************************************************************
1268 \subsection[binds-for-local-funs]{@bindInstsOfLocalFuns@}
1270 %************************************************************************
1272 When doing a binding group, we may have @Insts@ of local functions.
1273 For example, we might have...
1275 let f x = x + 1 -- orig local function (overloaded)
1276 f.1 = f Int -- two instances of f
1281 The point is: we must drop the bindings for @f.1@ and @f.2@ here,
1282 where @f@ is in scope; those @Insts@ must certainly not be passed
1283 upwards towards the top-level. If the @Insts@ were binding-ified up
1284 there, they would have unresolvable references to @f@.
1286 We pass in an @init_lie@ of @Insts@ and a list of locally-bound @Ids@.
1287 For each method @Inst@ in the @init_lie@ that mentions one of the
1288 @Ids@, we create a binding. We return the remaining @Insts@ (in an
1289 @LIE@), as well as the @HsBinds@ generated.
1292 bindInstsOfLocalFuns :: [Inst] -> [TcId] -> TcM TcDictBinds
1293 -- Simlifies only MethodInsts, and generate only bindings of form
1295 -- We're careful not to even generate bindings of the form
1297 -- You'd think that'd be fine, but it interacts with what is
1298 -- arguably a bug in Match.tidyEqnInfo (see notes there)
1300 bindInstsOfLocalFuns wanteds local_ids
1301 | null overloaded_ids
1303 = extendLIEs wanteds `thenM_`
1304 returnM emptyLHsBinds
1307 = simpleReduceLoop doc try_me for_me `thenM` \ (frees, binds, irreds) ->
1308 ASSERT( null irreds )
1309 extendLIEs not_for_me `thenM_`
1310 extendLIEs frees `thenM_`
1313 doc = text "bindInsts" <+> ppr local_ids
1314 overloaded_ids = filter is_overloaded local_ids
1315 is_overloaded id = isOverloadedTy (idType id)
1316 (for_me, not_for_me) = partition (isMethodFor overloaded_set) wanteds
1318 overloaded_set = mkVarSet overloaded_ids -- There can occasionally be a lot of them
1319 -- so it's worth building a set, so that
1320 -- lookup (in isMethodFor) is faster
1321 try_me inst | isMethod inst = ReduceMe NoSCs
1326 %************************************************************************
1328 \subsection{Data types for the reduction mechanism}
1330 %************************************************************************
1332 The main control over context reduction is here
1336 = ReduceMe WantSCs -- Try to reduce this
1337 -- If there's no instance, behave exactly like
1338 -- DontReduce: add the inst to the irreductible ones,
1339 -- but don't produce an error message of any kind.
1340 -- It might be quite legitimate such as (Eq a)!
1342 | DontReduceUnlessConstant -- Return as irreducible unless it can
1343 -- be reduced to a constant in one step
1345 | Free -- Return as free
1347 reduceMe :: Inst -> WhatToDo
1348 reduceMe inst = ReduceMe AddSCs
1350 data WantSCs = NoSCs | AddSCs -- Tells whether we should add the superclasses
1351 -- of a predicate when adding it to the avails
1352 -- The reason for this flag is entirely the super-class loop problem
1353 -- Note [SUPER-CLASS LOOP 1]
1359 type Avails = FiniteMap Inst Avail
1360 emptyAvails = emptyFM
1363 = IsFree -- Used for free Insts
1364 | Irred -- Used for irreducible dictionaries,
1365 -- which are going to be lambda bound
1367 | Given TcId -- Used for dictionaries for which we have a binding
1368 -- e.g. those "given" in a signature
1370 | Rhs -- Used when there is a RHS
1371 (LHsExpr TcId) -- The RHS
1372 [Inst] -- Insts free in the RHS; we need these too
1374 pprAvails avails = vcat [sep [ppr inst, nest 2 (equals <+> pprAvail avail)]
1375 | (inst,avail) <- fmToList avails ]
1377 instance Outputable Avail where
1380 pprAvail IsFree = text "Free"
1381 pprAvail Irred = text "Irred"
1382 pprAvail (Given x) = text "Given" <+> ppr x
1383 pprAvail (Rhs rhs bs) = text "Rhs" <+> ppr rhs <+> braces (ppr bs)
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 add_given avails w = addToFM avails w (Given (instToId w))
1426 add_free avails w | isMethod w = avails
1427 | otherwise = add_given avails w
1429 -- Do *not* replace Free by Given if it's a method.
1430 -- The following situation shows why this is bad:
1431 -- truncate :: forall a. RealFrac a => forall b. Integral b => a -> b
1432 -- From an application (truncate f i) we get
1433 -- t1 = truncate at f
1435 -- If we have also have a second occurrence of truncate, we get
1436 -- t3 = truncate at f
1438 -- When simplifying with i,f free, we might still notice that
1439 -- t1=t3; but alas, the binding for t2 (which mentions t1)
1440 -- will continue to float out!
1442 addBind binds inst rhs = binds `unionBags` unitBag (L (instLocSrcSpan (instLoc inst))
1443 (VarBind (instToId inst) rhs))
1444 instSpan wanted = instLocSrcSpan (instLoc wanted)
1448 %************************************************************************
1450 \subsection[reduce]{@reduce@}
1452 %************************************************************************
1454 When the "what to do" predicate doesn't depend on the quantified type variables,
1455 matters are easier. We don't need to do any zonking, unless the improvement step
1456 does something, in which case we zonk before iterating.
1458 The "given" set is always empty.
1461 simpleReduceLoop :: SDoc
1462 -> (Inst -> WhatToDo) -- What to do, *not* based on the quantified type variables
1464 -> TcM ([Inst], -- Free
1466 [Inst]) -- Irreducible
1468 simpleReduceLoop doc try_me wanteds
1469 = mappM zonkInst wanteds `thenM` \ wanteds' ->
1470 reduceContext doc try_me [] wanteds' `thenM` \ (no_improvement, frees, binds, irreds) ->
1471 if no_improvement then
1472 returnM (frees, binds, irreds)
1474 simpleReduceLoop doc try_me (irreds ++ frees) `thenM` \ (frees1, binds1, irreds1) ->
1475 returnM (frees1, binds `unionBags` binds1, irreds1)
1481 reduceContext :: SDoc
1482 -> (Inst -> WhatToDo)
1485 -> TcM (Bool, -- True <=> improve step did no unification
1487 TcDictBinds, -- Dictionary bindings
1488 [Inst]) -- Irreducible
1490 reduceContext doc try_me givens wanteds
1492 traceTc (text "reduceContext" <+> (vcat [
1493 text "----------------------",
1495 text "given" <+> ppr givens,
1496 text "wanted" <+> ppr wanteds,
1497 text "----------------------"
1500 -- Build the Avail mapping from "givens"
1501 foldlM addGiven emptyAvails givens `thenM` \ init_state ->
1504 reduceList (0,[]) try_me wanteds init_state `thenM` \ avails ->
1506 -- Do improvement, using everything in avails
1507 -- In particular, avails includes all superclasses of everything
1508 tcImprove avails `thenM` \ no_improvement ->
1510 extractResults avails wanteds `thenM` \ (binds, irreds, frees) ->
1512 traceTc (text "reduceContext end" <+> (vcat [
1513 text "----------------------",
1515 text "given" <+> ppr givens,
1516 text "wanted" <+> ppr wanteds,
1518 text "avails" <+> pprAvails avails,
1519 text "frees" <+> ppr frees,
1520 text "no_improvement =" <+> ppr no_improvement,
1521 text "----------------------"
1524 returnM (no_improvement, frees, binds, irreds)
1526 -- reduceContextWithoutImprovement differs from reduceContext
1527 -- (a) no improvement
1528 -- (b) 'givens' is assumed empty
1529 reduceContextWithoutImprovement doc try_me wanteds
1531 traceTc (text "reduceContextWithoutImprovement" <+> (vcat [
1532 text "----------------------",
1534 text "wanted" <+> ppr wanteds,
1535 text "----------------------"
1539 reduceList (0,[]) try_me wanteds emptyAvails `thenM` \ avails ->
1540 extractResults avails wanteds `thenM` \ (binds, irreds, frees) ->
1542 traceTc (text "reduceContextWithoutImprovement end" <+> (vcat [
1543 text "----------------------",
1545 text "wanted" <+> ppr wanteds,
1547 text "avails" <+> pprAvails avails,
1548 text "frees" <+> ppr frees,
1549 text "----------------------"
1552 returnM (frees, binds, irreds)
1554 tcImprove :: Avails -> TcM Bool -- False <=> no change
1555 -- Perform improvement using all the predicates in Avails
1557 = tcGetInstEnvs `thenM` \ inst_envs ->
1559 preds = [ (pred, pp_loc)
1560 | (inst, avail) <- fmToList avails,
1561 pred <- get_preds inst avail,
1562 let pp_loc = pprInstLoc (instLoc inst)
1564 -- Avails has all the superclasses etc (good)
1565 -- It also has all the intermediates of the deduction (good)
1566 -- It does not have duplicates (good)
1567 -- NB that (?x::t1) and (?x::t2) will be held separately in avails
1568 -- so that improve will see them separate
1570 -- For free Methods, we want to take predicates from their context,
1571 -- but for Methods that have been squished their context will already
1572 -- be in Avails, and we don't want duplicates. Hence this rather
1573 -- horrid get_preds function
1574 get_preds inst IsFree = fdPredsOfInst inst
1575 get_preds inst other | isDict inst = [dictPred inst]
1578 eqns = improve get_insts preds
1579 get_insts clas = classInstances inst_envs clas
1584 traceTc (ptext SLIT("Improve:") <+> vcat (map pprEquationDoc eqns)) `thenM_`
1585 mappM_ unify eqns `thenM_`
1588 unify ((qtvs, pairs), what1, what2)
1589 = addErrCtxtM (mkEqnMsg what1 what2) $
1590 tcInstTyVars (varSetElems qtvs) `thenM` \ (_, _, tenv) ->
1591 mapM_ (unif_pr tenv) pairs
1592 unif_pr tenv (ty1,ty2) = unifyType (substTy tenv ty1) (substTy tenv ty2)
1594 pprEquationDoc (eqn, (p1,w1), (p2,w2)) = vcat [pprEquation eqn, nest 2 (ppr p1), nest 2 (ppr p2)]
1596 mkEqnMsg (pred1,from1) (pred2,from2) tidy_env
1597 = do { pred1' <- zonkTcPredType pred1; pred2' <- zonkTcPredType pred2
1598 ; let { pred1'' = tidyPred tidy_env pred1'; pred2'' = tidyPred tidy_env pred2' }
1599 ; let msg = vcat [ptext SLIT("When using functional dependencies to combine"),
1600 nest 2 (sep [ppr pred1'' <> comma, nest 2 from1]),
1601 nest 2 (sep [ppr pred2'' <> comma, nest 2 from2])]
1602 ; return (tidy_env, msg) }
1605 The main context-reduction function is @reduce@. Here's its game plan.
1608 reduceList :: (Int,[Inst]) -- Stack (for err msgs)
1609 -- along with its depth
1610 -> (Inst -> WhatToDo)
1617 try_me: given an inst, this function returns
1619 DontReduce return this in "irreds"
1620 Free return this in "frees"
1622 wanteds: The list of insts to reduce
1623 state: An accumulating parameter of type Avails
1624 that contains the state of the algorithm
1626 It returns a Avails.
1628 The (n,stack) pair is just used for error reporting.
1629 n is always the depth of the stack.
1630 The stack is the stack of Insts being reduced: to produce X
1631 I had to produce Y, to produce Y I had to produce Z, and so on.
1634 reduceList (n,stack) try_me wanteds state
1635 = do { dopts <- getDOpts
1638 dumpTcRn (text "Interesting! Context reduction stack deeper than 8:"
1639 <+> (int n $$ ifPprDebug (nest 2 (pprStack stack))))
1642 ; if n >= ctxtStkDepth dopts then
1643 failWithTc (reduceDepthErr n stack)
1647 go [] state = return state
1648 go (w:ws) state = do { state' <- reduce (n+1, w:stack) try_me w state
1651 -- Base case: we're done!
1652 reduce stack try_me wanted avails
1653 -- It's the same as an existing inst, or a superclass thereof
1654 | Just avail <- isAvailable avails wanted
1658 = case try_me wanted of {
1660 ; DontReduceUnlessConstant -> -- It's irreducible (or at least should not be reduced)
1661 -- First, see if the inst can be reduced to a constant in one step
1662 try_simple (addIrred AddSCs) -- Assume want superclasses
1664 ; Free -> -- It's free so just chuck it upstairs
1665 -- First, see if the inst can be reduced to a constant in one step
1668 ; ReduceMe want_scs -> -- It should be reduced
1669 lookupInst wanted `thenM` \ lookup_result ->
1670 case lookup_result of
1671 GenInst wanteds' rhs -> addIrred NoSCs avails wanted `thenM` \ avails1 ->
1672 reduceList stack try_me wanteds' avails1 `thenM` \ avails2 ->
1673 addWanted want_scs avails2 wanted rhs wanteds'
1674 -- Experiment with temporarily doing addIrred *before* the reduceList,
1675 -- which has the effect of adding the thing we are trying
1676 -- to prove to the database before trying to prove the things it
1677 -- needs. See note [RECURSIVE DICTIONARIES]
1678 -- NB: we must not do an addWanted before, because that adds the
1679 -- superclasses too, and thaat can lead to a spurious loop; see
1680 -- the examples in [SUPERCLASS-LOOP]
1681 -- So we do an addIrred before, and then overwrite it afterwards with addWanted
1683 SimpleInst rhs -> addWanted want_scs avails wanted rhs []
1685 NoInstance -> -- No such instance!
1686 -- Add it and its superclasses
1687 addIrred want_scs avails wanted
1690 try_simple do_this_otherwise
1691 = lookupInst wanted `thenM` \ lookup_result ->
1692 case lookup_result of
1693 SimpleInst rhs -> addWanted AddSCs avails wanted rhs []
1694 other -> do_this_otherwise avails wanted
1699 -------------------------
1700 isAvailable :: Avails -> Inst -> Maybe Avail
1701 isAvailable avails wanted = lookupFM avails wanted
1702 -- NB 1: the Ord instance of Inst compares by the class/type info
1703 -- *not* by unique. So
1704 -- d1::C Int == d2::C Int
1706 -------------------------
1707 addFree :: Avails -> Inst -> TcM Avails
1708 -- When an Inst is tossed upstairs as 'free' we nevertheless add it
1709 -- to avails, so that any other equal Insts will be commoned up right
1710 -- here rather than also being tossed upstairs. This is really just
1711 -- an optimisation, and perhaps it is more trouble that it is worth,
1712 -- as the following comments show!
1714 -- NB: do *not* add superclasses. If we have
1717 -- but a is not bound here, then we *don't* want to derive
1718 -- dn from df here lest we lose sharing.
1720 addFree avails free = returnM (addToFM avails free IsFree)
1722 addWanted :: WantSCs -> Avails -> Inst -> LHsExpr TcId -> [Inst] -> TcM Avails
1723 addWanted want_scs avails wanted rhs_expr wanteds
1724 = addAvailAndSCs want_scs avails wanted avail
1726 avail = Rhs rhs_expr wanteds
1728 addGiven :: Avails -> Inst -> TcM Avails
1729 addGiven avails given = addAvailAndSCs AddSCs avails given (Given (instToId given))
1730 -- Always add superclasses for 'givens'
1732 -- No ASSERT( not (given `elemFM` avails) ) because in an instance
1733 -- decl for Ord t we can add both Ord t and Eq t as 'givens',
1734 -- so the assert isn't true
1736 addIrred :: WantSCs -> Avails -> Inst -> TcM Avails
1737 addIrred want_scs avails irred = ASSERT2( not (irred `elemFM` avails), ppr irred $$ ppr avails )
1738 addAvailAndSCs want_scs avails irred Irred
1740 addAvailAndSCs :: WantSCs -> Avails -> Inst -> Avail -> TcM Avails
1741 addAvailAndSCs want_scs avails inst avail
1742 | not (isClassDict inst) = return avails_with_inst
1743 | NoSCs <- want_scs = return avails_with_inst
1744 | otherwise = do { traceTc (text "addAvailAndSCs" <+> vcat [ppr inst, ppr deps])
1745 ; addSCs is_loop avails_with_inst inst }
1747 avails_with_inst = addToFM avails inst avail
1749 is_loop pred = any (`tcEqType` mkPredTy pred) dep_tys
1750 -- Note: this compares by *type*, not by Unique
1751 deps = findAllDeps (unitVarSet (instToId inst)) avail
1752 dep_tys = map idType (varSetElems deps)
1754 findAllDeps :: IdSet -> Avail -> IdSet
1755 -- Find all the Insts that this one depends on
1756 -- See Note [SUPERCLASS-LOOP 2]
1757 -- Watch out, though. Since the avails may contain loops
1758 -- (see Note [RECURSIVE DICTIONARIES]), so we need to track the ones we've seen so far
1759 findAllDeps so_far (Rhs _ kids) = foldl find_all so_far kids
1760 findAllDeps so_far other = so_far
1762 find_all :: IdSet -> Inst -> IdSet
1764 | kid_id `elemVarSet` so_far = so_far
1765 | Just avail <- lookupFM avails kid = findAllDeps so_far' avail
1766 | otherwise = so_far'
1768 so_far' = extendVarSet so_far kid_id -- Add the new kid to so_far
1769 kid_id = instToId kid
1771 addSCs :: (TcPredType -> Bool) -> Avails -> Inst -> TcM Avails
1772 -- Add all the superclasses of the Inst to Avails
1773 -- The first param says "dont do this because the original thing
1774 -- depends on this one, so you'd build a loop"
1775 -- Invariant: the Inst is already in Avails.
1777 addSCs is_loop avails dict
1778 = do { sc_dicts <- newDictBndrs (instLoc dict) sc_theta'
1779 ; foldlM add_sc avails (zipEqual "add_scs" sc_dicts sc_sels) }
1781 (clas, tys) = getDictClassTys dict
1782 (tyvars, sc_theta, sc_sels, _) = classBigSig clas
1783 sc_theta' = substTheta (zipTopTvSubst tyvars tys) sc_theta
1785 add_sc avails (sc_dict, sc_sel)
1786 | is_loop (dictPred sc_dict) = return avails -- See Note [SUPERCLASS-LOOP 2]
1787 | is_given sc_dict = return avails
1788 | otherwise = addSCs is_loop avails' sc_dict
1790 sc_sel_rhs = L (instSpan dict) (HsWrap co_fn (HsVar sc_sel))
1791 co_fn = WpApp (instToId dict) <.> mkWpTyApps tys
1792 avails' = addToFM avails sc_dict (Rhs sc_sel_rhs [dict])
1794 is_given :: Inst -> Bool
1795 is_given sc_dict = case lookupFM avails sc_dict of
1796 Just (Given _) -> True -- Given is cheaper than superclass selection
1800 Note [SUPERCLASS-LOOP 2]
1801 ~~~~~~~~~~~~~~~~~~~~~~~~
1802 But the above isn't enough. Suppose we are *given* d1:Ord a,
1803 and want to deduce (d2:C [a]) where
1805 class Ord a => C a where
1806 instance Ord [a] => C [a] where ...
1808 Then we'll use the instance decl to deduce C [a] from Ord [a], and then add the
1809 superclasses of C [a] to avails. But we must not overwrite the binding
1810 for Ord [a] (which is obtained from Ord a) with a superclass selection or we'll just
1813 Here's another variant, immortalised in tcrun020
1814 class Monad m => C1 m
1815 class C1 m => C2 m x
1816 instance C2 Maybe Bool
1817 For the instance decl we need to build (C1 Maybe), and it's no good if
1818 we run around and add (C2 Maybe Bool) and its superclasses to the avails
1819 before we search for C1 Maybe.
1821 Here's another example
1822 class Eq b => Foo a b
1823 instance Eq a => Foo [a] a
1827 we'll first deduce that it holds (via the instance decl). We must not
1828 then overwrite the Eq t constraint with a superclass selection!
1830 At first I had a gross hack, whereby I simply did not add superclass constraints
1831 in addWanted, though I did for addGiven and addIrred. This was sub-optimal,
1832 becuase it lost legitimate superclass sharing, and it still didn't do the job:
1833 I found a very obscure program (now tcrun021) in which improvement meant the
1834 simplifier got two bites a the cherry... so something seemed to be an Irred
1835 first time, but reducible next time.
1837 Now we implement the Right Solution, which is to check for loops directly
1838 when adding superclasses. It's a bit like the occurs check in unification.
1841 Note [RECURSIVE DICTIONARIES]
1842 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1844 data D r = ZeroD | SuccD (r (D r));
1846 instance (Eq (r (D r))) => Eq (D r) where
1847 ZeroD == ZeroD = True
1848 (SuccD a) == (SuccD b) = a == b
1851 equalDC :: D [] -> D [] -> Bool;
1854 We need to prove (Eq (D [])). Here's how we go:
1858 by instance decl, holds if
1862 by instance decl of Eq, holds if
1864 where d2 = dfEqList d3
1867 But now we can "tie the knot" to give
1873 and it'll even run! The trick is to put the thing we are trying to prove
1874 (in this case Eq (D []) into the database before trying to prove its
1875 contributing clauses.
1878 %************************************************************************
1880 \section{tcSimplifyTop: defaulting}
1882 %************************************************************************
1885 @tcSimplifyTop@ is called once per module to simplify all the constant
1886 and ambiguous Insts.
1888 We need to be careful of one case. Suppose we have
1890 instance Num a => Num (Foo a b) where ...
1892 and @tcSimplifyTop@ is given a constraint (Num (Foo x y)). Then it'll simplify
1893 to (Num x), and default x to Int. But what about y??
1895 It's OK: the final zonking stage should zap y to (), which is fine.
1899 tcSimplifyTop, tcSimplifyInteractive :: [Inst] -> TcM TcDictBinds
1900 tcSimplifyTop wanteds
1901 = do { ext_default <- doptM Opt_ExtendedDefaultRules
1902 ; tc_simplify_top doc ext_default AddSCs wanteds }
1904 doc = text "tcSimplifyTop"
1906 tcSimplifyInteractive wanteds
1907 = tc_simplify_top doc True {- Interactive loop -} AddSCs wanteds
1909 doc = text "tcSimplifyTop"
1911 -- The TcLclEnv should be valid here, solely to improve
1912 -- error message generation for the monomorphism restriction
1913 tc_simplify_top doc use_extended_defaulting want_scs wanteds
1914 = do { lcl_env <- getLclEnv
1915 ; traceTc (text "tcSimplifyTop" <+> ppr (lclEnvElts lcl_env))
1917 ; let try_me inst = ReduceMe want_scs
1918 ; (frees, binds, irreds) <- simpleReduceLoop doc try_me wanteds
1921 -- First get rid of implicit parameters
1922 (non_ips, bad_ips) = partition isClassDict irreds
1924 -- All the non-tv or multi-param ones are definite errors
1925 (unary_tv_dicts, non_tvs) = partition is_unary_tyvar_dict non_ips
1926 bad_tyvars = unionVarSets (map tyVarsOfInst non_tvs)
1928 -- Group by type variable
1929 tv_groups = equivClasses cmp_by_tyvar unary_tv_dicts
1931 -- Pick the ones which its worth trying to disambiguate
1932 -- namely, the ones whose type variable isn't bound
1933 -- up with one of the non-tyvar classes
1934 (default_gps, non_default_gps) = partition defaultable_group tv_groups
1935 defaultable_group ds
1936 = (bad_tyvars `disjointVarSet` tyVarsOfInst (head ds))
1937 && defaultable_classes (map get_clas ds)
1938 defaultable_classes clss
1939 | use_extended_defaulting = any isInteractiveClass clss
1940 | otherwise = all isStandardClass clss && any isNumericClass clss
1942 isInteractiveClass cls = isNumericClass cls
1943 || (classKey cls `elem` [showClassKey, eqClassKey, ordClassKey])
1944 -- In interactive mode, or with -fextended-default-rules,
1945 -- we default Show a to Show () to avoid graututious errors on "show []"
1948 -- Collect together all the bad guys
1949 bad_guys = non_tvs ++ concat non_default_gps
1950 (ambigs, no_insts) = partition isTyVarDict bad_guys
1951 -- If the dict has no type constructors involved, it must be ambiguous,
1952 -- except I suppose that another error with fundeps maybe should have
1953 -- constrained those type variables
1955 -- Report definite errors
1956 ; ASSERT( null frees )
1957 groupErrs (addNoInstanceErrs Nothing []) no_insts
1958 ; strangeTopIPErrs bad_ips
1960 -- Deal with ambiguity errors, but only if
1961 -- if there has not been an error so far:
1962 -- errors often give rise to spurious ambiguous Insts.
1964 -- f = (*) -- Monomorphic
1965 -- g :: Num a => a -> a
1967 -- Here, we get a complaint when checking the type signature for g,
1968 -- that g isn't polymorphic enough; but then we get another one when
1969 -- dealing with the (Num a) context arising from f's definition;
1970 -- we try to unify a with Int (to default it), but find that it's
1971 -- already been unified with the rigid variable from g's type sig
1972 ; binds_ambig <- ifErrsM (returnM []) $
1973 do { -- Complain about the ones that don't fall under
1974 -- the Haskell rules for disambiguation
1975 -- This group includes both non-existent instances
1976 -- e.g. Num (IO a) and Eq (Int -> Int)
1977 -- and ambiguous dictionaries
1979 addTopAmbigErrs ambigs
1981 -- Disambiguate the ones that look feasible
1982 ; mappM disambigGroup default_gps }
1984 ; return (binds `unionBags` unionManyBags binds_ambig) }
1986 ----------------------------------
1987 d1 `cmp_by_tyvar` d2 = get_tv d1 `compare` get_tv d2
1989 is_unary_tyvar_dict :: Inst -> Bool -- Dicts of form (C a)
1990 -- Invariant: argument is a ClassDict, not IP or method
1991 is_unary_tyvar_dict d = case getDictClassTys d of
1992 (_, [ty]) -> tcIsTyVarTy ty
1995 get_tv d = case getDictClassTys d of
1996 (clas, [ty]) -> tcGetTyVar "tcSimplify" ty
1997 get_clas d = case getDictClassTys d of
2001 If a dictionary constrains a type variable which is
2002 * not mentioned in the environment
2003 * and not mentioned in the type of the expression
2004 then it is ambiguous. No further information will arise to instantiate
2005 the type variable; nor will it be generalised and turned into an extra
2006 parameter to a function.
2008 It is an error for this to occur, except that Haskell provided for
2009 certain rules to be applied in the special case of numeric types.
2011 * at least one of its classes is a numeric class, and
2012 * all of its classes are numeric or standard
2013 then the type variable can be defaulted to the first type in the
2014 default-type list which is an instance of all the offending classes.
2016 So here is the function which does the work. It takes the ambiguous
2017 dictionaries and either resolves them (producing bindings) or
2018 complains. It works by splitting the dictionary list by type
2019 variable, and using @disambigOne@ to do the real business.
2021 @disambigOne@ assumes that its arguments dictionaries constrain all
2022 the same type variable.
2024 ADR Comment 20/6/94: I've changed the @CReturnable@ case to default to
2025 @()@ instead of @Int@. I reckon this is the Right Thing to do since
2026 the most common use of defaulting is code like:
2028 _ccall_ foo `seqPrimIO` bar
2030 Since we're not using the result of @foo@, the result if (presumably)
2034 disambigGroup :: [Inst] -- All standard classes of form (C a)
2038 = -- THE DICTS OBEY THE DEFAULTABLE CONSTRAINT
2039 -- SO, TRY DEFAULT TYPES IN ORDER
2041 -- Failure here is caused by there being no type in the
2042 -- default list which can satisfy all the ambiguous classes.
2043 -- For example, if Real a is reqd, but the only type in the
2044 -- default list is Int.
2045 get_default_tys `thenM` \ default_tys ->
2047 try_default [] -- No defaults work, so fail
2050 try_default (default_ty : default_tys)
2051 = tryTcLIE_ (try_default default_tys) $ -- If default_ty fails, we try
2052 -- default_tys instead
2053 tcSimplifyDefault theta `thenM` \ _ ->
2056 theta = [mkClassPred clas [default_ty] | clas <- classes]
2058 -- See if any default works
2059 tryM (try_default default_tys) `thenM` \ mb_ty ->
2062 Right chosen_default_ty -> choose_default chosen_default_ty
2064 tyvar = get_tv (head dicts) -- Should be non-empty
2065 classes = map get_clas dicts
2067 choose_default default_ty -- Commit to tyvar = default_ty
2068 = -- Bind the type variable
2069 unifyType default_ty (mkTyVarTy tyvar) `thenM_`
2070 -- and reduce the context, for real this time
2071 simpleReduceLoop (text "disambig" <+> ppr dicts)
2072 reduceMe dicts `thenM` \ (frees, binds, ambigs) ->
2073 WARN( not (null frees && null ambigs), ppr frees $$ ppr ambigs )
2074 warnDefault dicts default_ty `thenM_`
2077 bomb_out = addTopAmbigErrs dicts `thenM_`
2081 = do { mb_defaults <- getDefaultTys
2082 ; case mb_defaults of
2083 Just tys -> return tys
2084 Nothing -> -- No use-supplied default;
2085 -- use [Integer, Double]
2086 do { integer_ty <- tcMetaTy integerTyConName
2087 ; checkWiredInTyCon doubleTyCon
2088 ; return [integer_ty, doubleTy] } }
2091 [Aside - why the defaulting mechanism is turned off when
2092 dealing with arguments and results to ccalls.
2094 When typechecking _ccall_s, TcExpr ensures that the external
2095 function is only passed arguments (and in the other direction,
2096 results) of a restricted set of 'native' types.
2098 The interaction between the defaulting mechanism for numeric
2099 values and CC & CR can be a bit puzzling to the user at times.
2108 What type has 'x' got here? That depends on the default list
2109 in operation, if it is equal to Haskell 98's default-default
2110 of (Integer, Double), 'x' has type Double, since Integer
2111 is not an instance of CR. If the default list is equal to
2112 Haskell 1.4's default-default of (Int, Double), 'x' has type
2118 %************************************************************************
2120 \subsection[simple]{@Simple@ versions}
2122 %************************************************************************
2124 Much simpler versions when there are no bindings to make!
2126 @tcSimplifyThetas@ simplifies class-type constraints formed by
2127 @deriving@ declarations and when specialising instances. We are
2128 only interested in the simplified bunch of class/type constraints.
2130 It simplifies to constraints of the form (C a b c) where
2131 a,b,c are type variables. This is required for the context of
2132 instance declarations.
2135 tcSimplifyDeriv :: InstOrigin
2138 -> ThetaType -- Wanted
2139 -> TcM ThetaType -- Needed
2141 tcSimplifyDeriv orig tc tyvars theta
2142 = tcInstTyVars tyvars `thenM` \ (tvs, _, tenv) ->
2143 -- The main loop may do unification, and that may crash if
2144 -- it doesn't see a TcTyVar, so we have to instantiate. Sigh
2145 -- ToDo: what if two of them do get unified?
2146 newDictBndrsO orig (substTheta tenv theta) `thenM` \ wanteds ->
2147 simpleReduceLoop doc reduceMe wanteds `thenM` \ (frees, _, irreds) ->
2148 ASSERT( null frees ) -- reduceMe never returns Free
2150 doptM Opt_GlasgowExts `thenM` \ gla_exts ->
2151 doptM Opt_AllowUndecidableInstances `thenM` \ undecidable_ok ->
2153 tv_set = mkVarSet tvs
2155 (bad_insts, ok_insts) = partition is_bad_inst irreds
2157 = let pred = dictPred dict -- reduceMe squashes all non-dicts
2158 in isEmptyVarSet (tyVarsOfPred pred)
2159 -- Things like (Eq T) are bad
2160 || (not gla_exts && not (isTyVarClassPred pred))
2162 simpl_theta = map dictPred ok_insts
2163 weird_preds = [pred | pred <- simpl_theta
2164 , not (tyVarsOfPred pred `subVarSet` tv_set)]
2165 -- Check for a bizarre corner case, when the derived instance decl should
2166 -- have form instance C a b => D (T a) where ...
2167 -- Note that 'b' isn't a parameter of T. This gives rise to all sorts
2168 -- of problems; in particular, it's hard to compare solutions for
2169 -- equality when finding the fixpoint. So I just rule it out for now.
2171 rev_env = zipTopTvSubst tvs (mkTyVarTys tyvars)
2172 -- This reverse-mapping is a Royal Pain,
2173 -- but the result should mention TyVars not TcTyVars
2176 addNoInstanceErrs Nothing [] bad_insts `thenM_`
2177 mapM_ (addErrTc . badDerivedPred) weird_preds `thenM_`
2178 returnM (substTheta rev_env simpl_theta)
2180 doc = ptext SLIT("deriving classes for a data type")
2183 @tcSimplifyDefault@ just checks class-type constraints, essentially;
2184 used with \tr{default} declarations. We are only interested in
2185 whether it worked or not.
2188 tcSimplifyDefault :: ThetaType -- Wanted; has no type variables in it
2191 tcSimplifyDefault theta
2192 = newDictBndrsO DefaultOrigin theta `thenM` \ wanteds ->
2193 simpleReduceLoop doc reduceMe wanteds `thenM` \ (frees, _, irreds) ->
2194 ASSERT( null frees ) -- try_me never returns Free
2195 addNoInstanceErrs Nothing [] irreds `thenM_`
2201 doc = ptext SLIT("default declaration")
2205 %************************************************************************
2207 \section{Errors and contexts}
2209 %************************************************************************
2211 ToDo: for these error messages, should we note the location as coming
2212 from the insts, or just whatever seems to be around in the monad just
2216 groupErrs :: ([Inst] -> TcM ()) -- Deal with one group
2217 -> [Inst] -- The offending Insts
2219 -- Group together insts with the same origin
2220 -- We want to report them together in error messages
2222 groupErrs report_err []
2224 groupErrs report_err (inst:insts)
2225 = do_one (inst:friends) `thenM_`
2226 groupErrs report_err others
2229 -- (It may seem a bit crude to compare the error messages,
2230 -- but it makes sure that we combine just what the user sees,
2231 -- and it avoids need equality on InstLocs.)
2232 (friends, others) = partition is_friend insts
2233 loc_msg = showSDoc (pprInstLoc (instLoc inst))
2234 is_friend friend = showSDoc (pprInstLoc (instLoc friend)) == loc_msg
2235 do_one insts = addInstCtxt (instLoc (head insts)) (report_err insts)
2236 -- Add location and context information derived from the Insts
2238 -- Add the "arising from..." part to a message about bunch of dicts
2239 addInstLoc :: [Inst] -> Message -> Message
2240 addInstLoc insts msg = msg $$ nest 2 (pprInstLoc (instLoc (head insts)))
2242 addTopIPErrs :: [Name] -> [Inst] -> TcM ()
2243 addTopIPErrs bndrs []
2245 addTopIPErrs bndrs ips
2246 = addErrTcM (tidy_env, mk_msg tidy_ips)
2248 (tidy_env, tidy_ips) = tidyInsts ips
2249 mk_msg ips = vcat [sep [ptext SLIT("Implicit parameters escape from"),
2250 nest 2 (ptext SLIT("the monomorphic top-level binding(s) of")
2251 <+> pprBinders bndrs <> colon)],
2252 nest 2 (vcat (map ppr_ip ips)),
2254 ppr_ip ip = pprPred (dictPred ip) <+> pprInstLoc (instLoc ip)
2256 strangeTopIPErrs :: [Inst] -> TcM ()
2257 strangeTopIPErrs dicts -- Strange, becuase addTopIPErrs should have caught them all
2258 = groupErrs report tidy_dicts
2260 (tidy_env, tidy_dicts) = tidyInsts dicts
2261 report dicts = addErrTcM (tidy_env, mk_msg dicts)
2262 mk_msg dicts = addInstLoc dicts (ptext SLIT("Unbound implicit parameter") <>
2263 plural tidy_dicts <+> pprDictsTheta tidy_dicts)
2265 addNoInstanceErrs :: Maybe SDoc -- Nothing => top level
2266 -- Just d => d describes the construct
2267 -> [Inst] -- What is given by the context or type sig
2268 -> [Inst] -- What is wanted
2270 addNoInstanceErrs mb_what givens []
2272 addNoInstanceErrs mb_what givens dicts
2273 = -- Some of the dicts are here because there is no instances
2274 -- and some because there are too many instances (overlap)
2275 tcGetInstEnvs `thenM` \ inst_envs ->
2277 (tidy_env1, tidy_givens) = tidyInsts givens
2278 (tidy_env2, tidy_dicts) = tidyMoreInsts tidy_env1 dicts
2280 -- Run through the dicts, generating a message for each
2281 -- overlapping one, but simply accumulating all the
2282 -- no-instance ones so they can be reported as a group
2283 (overlap_doc, no_inst_dicts) = foldl check_overlap (empty, []) tidy_dicts
2284 check_overlap (overlap_doc, no_inst_dicts) dict
2285 | not (isClassDict dict) = (overlap_doc, dict : no_inst_dicts)
2287 = case lookupInstEnv inst_envs clas tys of
2288 -- The case of exactly one match and no unifiers means
2289 -- a successful lookup. That can't happen here, becuase
2290 -- dicts only end up here if they didn't match in Inst.lookupInst
2292 ([m],[]) -> pprPanic "addNoInstanceErrs" (ppr dict)
2294 ([], _) -> (overlap_doc, dict : no_inst_dicts) -- No match
2295 res -> (mk_overlap_msg dict res $$ overlap_doc, no_inst_dicts)
2297 (clas,tys) = getDictClassTys dict
2300 -- Now generate a good message for the no-instance bunch
2301 mk_probable_fix tidy_env2 no_inst_dicts `thenM` \ (tidy_env3, probable_fix) ->
2303 no_inst_doc | null no_inst_dicts = empty
2304 | otherwise = vcat [addInstLoc no_inst_dicts heading, probable_fix]
2305 heading | null givens = ptext SLIT("No instance") <> plural no_inst_dicts <+>
2306 ptext SLIT("for") <+> pprDictsTheta no_inst_dicts
2307 | otherwise = sep [ptext SLIT("Could not deduce") <+> pprDictsTheta no_inst_dicts,
2308 nest 2 $ ptext SLIT("from the context") <+> pprDictsTheta tidy_givens]
2310 -- And emit both the non-instance and overlap messages
2311 addErrTcM (tidy_env3, no_inst_doc $$ overlap_doc)
2313 mk_overlap_msg dict (matches, unifiers)
2314 = vcat [ addInstLoc [dict] ((ptext SLIT("Overlapping instances for")
2315 <+> pprPred (dictPred dict))),
2316 sep [ptext SLIT("Matching instances") <> colon,
2317 nest 2 (vcat [pprInstances ispecs, pprInstances unifiers])],
2318 ASSERT( not (null matches) )
2319 if not (isSingleton matches)
2320 then -- Two or more matches
2322 else -- One match, plus some unifiers
2323 ASSERT( not (null unifiers) )
2324 parens (vcat [ptext SLIT("The choice depends on the instantiation of") <+>
2325 quotes (pprWithCommas ppr (varSetElems (tyVarsOfInst dict))),
2326 ptext SLIT("Use -fallow-incoherent-instances to use the first choice above")])]
2328 ispecs = [ispec | (_, ispec) <- matches]
2330 mk_probable_fix tidy_env dicts
2331 = returnM (tidy_env, sep [ptext SLIT("Possible fix:"), nest 2 (vcat fixes)])
2333 fixes = add_ors (fix1 ++ fix2)
2335 fix1 = case mb_what of
2336 Nothing -> [] -- Top level
2337 Just what -> -- Nested (type signatures, instance decls)
2338 [ sep [ ptext SLIT("add") <+> pprDictsTheta dicts,
2339 ptext SLIT("to the") <+> what] ]
2341 fix2 | null instance_dicts = []
2342 | otherwise = [ sep [ptext SLIT("add an instance declaration for"),
2343 pprDictsTheta instance_dicts] ]
2344 instance_dicts = [d | d <- dicts, isClassDict d, not (isTyVarDict d)]
2345 -- Insts for which it is worth suggesting an adding an instance declaration
2346 -- Exclude implicit parameters, and tyvar dicts
2348 add_ors :: [SDoc] -> [SDoc] -- The empty case should not happen
2349 add_ors [] = [ptext SLIT("[No suggested fixes]")] -- Strange
2350 add_ors (f1:fs) = f1 : map (ptext SLIT("or") <+>) fs
2352 addTopAmbigErrs dicts
2353 -- Divide into groups that share a common set of ambiguous tyvars
2354 = mapM report (equivClasses cmp [(d, tvs_of d) | d <- tidy_dicts])
2356 (tidy_env, tidy_dicts) = tidyInsts dicts
2358 tvs_of :: Inst -> [TcTyVar]
2359 tvs_of d = varSetElems (tyVarsOfInst d)
2360 cmp (_,tvs1) (_,tvs2) = tvs1 `compare` tvs2
2362 report :: [(Inst,[TcTyVar])] -> TcM ()
2363 report pairs@((inst,tvs) : _) -- The pairs share a common set of ambiguous tyvars
2364 = mkMonomorphismMsg tidy_env tvs `thenM` \ (tidy_env, mono_msg) ->
2365 setSrcSpan (instLocSrcSpan (instLoc inst)) $
2366 -- the location of the first one will do for the err message
2367 addErrTcM (tidy_env, msg $$ mono_msg)
2369 dicts = map fst pairs
2370 msg = sep [text "Ambiguous type variable" <> plural tvs <+>
2371 pprQuotedList tvs <+> in_msg,
2372 nest 2 (pprDictsInFull dicts)]
2373 in_msg = text "in the constraint" <> plural dicts <> colon
2376 mkMonomorphismMsg :: TidyEnv -> [TcTyVar] -> TcM (TidyEnv, Message)
2377 -- There's an error with these Insts; if they have free type variables
2378 -- it's probably caused by the monomorphism restriction.
2379 -- Try to identify the offending variable
2380 -- ASSUMPTION: the Insts are fully zonked
2381 mkMonomorphismMsg tidy_env inst_tvs
2382 = findGlobals (mkVarSet inst_tvs) tidy_env `thenM` \ (tidy_env, docs) ->
2383 returnM (tidy_env, mk_msg docs)
2385 mk_msg [] = ptext SLIT("Probable fix: add a type signature that fixes these type variable(s)")
2386 -- This happens in things like
2387 -- f x = show (read "foo")
2388 -- whre monomorphism doesn't play any role
2389 mk_msg docs = vcat [ptext SLIT("Possible cause: the monomorphism restriction applied to the following:"),
2393 monomorphism_fix :: SDoc
2394 monomorphism_fix = ptext SLIT("Probable fix:") <+>
2395 (ptext SLIT("give these definition(s) an explicit type signature")
2396 $$ ptext SLIT("or use -fno-monomorphism-restriction"))
2398 warnDefault dicts default_ty
2399 = doptM Opt_WarnTypeDefaults `thenM` \ warn_flag ->
2400 addInstCtxt (instLoc (head (dicts))) (warnTc warn_flag warn_msg)
2403 (_, tidy_dicts) = tidyInsts dicts
2404 warn_msg = vcat [ptext SLIT("Defaulting the following constraint(s) to type") <+>
2405 quotes (ppr default_ty),
2406 pprDictsInFull tidy_dicts]
2408 -- Used for the ...Thetas variants; all top level
2410 = vcat [ptext SLIT("Can't derive instances where the instance context mentions"),
2411 ptext SLIT("type variables that are not data type parameters"),
2412 nest 2 (ptext SLIT("Offending constraint:") <+> ppr pred)]
2414 reduceDepthErr n stack
2415 = vcat [ptext SLIT("Context reduction stack overflow; size =") <+> int n,
2416 ptext SLIT("Use -fcontext-stack=N to increase stack size to N"),
2417 nest 4 (pprStack stack)]
2419 pprStack stack = vcat (map pprInstInFull stack)