More refactoring of constraint simplification
[ghc-hetmet.git] / compiler / typecheck / TcSimplify.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5
6 TcSimplify
7
8 \begin{code}
9 module TcSimplify (
10         tcSimplifyInfer, tcSimplifyInferCheck,
11         tcSimplifyCheck, tcSimplifyRestricted,
12         tcSimplifyRuleLhs, tcSimplifyIPs, 
13         tcSimplifySuperClasses,
14         tcSimplifyTop, tcSimplifyInteractive,
15         tcSimplifyBracket, tcSimplifyCheckPat,
16
17         tcSimplifyDeriv, tcSimplifyDefault,
18         bindInstsOfLocalFuns, bindIrreds,
19     ) where
20
21 #include "HsVersions.h"
22
23 import {-# SOURCE #-} TcUnify( unifyType )
24 import HsSyn
25
26 import TcRnMonad
27 import Inst
28 import TcEnv
29 import InstEnv
30 import TcGadt
31 import TcMType
32 import TcType
33 import TcIface
34 import Var
35 import TyCon
36 import Name
37 import NameSet
38 import Class
39 import FunDeps
40 import PrelInfo
41 import PrelNames
42 import Type
43 import TysWiredIn
44 import ErrUtils
45 import BasicTypes
46 import VarSet
47 import VarEnv
48 import FiniteMap
49 import Bag
50 import Outputable
51 import ListSetOps
52 import Util
53 import SrcLoc
54 import DynFlags
55
56 import Data.List
57 \end{code}
58
59
60 %************************************************************************
61 %*                                                                      *
62 \subsection{NOTES}
63 %*                                                                      *
64 %************************************************************************
65
66         --------------------------------------
67         Notes on functional dependencies (a bug)
68         --------------------------------------
69
70 Consider this:
71
72         class C a b | a -> b
73         class D a b | a -> b
74
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
78         f _ = True
79         
80         g :: C a b => a -> Bool
81         g = f
82
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).
85
86 Here is a more complicated example:
87
88 | > class Foo a b | a->b
89 | >
90 | > class Bar a b | a->b
91 | >
92 | > data Obj = Obj
93 | >
94 | > instance Bar Obj Obj
95 | >
96 | > instance (Bar a b) => Foo a b
97 | >
98 | > foo:: (Foo a b) => a -> String
99 | > foo _ = "works"
100 | >
101 | > runFoo:: (forall a b. (Foo a b) => a -> w) -> w
102 | > runFoo f = f Obj
103
104 | *Test> runFoo foo
105
106 | <interactive>:1:
107 |     Could not deduce (Bar a b) from the context (Foo a b)
108 |       arising from use of `foo' at <interactive>:1
109 |     Probable fix:
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
113
114 | Why all of the sudden does GHC need the constraint Bar a b? The
115 | function foo didn't ask for that... 
116
117 The trouble is that to type (runFoo foo), GHC has to solve the problem:
118
119         Given constraint        Foo a b
120         Solve constraint        Foo a b'
121
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
124         simplify constraints
125         apply improvement
126         and loop
127
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
131 from.
132
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.  
135
136
137
138         --------------------------------------
139                 Notes on quantification
140         --------------------------------------
141
142 Suppose we are about to do a generalisation step.
143 We have in our hand
144
145         G       the environment
146         T       the type of the RHS
147         C       the constraints from that RHS
148
149 The game is to figure out
150
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
154
155 So we're going to infer the type
156
157         forall Q. Cq => T
158
159 and float the constraints Ct further outwards.
160
161 Here are the things that *must* be true:
162
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
165
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.
171
172         BETWEEN THESE TWO BOUNDS, ANY Q WILL DO!
173
174 Example:        class H x y | x->y where ...
175
176         fv(G) = {a}     C = {H a b, H c d}
177                         T = c -> b
178
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}
181
182         So Q can be {c,d}, {b,c,d}
183
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.
187
188
189 -----------------------------------------
190 We will make use of
191
192   fv(T)         the free type vars of T
193
194   oclose(vs,C)  The result of extending the set of tyvars vs
195                 using the functional dependencies from C
196
197   grow(vs,C)    The result of extend the set of tyvars vs
198                 using all conceivable links from C.
199
200                 E.g. vs = {a}, C = {H [a] b, K (b,Int) c, Eq e}
201                 Then grow(vs,C) = {a,b,c}
202
203                 Note that grow(vs,C) `superset` grow(vs,simplify(C))
204                 That is, simplfication can only shrink the result of grow.
205
206 Notice that
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)
209
210
211 -----------------------------------------
212
213 Choosing Q
214 ~~~~~~~~~~
215 Here's a good way to choose Q:
216
217         Q = grow( fv(T), C ) \ oclose( fv(G), C )
218
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.
223
224 Why grow( fv(T), C ) rather than fv(T)?  Consider
225
226         class H x y | x->y where ...
227
228         T = c->c
229         C = (H c d)
230
231   If we used fv(T) = {c} we'd get the type
232
233         forall c. H c d => c -> b
234
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.
239
240 Why not oclose( fv(T), C )?  Because we might not be able to see
241 all the functional dependencies yet:
242
243         class H x y | x->y where ...
244         instance H x y => Eq (T x y) where ...
245
246         T = c->c
247         C = (Eq (T c d))
248
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.
251
252
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.
256
257
258
259 -------------------------------------
260         Note [Ambiguity]
261 -------------------------------------
262
263 It's very hard to be certain when a type is ambiguous.  Consider
264
265         class K x
266         class H x y | x -> y
267         instance H x y => K (x,y)
268
269 Is this type ambiguous?
270         forall a b. (K (a,b), Eq b) => a -> a
271
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!
276
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 ...
281
282 You may say of this example that we should use the instance decl right
283 away, but you can't always do that:
284
285         class J a b where ...
286         instance J Int b where ...
287
288         f :: forall a b. J a b => a -> a
289
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.
294
295
296
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.
300
301 So here's the plan.  We WARN about probable ambiguity if
302
303         fv(Cq) is not a subset of  oclose(fv(T) union fv(G), C)
304
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.
308
309 Notice that we union before calling oclose.  Here's an example:
310
311         class J a b c | a b -> c
312         fv(G) = {a}
313
314 Is this ambiguous?
315         forall b c. (J a b c) => b -> b
316
317 Only if we union {a} from G with {b} from T before using oclose,
318 do we see that c is fixed.
319
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.
324
325
326 Can we ever be *certain* about ambiguity?  Yes: if there's a constraint
327
328         c in C such that fv(c) intersect (fv(G) union fv(T)) = EMPTY
329
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
332 the nasty example?
333
334         class K x
335         class H x y | x -> y
336         instance H x y => K (x,y)
337
338 Is this type ambiguous?
339         forall a b. (K (a,b), Eq b) => a -> a
340
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
343
344         Cq = Ca union Cq'  st  fv(Ca) intersect (fv(Cq') union fv(T) union fv(G)) = EMPTY
345
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)
351
352
353         --------------------------------------
354                 Notes on principal types
355         --------------------------------------
356
357     class C a where
358       op :: a -> a
359
360     f x = let g y = op (y::Int) in True
361
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
365
366
367         --------------------------------------
368         The need for forall's in constraints
369         --------------------------------------
370
371 [Exchange on Haskell Cafe 5/6 Dec 2000]
372
373   class C t where op :: t -> Bool
374   instance C [t] where op x = True
375
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)
378
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:
381
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!).
386
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
390 analyzes first.  
391
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.
395
396
397         --------------------------------------
398                 Notes on implicit parameters
399         --------------------------------------
400
401 Note [Inheriting implicit parameters]
402 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
403 Consider this:
404
405         f x = (x::Int) + ?y
406
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:
410
411         f :: Int -> Int
412
413 (so we get ?y from the context of f's definition), or
414
415         f :: (?y::Int) => Int -> Int
416
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.
422
423 BOTTOM LINE: when *inferring types* you *must* quantify 
424 over implicit parameters. See the predicate isFreeWhenInferring.
425
426
427 Note [Implicit parameters and ambiguity] 
428 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
429 What type should we infer for this?
430         f x = (show ?y, x::Int)
431 Since we must quantify over the ?y, the most plausible type is
432         f :: (Show a, ?y::a) => Int -> (String, Int)
433 But notice that the type of the RHS is (String,Int), with no type 
434 varibables mentioned at all!  The type of f looks ambiguous.  But
435 it isn't, because at a call site we might have
436         let ?y = 5::Int in f 7
437 and all is well.  In effect, implicit parameters are, well, parameters,
438 so we can take their type variables into account as part of the
439 "tau-tvs" stuff.  This is done in the function 'FunDeps.grow'.
440
441
442 Question 2: type signatures
443 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
444 BUT WATCH OUT: When you supply a type signature, we can't force you
445 to quantify over implicit parameters.  For example:
446
447         (?x + 1) :: Int
448
449 This is perfectly reasonable.  We do not want to insist on
450
451         (?x + 1) :: (?x::Int => Int)
452
453 That would be silly.  Here, the definition site *is* the occurrence site,
454 so the above strictures don't apply.  Hence the difference between
455 tcSimplifyCheck (which *does* allow implicit paramters to be inherited)
456 and tcSimplifyCheckBind (which does not).
457
458 What about when you supply a type signature for a binding?
459 Is it legal to give the following explicit, user type 
460 signature to f, thus:
461
462         f :: Int -> Int
463         f x = (x::Int) + ?y
464
465 At first sight this seems reasonable, but it has the nasty property
466 that adding a type signature changes the dynamic semantics.
467 Consider this:
468
469         (let f x = (x::Int) + ?y
470          in (f 3, f 3 with ?y=5))  with ?y = 6
471
472                 returns (3+6, 3+5)
473 vs
474         (let f :: Int -> Int
475              f x = x + ?y
476          in (f 3, f 3 with ?y=5))  with ?y = 6
477
478                 returns (3+6, 3+6)
479
480 Indeed, simply inlining f (at the Haskell source level) would change the
481 dynamic semantics.
482
483 Nevertheless, as Launchbury says (email Oct 01) we can't really give the
484 semantics for a Haskell program without knowing its typing, so if you 
485 change the typing you may change the semantics.
486
487 To make things consistent in all cases where we are *checking* against
488 a supplied signature (as opposed to inferring a type), we adopt the
489 rule: 
490
491         a signature does not need to quantify over implicit params.
492
493 [This represents a (rather marginal) change of policy since GHC 5.02,
494 which *required* an explicit signature to quantify over all implicit
495 params for the reasons mentioned above.]
496
497 But that raises a new question.  Consider 
498
499         Given (signature)       ?x::Int
500         Wanted (inferred)       ?x::Int, ?y::Bool
501
502 Clearly we want to discharge the ?x and float the ?y out.  But
503 what is the criterion that distinguishes them?  Clearly it isn't
504 what free type variables they have.  The Right Thing seems to be
505 to float a constraint that
506         neither mentions any of the quantified type variables
507         nor any of the quantified implicit parameters
508
509 See the predicate isFreeWhenChecking.
510
511
512 Question 3: monomorphism
513 ~~~~~~~~~~~~~~~~~~~~~~~~
514 There's a nasty corner case when the monomorphism restriction bites:
515
516         z = (x::Int) + ?y
517
518 The argument above suggests that we *must* generalise
519 over the ?y parameter, to get
520         z :: (?y::Int) => Int,
521 but the monomorphism restriction says that we *must not*, giving
522         z :: Int.
523 Why does the momomorphism restriction say this?  Because if you have
524
525         let z = x + ?y in z+z
526
527 you might not expect the addition to be done twice --- but it will if
528 we follow the argument of Question 2 and generalise over ?y.
529
530
531 Question 4: top level
532 ~~~~~~~~~~~~~~~~~~~~~
533 At the top level, monomorhism makes no sense at all.
534
535     module Main where
536         main = let ?x = 5 in print foo
537
538         foo = woggle 3
539
540         woggle :: (?x :: Int) => Int -> Int
541         woggle y = ?x + y
542
543 We definitely don't want (foo :: Int) with a top-level implicit parameter
544 (?x::Int) becuase there is no way to bind it.  
545
546
547 Possible choices
548 ~~~~~~~~~~~~~~~~
549 (A) Always generalise over implicit parameters
550     Bindings that fall under the monomorphism restriction can't
551         be generalised
552
553     Consequences:
554         * Inlining remains valid
555         * No unexpected loss of sharing
556         * But simple bindings like
557                 z = ?y + 1
558           will be rejected, unless you add an explicit type signature
559           (to avoid the monomorphism restriction)
560                 z :: (?y::Int) => Int
561                 z = ?y + 1
562           This seems unacceptable
563
564 (B) Monomorphism restriction "wins"
565     Bindings that fall under the monomorphism restriction can't
566         be generalised
567     Always generalise over implicit parameters *except* for bindings
568         that fall under the monomorphism restriction
569
570     Consequences
571         * Inlining isn't valid in general
572         * No unexpected loss of sharing
573         * Simple bindings like
574                 z = ?y + 1
575           accepted (get value of ?y from binding site)
576
577 (C) Always generalise over implicit parameters
578     Bindings that fall under the monomorphism restriction can't
579         be generalised, EXCEPT for implicit parameters
580     Consequences
581         * Inlining remains valid
582         * Unexpected loss of sharing (from the extra generalisation)
583         * Simple bindings like
584                 z = ?y + 1
585           accepted (get value of ?y from occurrence sites)
586
587
588 Discussion
589 ~~~~~~~~~~
590 None of these choices seems very satisfactory.  But at least we should
591 decide which we want to do.
592
593 It's really not clear what is the Right Thing To Do.  If you see
594
595         z = (x::Int) + ?y
596
597 would you expect the value of ?y to be got from the *occurrence sites*
598 of 'z', or from the valuue of ?y at the *definition* of 'z'?  In the
599 case of function definitions, the answer is clearly the former, but
600 less so in the case of non-fucntion definitions.   On the other hand,
601 if we say that we get the value of ?y from the definition site of 'z',
602 then inlining 'z' might change the semantics of the program.
603
604 Choice (C) really says "the monomorphism restriction doesn't apply
605 to implicit parameters".  Which is fine, but remember that every
606 innocent binding 'x = ...' that mentions an implicit parameter in
607 the RHS becomes a *function* of that parameter, called at each
608 use of 'x'.  Now, the chances are that there are no intervening 'with'
609 clauses that bind ?y, so a decent compiler should common up all
610 those function calls.  So I think I strongly favour (C).  Indeed,
611 one could make a similar argument for abolishing the monomorphism
612 restriction altogether.
613
614 BOTTOM LINE: we choose (B) at present.  See tcSimplifyRestricted
615
616
617
618 %************************************************************************
619 %*                                                                      *
620 \subsection{tcSimplifyInfer}
621 %*                                                                      *
622 %************************************************************************
623
624 tcSimplify is called when we *inferring* a type.  Here's the overall game plan:
625
626     1. Compute Q = grow( fvs(T), C )
627
628     2. Partition C based on Q into Ct and Cq.  Notice that ambiguous
629        predicates will end up in Ct; we deal with them at the top level
630
631     3. Try improvement, using functional dependencies
632
633     4. If Step 3 did any unification, repeat from step 1
634        (Unification can change the result of 'grow'.)
635
636 Note: we don't reduce dictionaries in step 2.  For example, if we have
637 Eq (a,b), we don't simplify to (Eq a, Eq b).  So Q won't be different
638 after step 2.  However note that we may therefore quantify over more
639 type variables than we absolutely have to.
640
641 For the guts, we need a loop, that alternates context reduction and
642 improvement with unification.  E.g. Suppose we have
643
644         class C x y | x->y where ...
645
646 and tcSimplify is called with:
647         (C Int a, C Int b)
648 Then improvement unifies a with b, giving
649         (C Int a, C Int a)
650
651 If we need to unify anything, we rattle round the whole thing all over
652 again.
653
654
655 \begin{code}
656 tcSimplifyInfer
657         :: SDoc
658         -> TcTyVarSet           -- fv(T); type vars
659         -> [Inst]               -- Wanted
660         -> TcM ([TcTyVar],      -- Tyvars to quantify (zonked)
661                 [Inst],         -- Dict Ids that must be bound here (zonked)
662                 TcDictBinds)    -- Bindings
663         -- Any free (escaping) Insts are tossed into the environment
664 \end{code}
665
666
667 \begin{code}
668 tcSimplifyInfer doc tau_tvs wanted
669   = do  { tau_tvs' <- zonkTcTyVarsAndFV (varSetElems tau_tvs)
670         ; wanted' <- mappM zonkInst wanted      -- Zonk before deciding quantified tyvars
671         ; gbl_tvs  <- tcGetGlobalTyVars
672         ; let preds = fdPredsOfInsts wanted'
673               qtvs  = grow preds tau_tvs' `minusVarSet` oclose preds gbl_tvs
674               (free, bound) = partition (isFreeWhenInferring qtvs) wanted'
675         ; traceTc (text "infer" <+> (ppr preds $$ ppr (grow preds tau_tvs') $$ ppr gbl_tvs $$ ppr (oclose preds gbl_tvs) $$ ppr free $$ ppr bound))
676         ; extendLIEs free
677
678                 -- To make types simple, reduce as much as possible
679         ; let try_me inst = ReduceMe AddSCs
680         ; (irreds, binds) <- checkLoop (mkRedEnv doc try_me []) bound
681
682         ; qtvs' <- zonkQuantifiedTyVars (varSetElems qtvs)
683
684         -- We can't abstract over implications
685         ; let (dicts, implics) = partition isDict irreds
686         ; loc <- getInstLoc (ImplicOrigin doc)
687         ; implic_bind <- bindIrreds loc qtvs' dicts implics
688
689         ; return (qtvs', dicts, binds `unionBags` implic_bind) }
690         -- NB: when we are done, we might have some bindings, but
691         -- the final qtvs might be empty.  See Note [NO TYVARS] below.
692 \end{code}
693
694 \begin{code}
695 -----------------------------------------------------------
696 -- tcSimplifyInferCheck is used when we know the constraints we are to simplify
697 -- against, but we don't know the type variables over which we are going to quantify.
698 -- This happens when we have a type signature for a mutually recursive group
699 tcSimplifyInferCheck
700          :: InstLoc
701          -> TcTyVarSet          -- fv(T)
702          -> [Inst]              -- Given
703          -> [Inst]              -- Wanted
704          -> TcM ([TyVar],       -- Fully zonked, and quantified
705                  TcDictBinds)   -- Bindings
706
707 tcSimplifyInferCheck loc tau_tvs givens wanteds
708   = do  { (irreds, binds) <- innerCheckLoop loc givens wanteds
709
710         -- Figure out which type variables to quantify over
711         -- You might think it should just be the signature tyvars,
712         -- but in bizarre cases you can get extra ones
713         --      f :: forall a. Num a => a -> a
714         --      f x = fst (g (x, head [])) + 1
715         --      g a b = (b,a)
716         -- Here we infer g :: forall a b. a -> b -> (b,a)
717         -- We don't want g to be monomorphic in b just because
718         -- f isn't quantified over b.
719         ; let all_tvs = varSetElems (tau_tvs `unionVarSet` tyVarsOfInsts givens)
720         ; all_tvs <- zonkTcTyVarsAndFV all_tvs
721         ; gbl_tvs <- tcGetGlobalTyVars
722         ; let qtvs = varSetElems (all_tvs `minusVarSet` gbl_tvs)
723                 -- We could close gbl_tvs, but its not necessary for
724                 -- soundness, and it'll only affect which tyvars, not which
725                 -- dictionaries, we quantify over
726
727         ; qtvs' <- zonkQuantifiedTyVars qtvs
728
729                 -- Now we are back to normal (c.f. tcSimplCheck)
730         ; implic_bind <- bindIrreds loc qtvs' givens irreds
731
732         ; return (qtvs', binds `unionBags` implic_bind) }
733 \end{code}
734
735 Note [Squashing methods]
736 ~~~~~~~~~~~~~~~~~~~~~~~~~
737 Be careful if you want to float methods more:
738         truncate :: forall a. RealFrac a => forall b. Integral b => a -> b
739 From an application (truncate f i) we get
740         t1 = truncate at f
741         t2 = t1 at i
742 If we have also have a second occurrence of truncate, we get
743         t3 = truncate at f
744         t4 = t3 at i
745 When simplifying with i,f free, we might still notice that
746 t1=t3; but alas, the binding for t2 (which mentions t1)
747 may continue to float out!
748
749
750 Note [NO TYVARS]
751 ~~~~~~~~~~~~~~~~~
752         class Y a b | a -> b where
753             y :: a -> X b
754         
755         instance Y [[a]] a where
756             y ((x:_):_) = X x
757         
758         k :: X a -> X a -> X a
759
760         g :: Num a => [X a] -> [X a]
761         g xs = h xs
762             where
763             h ys = ys ++ map (k (y [[0]])) xs
764
765 The excitement comes when simplifying the bindings for h.  Initially
766 try to simplify {y @ [[t1]] t2, 0 @ t1}, with initial qtvs = {t2}.
767 From this we get t1:=:t2, but also various bindings.  We can't forget
768 the bindings (because of [LOOP]), but in fact t1 is what g is
769 polymorphic in.  
770
771 The net effect of [NO TYVARS] 
772
773 \begin{code}
774 isFreeWhenInferring :: TyVarSet -> Inst -> Bool
775 isFreeWhenInferring qtvs inst
776   =  isFreeWrtTyVars qtvs inst  -- Constrains no quantified vars
777   && isInheritableInst inst     -- and no implicit parameter involved
778                                 --   see Note [Inheriting implicit parameters]
779
780 {-      No longer used (with implication constraints)
781 isFreeWhenChecking :: TyVarSet  -- Quantified tyvars
782                    -> NameSet   -- Quantified implicit parameters
783                    -> Inst -> Bool
784 isFreeWhenChecking qtvs ips inst
785   =  isFreeWrtTyVars qtvs inst
786   && isFreeWrtIPs    ips inst
787 -}
788
789 isFreeWrtTyVars qtvs inst = tyVarsOfInst inst `disjointVarSet` qtvs
790 isFreeWrtIPs     ips inst = not (any (`elemNameSet` ips) (ipNamesOfInst inst))
791 \end{code}
792
793
794 %************************************************************************
795 %*                                                                      *
796 \subsection{tcSimplifyCheck}
797 %*                                                                      *
798 %************************************************************************
799
800 @tcSimplifyCheck@ is used when we know exactly the set of variables
801 we are going to quantify over.  For example, a class or instance declaration.
802
803 \begin{code}
804 -----------------------------------------------------------
805 -- tcSimplifyCheck is used when checking expression type signatures,
806 -- class decls, instance decls etc.
807 tcSimplifyCheck :: InstLoc
808                 -> [TcTyVar]            -- Quantify over these
809                 -> [Inst]               -- Given
810                 -> [Inst]               -- Wanted
811                 -> TcM TcDictBinds      -- Bindings
812 tcSimplifyCheck loc qtvs givens wanteds 
813   = ASSERT( all isTcTyVar qtvs && all isSkolemTyVar qtvs )
814     do  { (irreds, binds) <- innerCheckLoop loc givens wanteds
815         ; implic_bind <- bindIrreds loc qtvs givens irreds
816         ; return (binds `unionBags` implic_bind) }
817
818 -----------------------------------------------------------
819 -- tcSimplifyCheckPat is used for existential pattern match
820 tcSimplifyCheckPat :: InstLoc
821                    -> [CoVar] -> Refinement
822                    -> [TcTyVar]         -- Quantify over these
823                    -> [Inst]            -- Given
824                    -> [Inst]            -- Wanted
825                    -> TcM TcDictBinds   -- Bindings
826 tcSimplifyCheckPat loc co_vars reft qtvs givens wanteds
827   = ASSERT( all isTcTyVar qtvs && all isSkolemTyVar qtvs )
828     do  { (irreds, binds) <- innerCheckLoop loc givens wanteds
829         ; implic_bind <- bindIrredsR loc qtvs co_vars reft 
830                                     givens irreds
831         ; return (binds `unionBags` implic_bind) }
832
833 -----------------------------------------------------------
834 bindIrreds :: InstLoc -> [TcTyVar]
835            -> [Inst] -> [Inst]
836            -> TcM TcDictBinds
837 bindIrreds loc qtvs givens irreds 
838   = bindIrredsR loc qtvs [] emptyRefinement givens irreds
839
840 bindIrredsR :: InstLoc -> [TcTyVar] -> [CoVar]
841             -> Refinement -> [Inst] -> [Inst]
842             -> TcM TcDictBinds  
843 -- Make a binding that binds 'irreds', by generating an implication
844 -- constraint for them, *and* throwing the constraint into the LIE
845 bindIrredsR loc qtvs co_vars reft givens irreds
846   | null irreds
847   = return emptyBag
848   | otherwise
849   = do  { let givens' = filter isDict givens
850                 -- The givens can include methods
851
852            -- If there are no 'givens', then it's safe to 
853            -- partition the 'wanteds' by their qtvs, thereby trimming irreds
854            -- See Note [Freeness and implications]
855         ; irreds' <- if null givens'
856                      then do
857                         { let qtv_set = mkVarSet qtvs
858                               (frees, real_irreds) = partition (isFreeWrtTyVars qtv_set) irreds
859                         ; extendLIEs frees
860                         ; return real_irreds }
861                      else return irreds
862         
863         ; let all_tvs = qtvs ++ co_vars -- Abstract over all these
864         ; (implics, bind) <- makeImplicationBind loc all_tvs reft givens' irreds'
865                                 -- This call does the real work
866         ; extendLIEs implics
867         ; return bind } 
868
869
870 makeImplicationBind :: InstLoc -> [TcTyVar] -> Refinement
871                     -> [Inst] -> [Inst]
872                     -> TcM ([Inst], TcDictBinds)
873 -- Make a binding that binds 'irreds', by generating an implication
874 -- constraint for them, *and* throwing the constraint into the LIE
875 -- The binding looks like
876 --      (ir1, .., irn) = f qtvs givens
877 -- where f is (evidence for) the new implication constraint
878 --
879 -- This binding must line up the 'rhs' in reduceImplication
880 makeImplicationBind loc all_tvs reft
881                     givens      -- Guaranteed all Dicts
882                     irreds
883  | null irreds                  -- If there are no irreds, we are done
884  = return ([], emptyBag)
885  | otherwise                    -- Otherwise we must generate a binding
886  = do   { uniq <- newUnique 
887         ; span <- getSrcSpanM
888         ; let name = mkInternalName uniq (mkVarOcc "ic") (srcSpanStart span)
889               implic_inst = ImplicInst { tci_name = name, tci_reft = reft,
890                                          tci_tyvars = all_tvs, 
891                                          tci_given = givens,
892                                          tci_wanted = irreds, tci_loc = loc }
893
894         ; let n_irreds = length irreds
895               irred_ids = map instToId irreds
896               tup_ty = mkTupleTy Boxed n_irreds (map idType irred_ids)
897               pat = TuplePat (map nlVarPat irred_ids) Boxed tup_ty
898               rhs = L span (mkHsWrap co (HsVar (instToId implic_inst)))
899               co  = mkWpApps (map instToId givens) <.> mkWpTyApps (mkTyVarTys all_tvs)
900               bind | n_irreds==1 = VarBind (head irred_ids) rhs
901                    | otherwise   = PatBind { pat_lhs = L span pat, 
902                                              pat_rhs = unguardedGRHSs rhs, 
903                                              pat_rhs_ty = tup_ty,
904                                              bind_fvs = placeHolderNames }
905         ; -- pprTrace "Make implic inst" (ppr implic_inst) $
906           return ([implic_inst], unitBag (L span bind)) }
907
908 -----------------------------------------------------------
909 topCheckLoop :: SDoc
910              -> [Inst]                  -- Wanted
911              -> TcM ([Inst], TcDictBinds)
912
913 topCheckLoop doc wanteds
914   = checkLoop (mkRedEnv doc try_me []) wanteds
915   where
916     try_me inst = ReduceMe AddSCs
917
918 -----------------------------------------------------------
919 innerCheckLoop :: InstLoc
920                -> [Inst]                -- Given
921                -> [Inst]                -- Wanted
922                -> TcM ([Inst], TcDictBinds)
923
924 innerCheckLoop inst_loc givens wanteds
925   = checkLoop env wanteds
926   where
927     env = mkRedEnv (pprInstLoc inst_loc) try_me givens
928
929     try_me inst | isMethodOrLit inst = ReduceMe AddSCs
930                 | otherwise          = Stop
931         -- When checking against a given signature 
932         -- we MUST be very gentle: Note [Check gently]
933 \end{code}
934
935 Note [Check gently]
936 ~~~~~~~~~~~~~~~~~~~~
937 We have to very careful about not simplifying too vigorously
938 Example:  
939   data T a where
940     MkT :: a -> T [a]
941
942   f :: Show b => T b -> b
943   f (MkT x) = show [x]
944
945 Inside the pattern match, which binds (a:*, x:a), we know that
946         b ~ [a]
947 Hence we have a dictionary for Show [a] available; and indeed we 
948 need it.  We are going to build an implication contraint
949         forall a. (b~[a]) => Show [a]
950 Later, we will solve this constraint using the knowledge (Show b)
951         
952 But we MUST NOT reduce (Show [a]) to (Show a), else the whole
953 thing becomes insoluble.  So we simplify gently (get rid of literals
954 and methods only, plus common up equal things), deferring the real
955 work until top level, when we solve the implication constraint
956 with topCheckLooop.
957
958
959 \begin{code}
960 -----------------------------------------------------------
961 checkLoop :: RedEnv
962           -> [Inst]                     -- Wanted
963           -> TcM ([Inst], TcDictBinds)
964 -- Precondition: givens are completely rigid
965
966 checkLoop env wanteds
967   = do { -- Givens are skolems, so no need to zonk them
968          wanteds' <- mappM zonkInst wanteds
969
970         ; (improved, binds, irreds) <- reduceContext env wanteds'
971
972         ; if not improved then
973              return (irreds, binds)
974           else do
975
976         -- If improvement did some unification, we go round again.
977         -- We start again with irreds, not wanteds
978         -- Using an instance decl might have introduced a fresh type variable
979         -- which might have been unified, so we'd get an infinite loop
980         -- if we started again with wanteds!  See Note [LOOP]
981         { (irreds1, binds1) <- checkLoop env irreds
982         ; return (irreds1, binds `unionBags` binds1) } }
983 \end{code}
984
985 Note [LOOP]
986 ~~~~~~~~~~~
987         class If b t e r | b t e -> r
988         instance If T t e t
989         instance If F t e e
990         class Lte a b c | a b -> c where lte :: a -> b -> c
991         instance Lte Z b T
992         instance (Lte a b l,If l b a c) => Max a b c
993
994 Wanted: Max Z (S x) y
995
996 Then we'll reduce using the Max instance to:
997         (Lte Z (S x) l, If l (S x) Z y)
998 and improve by binding l->T, after which we can do some reduction
999 on both the Lte and If constraints.  What we *can't* do is start again
1000 with (Max Z (S x) y)!
1001
1002
1003
1004 %************************************************************************
1005 %*                                                                      *
1006                 tcSimplifySuperClasses
1007 %*                                                                      *
1008 %************************************************************************
1009
1010 Note [SUPERCLASS-LOOP 1]
1011 ~~~~~~~~~~~~~~~~~~~~~~~~
1012 We have to be very, very careful when generating superclasses, lest we
1013 accidentally build a loop. Here's an example:
1014
1015   class S a
1016
1017   class S a => C a where { opc :: a -> a }
1018   class S b => D b where { opd :: b -> b }
1019   
1020   instance C Int where
1021      opc = opd
1022   
1023   instance D Int where
1024      opd = opc
1025
1026 From (instance C Int) we get the constraint set {ds1:S Int, dd:D Int}
1027 Simplifying, we may well get:
1028         $dfCInt = :C ds1 (opd dd)
1029         dd  = $dfDInt
1030         ds1 = $p1 dd
1031 Notice that we spot that we can extract ds1 from dd.  
1032
1033 Alas!  Alack! We can do the same for (instance D Int):
1034
1035         $dfDInt = :D ds2 (opc dc)
1036         dc  = $dfCInt
1037         ds2 = $p1 dc
1038
1039 And now we've defined the superclass in terms of itself.
1040
1041 Solution: never generate a superclass selectors at all when
1042 satisfying the superclass context of an instance declaration.
1043
1044 Two more nasty cases are in
1045         tcrun021
1046         tcrun033
1047
1048 \begin{code}
1049 tcSimplifySuperClasses 
1050         :: InstLoc 
1051         -> [Inst]       -- Given 
1052         -> [Inst]       -- Wanted
1053         -> TcM TcDictBinds
1054 tcSimplifySuperClasses loc givens sc_wanteds
1055   = do  { (irreds, binds1) <- checkLoop env sc_wanteds
1056         ; let (tidy_env, tidy_irreds) = tidyInsts irreds
1057         ; reportNoInstances tidy_env (Just (loc, givens)) tidy_irreds
1058         ; return binds1 }
1059   where
1060     env = mkRedEnv (pprInstLoc loc) try_me givens
1061     try_me inst = ReduceMe NoSCs
1062         -- Like topCheckLoop, but with NoSCs
1063 \end{code}
1064
1065
1066 %************************************************************************
1067 %*                                                                      *
1068 \subsection{tcSimplifyRestricted}
1069 %*                                                                      *
1070 %************************************************************************
1071
1072 tcSimplifyRestricted infers which type variables to quantify for a 
1073 group of restricted bindings.  This isn't trivial.
1074
1075 Eg1:    id = \x -> x
1076         We want to quantify over a to get id :: forall a. a->a
1077         
1078 Eg2:    eq = (==)
1079         We do not want to quantify over a, because there's an Eq a 
1080         constraint, so we get eq :: a->a->Bool  (notice no forall)
1081
1082 So, assume:
1083         RHS has type 'tau', whose free tyvars are tau_tvs
1084         RHS has constraints 'wanteds'
1085
1086 Plan A (simple)
1087   Quantify over (tau_tvs \ ftvs(wanteds))
1088   This is bad. The constraints may contain (Monad (ST s))
1089   where we have         instance Monad (ST s) where...
1090   so there's no need to be monomorphic in s!
1091
1092   Also the constraint might be a method constraint,
1093   whose type mentions a perfectly innocent tyvar:
1094           op :: Num a => a -> b -> a
1095   Here, b is unconstrained.  A good example would be
1096         foo = op (3::Int)
1097   We want to infer the polymorphic type
1098         foo :: forall b. b -> b
1099
1100
1101 Plan B (cunning, used for a long time up to and including GHC 6.2)
1102   Step 1: Simplify the constraints as much as possible (to deal 
1103   with Plan A's problem).  Then set
1104         qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
1105
1106   Step 2: Now simplify again, treating the constraint as 'free' if 
1107   it does not mention qtvs, and trying to reduce it otherwise.
1108   The reasons for this is to maximise sharing.
1109
1110   This fails for a very subtle reason.  Suppose that in the Step 2
1111   a constraint (Foo (Succ Zero) (Succ Zero) b) gets thrown upstairs as 'free'.
1112   In the Step 1 this constraint might have been simplified, perhaps to
1113   (Foo Zero Zero b), AND THEN THAT MIGHT BE IMPROVED, to bind 'b' to 'T'.
1114   This won't happen in Step 2... but that in turn might prevent some other
1115   constraint (Baz [a] b) being simplified (e.g. via instance Baz [a] T where {..}) 
1116   and that in turn breaks the invariant that no constraints are quantified over.
1117
1118   Test typecheck/should_compile/tc177 (which failed in GHC 6.2) demonstrates
1119   the problem.
1120
1121
1122 Plan C (brutal)
1123   Step 1: Simplify the constraints as much as possible (to deal 
1124   with Plan A's problem).  Then set
1125         qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
1126   Return the bindings from Step 1.
1127   
1128
1129 A note about Plan C (arising from "bug" reported by George Russel March 2004)
1130 Consider this:
1131
1132       instance (HasBinary ty IO) => HasCodedValue ty
1133
1134       foo :: HasCodedValue a => String -> IO a
1135
1136       doDecodeIO :: HasCodedValue a => () -> () -> IO a
1137       doDecodeIO codedValue view  
1138         = let { act = foo "foo" } in  act
1139
1140 You might think this should work becuase the call to foo gives rise to a constraint
1141 (HasCodedValue t), which can be satisfied by the type sig for doDecodeIO.  But the
1142 restricted binding act = ... calls tcSimplifyRestricted, and PlanC simplifies the
1143 constraint using the (rather bogus) instance declaration, and now we are stuffed.
1144
1145 I claim this is not really a bug -- but it bit Sergey as well as George.  So here's
1146 plan D
1147
1148
1149 Plan D (a variant of plan B)
1150   Step 1: Simplify the constraints as much as possible (to deal 
1151   with Plan A's problem), BUT DO NO IMPROVEMENT.  Then set
1152         qtvs = tau_tvs \ ftvs( simplify( wanteds ) )
1153
1154   Step 2: Now simplify again, treating the constraint as 'free' if 
1155   it does not mention qtvs, and trying to reduce it otherwise.
1156
1157   The point here is that it's generally OK to have too few qtvs; that is,
1158   to make the thing more monomorphic than it could be.  We don't want to
1159   do that in the common cases, but in wierd cases it's ok: the programmer
1160   can always add a signature.  
1161
1162   Too few qtvs => too many wanteds, which is what happens if you do less
1163   improvement.
1164
1165
1166 \begin{code}
1167 tcSimplifyRestricted    -- Used for restricted binding groups
1168                         -- i.e. ones subject to the monomorphism restriction
1169         :: SDoc
1170         -> TopLevelFlag
1171         -> [Name]               -- Things bound in this group
1172         -> TcTyVarSet           -- Free in the type of the RHSs
1173         -> [Inst]               -- Free in the RHSs
1174         -> TcM ([TyVar],        -- Tyvars to quantify (zonked)
1175                 TcDictBinds)    -- Bindings
1176         -- tcSimpifyRestricted returns no constraints to
1177         -- quantify over; by definition there are none.
1178         -- They are all thrown back in the LIE
1179
1180 tcSimplifyRestricted doc top_lvl bndrs tau_tvs wanteds
1181         -- Zonk everything in sight
1182   = do  { wanteds' <- mappM zonkInst wanteds
1183
1184         -- 'ReduceMe': Reduce as far as we can.  Don't stop at
1185         -- dicts; the idea is to get rid of as many type
1186         -- variables as possible, and we don't want to stop
1187         -- at (say) Monad (ST s), because that reduces
1188         -- immediately, with no constraint on s.
1189         --
1190         -- BUT do no improvement!  See Plan D above
1191         -- HOWEVER, some unification may take place, if we instantiate
1192         --          a method Inst with an equality constraint
1193         ; let env = mkNoImproveRedEnv doc (\i -> ReduceMe AddSCs)
1194         ; (_imp, _binds, constrained_dicts) <- reduceContext env wanteds'
1195
1196         -- Next, figure out the tyvars we will quantify over
1197         ; tau_tvs' <- zonkTcTyVarsAndFV (varSetElems tau_tvs)
1198         ; gbl_tvs' <- tcGetGlobalTyVars
1199         ; constrained_dicts' <- mappM zonkInst constrained_dicts
1200
1201         ; let constrained_tvs' = tyVarsOfInsts constrained_dicts'
1202               qtvs = (tau_tvs' `minusVarSet` oclose (fdPredsOfInsts constrained_dicts) gbl_tvs')
1203                          `minusVarSet` constrained_tvs'
1204         ; traceTc (text "tcSimplifyRestricted" <+> vcat [
1205                 pprInsts wanteds, pprInsts constrained_dicts',
1206                 ppr _binds,
1207                 ppr constrained_tvs', ppr tau_tvs', ppr qtvs ])
1208
1209         -- The first step may have squashed more methods than
1210         -- necessary, so try again, this time more gently, knowing the exact
1211         -- set of type variables to quantify over.
1212         --
1213         -- We quantify only over constraints that are captured by qtvs;
1214         -- these will just be a subset of non-dicts.  This in contrast
1215         -- to normal inference (using isFreeWhenInferring) in which we quantify over
1216         -- all *non-inheritable* constraints too.  This implements choice
1217         -- (B) under "implicit parameter and monomorphism" above.
1218         --
1219         -- Remember that we may need to do *some* simplification, to
1220         -- (for example) squash {Monad (ST s)} into {}.  It's not enough
1221         -- just to float all constraints
1222         --
1223         -- At top level, we *do* squash methods becuase we want to 
1224         -- expose implicit parameters to the test that follows
1225         ; let is_nested_group = isNotTopLevel top_lvl
1226               try_me inst | isFreeWrtTyVars qtvs inst,
1227                            (is_nested_group || isDict inst) = Stop
1228                           | otherwise            = ReduceMe AddSCs
1229               env = mkNoImproveRedEnv doc try_me
1230         ; (_imp, binds, irreds) <- reduceContext env wanteds'
1231
1232         -- See "Notes on implicit parameters, Question 4: top level"
1233         ; ASSERT( all (isFreeWrtTyVars qtvs) irreds )   -- None should be captured
1234           if is_nested_group then
1235                 extendLIEs irreds
1236           else do { let (bad_ips, non_ips) = partition isIPDict irreds
1237                   ; addTopIPErrs bndrs bad_ips
1238                   ; extendLIEs non_ips }
1239
1240         ; qtvs' <- zonkQuantifiedTyVars (varSetElems qtvs)
1241         ; return (qtvs', binds) }
1242 \end{code}
1243
1244
1245 %************************************************************************
1246 %*                                                                      *
1247                 tcSimplifyRuleLhs
1248 %*                                                                      *
1249 %************************************************************************
1250
1251 On the LHS of transformation rules we only simplify methods and constants,
1252 getting dictionaries.  We want to keep all of them unsimplified, to serve
1253 as the available stuff for the RHS of the rule.
1254
1255 Example.  Consider the following left-hand side of a rule
1256         
1257         f (x == y) (y > z) = ...
1258
1259 If we typecheck this expression we get constraints
1260
1261         d1 :: Ord a, d2 :: Eq a
1262
1263 We do NOT want to "simplify" to the LHS
1264
1265         forall x::a, y::a, z::a, d1::Ord a.
1266           f ((==) (eqFromOrd d1) x y) ((>) d1 y z) = ...
1267
1268 Instead we want 
1269
1270         forall x::a, y::a, z::a, d1::Ord a, d2::Eq a.
1271           f ((==) d2 x y) ((>) d1 y z) = ...
1272
1273 Here is another example:
1274
1275         fromIntegral :: (Integral a, Num b) => a -> b
1276         {-# RULES "foo"  fromIntegral = id :: Int -> Int #-}
1277
1278 In the rule, a=b=Int, and Num Int is a superclass of Integral Int. But
1279 we *dont* want to get
1280
1281         forall dIntegralInt.
1282            fromIntegral Int Int dIntegralInt (scsel dIntegralInt) = id Int
1283
1284 because the scsel will mess up RULE matching.  Instead we want
1285
1286         forall dIntegralInt, dNumInt.
1287           fromIntegral Int Int dIntegralInt dNumInt = id Int
1288
1289 Even if we have 
1290
1291         g (x == y) (y == z) = ..
1292
1293 where the two dictionaries are *identical*, we do NOT WANT
1294
1295         forall x::a, y::a, z::a, d1::Eq a
1296           f ((==) d1 x y) ((>) d1 y z) = ...
1297
1298 because that will only match if the dict args are (visibly) equal.
1299 Instead we want to quantify over the dictionaries separately.
1300
1301 In short, tcSimplifyRuleLhs must *only* squash LitInst and MethInts, leaving
1302 all dicts unchanged, with absolutely no sharing.  It's simpler to do this
1303 from scratch, rather than further parameterise simpleReduceLoop etc
1304
1305 \begin{code}
1306 tcSimplifyRuleLhs :: [Inst] -> TcM ([Inst], TcDictBinds)
1307 tcSimplifyRuleLhs wanteds
1308   = go [] emptyBag wanteds
1309   where
1310     go dicts binds []
1311         = return (dicts, binds)
1312     go dicts binds (w:ws)
1313         | isDict w
1314         = go (w:dicts) binds ws
1315         | otherwise
1316         = do { w' <- zonkInst w  -- So that (3::Int) does not generate a call
1317                                  -- to fromInteger; this looks fragile to me
1318              ; lookup_result <- lookupSimpleInst w'
1319              ; case lookup_result of
1320                  GenInst ws' rhs -> go dicts (addBind binds w rhs) (ws' ++ ws)
1321                  NoInstance      -> pprPanic "tcSimplifyRuleLhs" (ppr w)
1322           }
1323 \end{code}
1324
1325 tcSimplifyBracket is used when simplifying the constraints arising from
1326 a Template Haskell bracket [| ... |].  We want to check that there aren't
1327 any constraints that can't be satisfied (e.g. Show Foo, where Foo has no
1328 Show instance), but we aren't otherwise interested in the results.
1329 Nor do we care about ambiguous dictionaries etc.  We will type check
1330 this bracket again at its usage site.
1331
1332 \begin{code}
1333 tcSimplifyBracket :: [Inst] -> TcM ()
1334 tcSimplifyBracket wanteds
1335   = do  { topCheckLoop doc wanteds
1336         ; return () }
1337   where
1338     doc = text "tcSimplifyBracket"
1339 \end{code}
1340
1341
1342 %************************************************************************
1343 %*                                                                      *
1344 \subsection{Filtering at a dynamic binding}
1345 %*                                                                      *
1346 %************************************************************************
1347
1348 When we have
1349         let ?x = R in B
1350
1351 we must discharge all the ?x constraints from B.  We also do an improvement
1352 step; if we have ?x::t1 and ?x::t2 we must unify t1, t2.
1353
1354 Actually, the constraints from B might improve the types in ?x. For example
1355
1356         f :: (?x::Int) => Char -> Char
1357         let ?x = 3 in f 'c'
1358
1359 then the constraint (?x::Int) arising from the call to f will
1360 force the binding for ?x to be of type Int.
1361
1362 \begin{code}
1363 tcSimplifyIPs :: [Inst]         -- The implicit parameters bound here
1364               -> [Inst]         -- Wanted
1365               -> TcM TcDictBinds
1366         -- We need a loop so that we do improvement, and then
1367         -- (next time round) generate a binding to connect the two
1368         --      let ?x = e in ?x
1369         -- Here the two ?x's have different types, and improvement 
1370         -- makes them the same.
1371
1372 tcSimplifyIPs given_ips wanteds
1373   = do  { wanteds'   <- mappM zonkInst wanteds
1374         ; given_ips' <- mappM zonkInst given_ips
1375                 -- Unusually for checking, we *must* zonk the given_ips
1376
1377         ; let env = mkRedEnv doc try_me given_ips'
1378         ; (improved, binds, irreds) <- reduceContext env wanteds'
1379
1380         ; if not improved then 
1381                 ASSERT( all is_free irreds )
1382                 do { extendLIEs irreds
1383                    ; return binds }
1384           else
1385                 tcSimplifyIPs given_ips wanteds }
1386   where
1387     doc    = text "tcSimplifyIPs" <+> ppr given_ips
1388     ip_set = mkNameSet (ipNamesOfInsts given_ips)
1389     is_free inst = isFreeWrtIPs ip_set inst
1390
1391         -- Simplify any methods that mention the implicit parameter
1392     try_me inst | is_free inst = Stop
1393                 | otherwise    = ReduceMe NoSCs
1394 \end{code}
1395
1396
1397 %************************************************************************
1398 %*                                                                      *
1399 \subsection[binds-for-local-funs]{@bindInstsOfLocalFuns@}
1400 %*                                                                      *
1401 %************************************************************************
1402
1403 When doing a binding group, we may have @Insts@ of local functions.
1404 For example, we might have...
1405 \begin{verbatim}
1406 let f x = x + 1     -- orig local function (overloaded)
1407     f.1 = f Int     -- two instances of f
1408     f.2 = f Float
1409  in
1410     (f.1 5, f.2 6.7)
1411 \end{verbatim}
1412 The point is: we must drop the bindings for @f.1@ and @f.2@ here,
1413 where @f@ is in scope; those @Insts@ must certainly not be passed
1414 upwards towards the top-level.  If the @Insts@ were binding-ified up
1415 there, they would have unresolvable references to @f@.
1416
1417 We pass in an @init_lie@ of @Insts@ and a list of locally-bound @Ids@.
1418 For each method @Inst@ in the @init_lie@ that mentions one of the
1419 @Ids@, we create a binding.  We return the remaining @Insts@ (in an
1420 @LIE@), as well as the @HsBinds@ generated.
1421
1422 \begin{code}
1423 bindInstsOfLocalFuns :: [Inst] -> [TcId] -> TcM TcDictBinds
1424 -- Simlifies only MethodInsts, and generate only bindings of form 
1425 --      fm = f tys dicts
1426 -- We're careful not to even generate bindings of the form
1427 --      d1 = d2
1428 -- You'd think that'd be fine, but it interacts with what is
1429 -- arguably a bug in Match.tidyEqnInfo (see notes there)
1430
1431 bindInstsOfLocalFuns wanteds local_ids
1432   | null overloaded_ids
1433         -- Common case
1434   = extendLIEs wanteds          `thenM_`
1435     returnM emptyLHsBinds
1436
1437   | otherwise
1438   = do  { (irreds, binds) <- checkLoop env for_me
1439         ; extendLIEs not_for_me 
1440         ; extendLIEs irreds
1441         ; return binds }
1442   where
1443     env = mkRedEnv doc try_me []
1444     doc              = text "bindInsts" <+> ppr local_ids
1445     overloaded_ids   = filter is_overloaded local_ids
1446     is_overloaded id = isOverloadedTy (idType id)
1447     (for_me, not_for_me) = partition (isMethodFor overloaded_set) wanteds
1448
1449     overloaded_set = mkVarSet overloaded_ids    -- There can occasionally be a lot of them
1450                                                 -- so it's worth building a set, so that
1451                                                 -- lookup (in isMethodFor) is faster
1452     try_me inst | isMethod inst = ReduceMe NoSCs
1453                 | otherwise     = Stop
1454 \end{code}
1455
1456
1457 %************************************************************************
1458 %*                                                                      *
1459 \subsection{Data types for the reduction mechanism}
1460 %*                                                                      *
1461 %************************************************************************
1462
1463 The main control over context reduction is here
1464
1465 \begin{code}
1466 data RedEnv 
1467   = RedEnv { red_doc    :: SDoc                 -- The context
1468            , red_try_me :: Inst -> WhatToDo
1469            , red_improve :: Bool                -- True <=> do improvement
1470            , red_givens :: [Inst]               -- All guaranteed rigid
1471                                                 -- Always dicts
1472                                                 -- but see Note [Rigidity]
1473            , red_stack  :: (Int, [Inst])        -- Recursion stack (for err msg)
1474                                                 -- See Note [RedStack]
1475   }
1476
1477 -- Note [Rigidity]
1478 -- The red_givens are rigid so far as cmpInst is concerned.
1479 -- There is one case where they are not totally rigid, namely in tcSimplifyIPs
1480 --      let ?x = e in ...
1481 -- Here, the given is (?x::a), where 'a' is not necy a rigid type
1482 -- But that doesn't affect the comparison, which is based only on mame.
1483
1484 -- Note [RedStack]
1485 -- The red_stack pair (n,insts) pair is just used for error reporting.
1486 -- 'n' is always the depth of the stack.
1487 -- The 'insts' is the stack of Insts being reduced: to produce X
1488 -- I had to produce Y, to produce Y I had to produce Z, and so on.
1489
1490
1491 mkRedEnv :: SDoc -> (Inst -> WhatToDo) -> [Inst] -> RedEnv
1492 mkRedEnv doc try_me givens
1493   = RedEnv { red_doc = doc, red_try_me = try_me,
1494              red_givens = givens, red_stack = (0,[]),
1495              red_improve = True }       
1496
1497 mkNoImproveRedEnv :: SDoc -> (Inst -> WhatToDo) -> RedEnv
1498 -- Do not do improvement; no givens
1499 mkNoImproveRedEnv doc try_me
1500   = RedEnv { red_doc = doc, red_try_me = try_me,
1501              red_givens = [], red_stack = (0,[]),
1502              red_improve = True }       
1503
1504 data WhatToDo
1505  = ReduceMe WantSCs     -- Try to reduce this
1506                         -- If there's no instance, add the inst to the 
1507                         -- irreductible ones, but don't produce an error 
1508                         -- message of any kind.
1509                         -- It might be quite legitimate such as (Eq a)!
1510
1511  | Stop         -- Return as irreducible unless it can
1512                         -- be reduced to a constant in one step
1513                         -- Do not add superclasses; see 
1514
1515 data WantSCs = NoSCs | AddSCs   -- Tells whether we should add the superclasses
1516                                 -- of a predicate when adding it to the avails
1517         -- The reason for this flag is entirely the super-class loop problem
1518         -- Note [SUPER-CLASS LOOP 1]
1519 \end{code}
1520
1521 %************************************************************************
1522 %*                                                                      *
1523 \subsection[reduce]{@reduce@}
1524 %*                                                                      *
1525 %************************************************************************
1526
1527
1528 \begin{code}
1529 reduceContext :: RedEnv
1530               -> [Inst]                 -- Wanted
1531               -> TcM (ImprovementDone,
1532                       TcDictBinds,      -- Dictionary bindings
1533                       [Inst])           -- Irreducible
1534
1535 reduceContext env wanteds
1536   = do  { traceTc (text "reduceContext" <+> (vcat [
1537              text "----------------------",
1538              red_doc env,
1539              text "given" <+> ppr (red_givens env),
1540              text "wanted" <+> ppr wanteds,
1541              text "----------------------"
1542              ]))
1543
1544         -- Build the Avail mapping from "givens"
1545         ; init_state <- foldlM addGiven emptyAvails (red_givens env)
1546
1547         -- Do the real work
1548         ; avails <- reduceList env wanteds init_state
1549
1550         ; let improved = availsImproved avails
1551         ; (binds, irreds) <- extractResults avails wanteds
1552
1553         ; traceTc (text "reduceContext end" <+> (vcat [
1554              text "----------------------",
1555              red_doc env,
1556              text "given" <+> ppr (red_givens env),
1557              text "wanted" <+> ppr wanteds,
1558              text "----",
1559              text "avails" <+> pprAvails avails,
1560              text "improved =" <+> ppr improved,
1561              text "----------------------"
1562              ]))
1563
1564         ; return (improved, binds, irreds) }
1565
1566 tcImproveOne :: Avails -> Inst -> TcM ImprovementDone
1567 tcImproveOne avails inst
1568   | not (isDict inst) = return False
1569   | otherwise
1570   = do  { inst_envs <- tcGetInstEnvs
1571         ; let eqns = improveOne (classInstances inst_envs)
1572                                 (dictPred inst, pprInstArising inst)
1573                                 [ (dictPred p, pprInstArising p)
1574                                 | p <- availsInsts avails, isDict p ]
1575                 -- Avails has all the superclasses etc (good)
1576                 -- It also has all the intermediates of the deduction (good)
1577                 -- It does not have duplicates (good)
1578                 -- NB that (?x::t1) and (?x::t2) will be held separately in avails
1579                 --    so that improve will see them separate
1580         ; traceTc (text "improveOne" <+> ppr inst)
1581         ; unifyEqns eqns }
1582
1583 unifyEqns :: [(Equation,(PredType,SDoc),(PredType,SDoc))] 
1584           -> TcM ImprovementDone
1585 unifyEqns [] = return False
1586 unifyEqns eqns
1587   = do  { traceTc (ptext SLIT("Improve:") <+> vcat (map pprEquationDoc eqns))
1588         ; mappM_ unify eqns
1589         ; return True }
1590   where
1591     unify ((qtvs, pairs), what1, what2)
1592          = addErrCtxtM (mkEqnMsg what1 what2)   $
1593            tcInstTyVars (varSetElems qtvs)      `thenM` \ (_, _, tenv) ->
1594            mapM_ (unif_pr tenv) pairs
1595     unif_pr tenv (ty1,ty2) =  unifyType (substTy tenv ty1) (substTy tenv ty2)
1596
1597 pprEquationDoc (eqn, (p1,w1), (p2,w2)) = vcat [pprEquation eqn, nest 2 (ppr p1), nest 2 (ppr p2)]
1598
1599 mkEqnMsg (pred1,from1) (pred2,from2) tidy_env
1600   = do  { pred1' <- zonkTcPredType pred1; pred2' <- zonkTcPredType pred2
1601         ; let { pred1'' = tidyPred tidy_env pred1'; pred2'' = tidyPred tidy_env pred2' }
1602         ; let msg = vcat [ptext SLIT("When using functional dependencies to combine"),
1603                           nest 2 (sep [ppr pred1'' <> comma, nest 2 from1]), 
1604                           nest 2 (sep [ppr pred2'' <> comma, nest 2 from2])]
1605         ; return (tidy_env, msg) }
1606 \end{code}
1607
1608 The main context-reduction function is @reduce@.  Here's its game plan.
1609
1610 \begin{code}
1611 reduceList :: RedEnv -> [Inst] -> Avails -> TcM Avails
1612 reduceList env@(RedEnv {red_stack = (n,stk)}) wanteds state
1613   = do  { dopts <- getDOpts
1614 #ifdef DEBUG
1615         ; if n > 8 then
1616                 dumpTcRn (hang (ptext SLIT("Interesting! Context reduction stack depth") <+> int n) 
1617                              2 (ifPprDebug (nest 2 (pprStack stk))))
1618           else return ()
1619 #endif
1620         ; if n >= ctxtStkDepth dopts then
1621             failWithTc (reduceDepthErr n stk)
1622           else
1623             go wanteds state }
1624   where
1625     go []     state = return state
1626     go (w:ws) state = do { state' <- reduce (env {red_stack = (n+1, w:stk)}) w state
1627                          ; go ws state' }
1628
1629     -- Base case: we're done!
1630 reduce env wanted avails
1631     -- It's the same as an existing inst, or a superclass thereof
1632   | Just avail <- findAvail avails wanted
1633   = returnM avails      
1634
1635   | otherwise
1636   = case red_try_me env wanted of {
1637     ; Stop -> try_simple (addIrred NoSCs)       -- See Note [No superclasses for Stop]
1638
1639     ; ReduceMe want_scs ->      -- It should be reduced
1640         reduceInst env avails wanted      `thenM` \ (avails, lookup_result) ->
1641         case lookup_result of
1642             NoInstance ->    -- No such instance!
1643                              -- Add it and its superclasses
1644                              addIrred want_scs avails wanted
1645
1646             GenInst [] rhs -> addWanted want_scs avails wanted rhs []
1647
1648             GenInst wanteds' rhs -> do  { avails1 <- addIrred NoSCs avails wanted
1649                                         ; avails2 <- reduceList env wanteds' avails1
1650                                         ; addWanted want_scs avails2 wanted rhs wanteds' }
1651                 -- Temporarily do addIrred *before* the reduceList, 
1652                 -- which has the effect of adding the thing we are trying
1653                 -- to prove to the database before trying to prove the things it
1654                 -- needs.  See note [RECURSIVE DICTIONARIES]
1655                 -- NB: we must not do an addWanted before, because that adds the
1656                 --     superclasses too, and thaat can lead to a spurious loop; see
1657                 --     the examples in [SUPERCLASS-LOOP]
1658                 -- So we do an addIrred before, and then overwrite it afterwards with addWanted
1659
1660     }
1661   where
1662         -- First, see if the inst can be reduced to a constant in one step
1663         -- Works well for literals (1::Int) and constant dictionaries (d::Num Int)
1664         -- Don't bother for implication constraints, which take real work
1665     try_simple do_this_otherwise
1666       = do { res <- lookupSimpleInst wanted
1667            ; case res of
1668                 GenInst [] rhs -> addWanted AddSCs avails wanted rhs []
1669                 other          -> do_this_otherwise avails wanted }
1670 \end{code}
1671
1672
1673 Note [SUPERCLASS-LOOP 2]
1674 ~~~~~~~~~~~~~~~~~~~~~~~~
1675 But the above isn't enough.  Suppose we are *given* d1:Ord a,
1676 and want to deduce (d2:C [a]) where
1677
1678         class Ord a => C a where
1679         instance Ord [a] => C [a] where ...
1680
1681 Then we'll use the instance decl to deduce C [a] from Ord [a], and then add the
1682 superclasses of C [a] to avails.  But we must not overwrite the binding
1683 for Ord [a] (which is obtained from Ord a) with a superclass selection or we'll just
1684 build a loop! 
1685
1686 Here's another variant, immortalised in tcrun020
1687         class Monad m => C1 m
1688         class C1 m => C2 m x
1689         instance C2 Maybe Bool
1690 For the instance decl we need to build (C1 Maybe), and it's no good if
1691 we run around and add (C2 Maybe Bool) and its superclasses to the avails 
1692 before we search for C1 Maybe.
1693
1694 Here's another example 
1695         class Eq b => Foo a b
1696         instance Eq a => Foo [a] a
1697 If we are reducing
1698         (Foo [t] t)
1699
1700 we'll first deduce that it holds (via the instance decl).  We must not
1701 then overwrite the Eq t constraint with a superclass selection!
1702
1703 At first I had a gross hack, whereby I simply did not add superclass constraints
1704 in addWanted, though I did for addGiven and addIrred.  This was sub-optimal,
1705 becuase it lost legitimate superclass sharing, and it still didn't do the job:
1706 I found a very obscure program (now tcrun021) in which improvement meant the
1707 simplifier got two bites a the cherry... so something seemed to be an Stop
1708 first time, but reducible next time.
1709
1710 Now we implement the Right Solution, which is to check for loops directly 
1711 when adding superclasses.  It's a bit like the occurs check in unification.
1712
1713
1714 Note [RECURSIVE DICTIONARIES]
1715 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1716 Consider 
1717     data D r = ZeroD | SuccD (r (D r));
1718     
1719     instance (Eq (r (D r))) => Eq (D r) where
1720         ZeroD     == ZeroD     = True
1721         (SuccD a) == (SuccD b) = a == b
1722         _         == _         = False;
1723     
1724     equalDC :: D [] -> D [] -> Bool;
1725     equalDC = (==);
1726
1727 We need to prove (Eq (D [])).  Here's how we go:
1728
1729         d1 : Eq (D [])
1730
1731 by instance decl, holds if
1732         d2 : Eq [D []]
1733         where   d1 = dfEqD d2
1734
1735 by instance decl of Eq, holds if
1736         d3 : D []
1737         where   d2 = dfEqList d3
1738                 d1 = dfEqD d2
1739
1740 But now we can "tie the knot" to give
1741
1742         d3 = d1
1743         d2 = dfEqList d3
1744         d1 = dfEqD d2
1745
1746 and it'll even run!  The trick is to put the thing we are trying to prove
1747 (in this case Eq (D []) into the database before trying to prove its
1748 contributing clauses.
1749         
1750
1751 %************************************************************************
1752 %*                                                                      *
1753                 Reducing a single constraint
1754 %*                                                                      *
1755 %************************************************************************
1756
1757 \begin{code}
1758 ---------------------------------------------
1759 reduceInst :: RedEnv -> Avails -> Inst -> TcM (Avails, LookupInstResult)
1760 reduceInst env avails (ImplicInst { tci_tyvars = tvs, tci_reft = reft, tci_loc = loc,
1761                                     tci_given = extra_givens, tci_wanted = wanteds })
1762   = reduceImplication env avails reft tvs extra_givens wanteds loc
1763
1764 reduceInst env avails other_inst
1765   = do  { result <- lookupSimpleInst other_inst
1766         ; return (avails, result) }
1767 \end{code}
1768
1769 \begin{code}
1770 ---------------------------------------------
1771 reduceImplication :: RedEnv
1772                  -> Avails
1773                  -> Refinement  -- May refine the givens; often empty
1774                  -> [TcTyVar]   -- Quantified type variables; all skolems
1775                  -> [Inst]      -- Extra givens; all rigid
1776                  -> [Inst]      -- Wanted
1777                  -> InstLoc
1778                  -> TcM (Avails, LookupInstResult)
1779 \end{code}
1780
1781 Suppose we are simplifying the constraint
1782         forall bs. extras => wanted
1783 in the context of an overall simplification problem with givens 'givens',
1784 and refinment 'reft'.
1785
1786 Note that
1787   * The refinement is often empty
1788
1789   * The 'extra givens' need not mention any of the quantified type variables
1790         e.g.    forall {}. Eq a => Eq [a]
1791                 forall {}. C Int => D (Tree Int)
1792
1793     This happens when you have something like
1794         data T a where
1795           T1 :: Eq a => a -> T a
1796
1797         f :: T a -> Int
1798         f x = ...(case x of { T1 v -> v==v })...
1799
1800 \begin{code}
1801         -- ToDo: should we instantiate tvs?  I think it's not necessary
1802         --
1803         -- ToDo: what about improvement?  There may be some improvement
1804         --       exposed as a result of the simplifications done by reduceList
1805         --       which are discarded if we back off.  
1806         --       This is almost certainly Wrong, but we'll fix it when dealing
1807         --       better with equality constraints
1808 reduceImplication env orig_avails reft tvs extra_givens wanteds inst_loc
1809   = do  {       -- Add refined givens, and the extra givens
1810           (refined_red_givens, avails) 
1811                 <- if isEmptyRefinement reft then return (red_givens env, orig_avails)
1812                    else foldlM (addRefinedGiven reft) ([], orig_avails) (red_givens env)
1813         ; avails <- foldlM addGiven avails extra_givens
1814
1815                 -- Solve the sub-problem
1816         ; let try_me inst = ReduceMe AddSCs     -- Note [Freeness and implications]
1817               env' = env { red_givens = refined_red_givens ++ extra_givens
1818                          , red_try_me = try_me }
1819
1820         ; traceTc (text "reduceImplication" <+> vcat
1821                         [ ppr orig_avails,
1822                           ppr (red_givens env), ppr extra_givens, 
1823                           ppr reft, ppr wanteds, ppr avails ])
1824         ; avails <- reduceList env' wanteds avails
1825
1826                 -- Extract the binding
1827         ; (binds, irreds) <- extractResults avails wanteds
1828  
1829                 -- We always discard the extra avails we've generated;
1830                 -- but we remember if we have done any (global) improvement
1831         ; let ret_avails = updateImprovement orig_avails avails
1832
1833         ; if isEmptyLHsBinds binds then         -- No progress
1834                 return (ret_avails, NoInstance)
1835           else do
1836         { (implic_insts, bind) <- makeImplicationBind inst_loc tvs reft extra_givens irreds
1837                         -- This binding is useless if the recursive simplification
1838                         -- made no progress; but currently we don't try to optimise that
1839                         -- case.  After all, we only try hard to reduce at top level, or
1840                         -- when inferring types.
1841
1842         ; let   dict_ids = map instToId extra_givens
1843                 co  = mkWpTyLams tvs <.> mkWpLams dict_ids <.> WpLet (binds `unionBags` bind)
1844                 rhs = mkHsWrap co payload
1845                 loc = instLocSpan inst_loc
1846                 payload | isSingleton wanteds = HsVar (instToId (head wanteds))
1847                         | otherwise = ExplicitTuple (map (L loc . HsVar . instToId) wanteds) Boxed
1848
1849                 -- If there are any irreds, we back off and return NoInstance
1850         ; return (ret_avails, GenInst implic_insts (L loc rhs))
1851   } }
1852 \end{code}
1853
1854 Note [Freeness and implications]
1855 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1856 It's hard to say when an implication constraint can be floated out.  Consider
1857         forall {} Eq a => Foo [a]
1858 The (Foo [a]) doesn't mention any of the quantified variables, but it
1859 still might be partially satisfied by the (Eq a). 
1860
1861 There is a useful special case when it *is* easy to partition the 
1862 constraints, namely when there are no 'givens'.  Consider
1863         forall {a}. () => Bar b
1864 There are no 'givens', and so there is no reason to capture (Bar b).
1865 We can let it float out.  But if there is even one constraint we
1866 must be much more careful:
1867         forall {a}. C a b => Bar (m b)
1868 because (C a b) might have a superclass (D b), from which we might 
1869 deduce (Bar [b]) when m later gets instantiated to [].  Ha!
1870
1871 Here is an even more exotic example
1872         class C a => D a b
1873 Now consider the constraint
1874         forall b. D Int b => C Int
1875 We can satisfy the (C Int) from the superclass of D, so we don't want
1876 to float the (C Int) out, even though it mentions no type variable in
1877 the constraints!
1878
1879 %************************************************************************
1880 %*                                                                      *
1881                 Avails and AvailHow: the pool of evidence
1882 %*                                                                      *
1883 %************************************************************************
1884
1885
1886 \begin{code}
1887 data Avails = Avails !ImprovementDone !AvailEnv
1888
1889 type ImprovementDone = Bool     -- True <=> some unification has happened
1890                                 -- so some Irreds might now be reducible
1891                                 -- keys that are now 
1892
1893 type AvailEnv = FiniteMap Inst AvailHow
1894 data AvailHow
1895   = IsIrred             -- Used for irreducible dictionaries,
1896                         -- which are going to be lambda bound
1897
1898   | Given TcId          -- Used for dictionaries for which we have a binding
1899                         -- e.g. those "given" in a signature
1900
1901   | Rhs                 -- Used when there is a RHS
1902         (LHsExpr TcId)  -- The RHS
1903         [Inst]          -- Insts free in the RHS; we need these too
1904
1905 instance Outputable Avails where
1906   ppr = pprAvails
1907
1908 pprAvails (Avails imp avails)
1909   = vcat [ ptext SLIT("Avails") <> (if imp then ptext SLIT("[improved]") else empty)
1910          , nest 2 (vcat [sep [ppr inst, nest 2 (equals <+> ppr avail)]
1911                         | (inst,avail) <- fmToList avails ])]
1912
1913 instance Outputable AvailHow where
1914     ppr = pprAvail
1915
1916 -------------------------
1917 pprAvail :: AvailHow -> SDoc
1918 pprAvail IsIrred        = text "Irred"
1919 pprAvail (Given x)      = text "Given" <+> ppr x
1920 pprAvail (Rhs rhs bs)   = text "Rhs" <+> ppr rhs <+> braces (ppr bs)
1921
1922 -------------------------
1923 extendAvailEnv :: AvailEnv -> Inst -> AvailHow -> AvailEnv
1924 extendAvailEnv env inst avail = addToFM env inst avail
1925
1926 findAvailEnv :: AvailEnv -> Inst -> Maybe AvailHow
1927 findAvailEnv env wanted = lookupFM env wanted
1928         -- NB 1: the Ord instance of Inst compares by the class/type info
1929         --  *not* by unique.  So
1930         --      d1::C Int ==  d2::C Int
1931
1932 emptyAvails :: Avails
1933 emptyAvails = Avails False emptyFM
1934
1935 findAvail :: Avails -> Inst -> Maybe AvailHow
1936 findAvail (Avails _ avails) wanted = findAvailEnv avails wanted
1937
1938 elemAvails :: Inst -> Avails -> Bool
1939 elemAvails wanted (Avails _ avails) = wanted `elemFM` avails
1940
1941 extendAvails :: Avails -> Inst -> AvailHow -> TcM Avails
1942 -- Does improvement
1943 extendAvails avails@(Avails imp env) inst avail 
1944   = do  { imp1 <- tcImproveOne avails inst      -- Do any improvement
1945         ; return (Avails (imp || imp1) (extendAvailEnv env inst avail)) }
1946
1947 availsInsts :: Avails -> [Inst]
1948 availsInsts (Avails _ avails) = keysFM avails
1949
1950 availsImproved (Avails imp _) = imp
1951
1952 updateImprovement :: Avails -> Avails -> Avails
1953 -- (updateImprovement a1 a2) sets a1's improvement flag from a2
1954 updateImprovement (Avails _ avails1) (Avails imp2 _) = Avails imp2 avails1
1955 \end{code}
1956
1957 Extracting the bindings from a bunch of Avails.
1958 The bindings do *not* come back sorted in dependency order.
1959 We assume that they'll be wrapped in a big Rec, so that the
1960 dependency analyser can sort them out later
1961
1962 \begin{code}
1963 extractResults :: Avails
1964                -> [Inst]                -- Wanted
1965                -> TcM ( TcDictBinds,    -- Bindings
1966                         [Inst])         -- Irreducible ones
1967
1968 extractResults (Avails _ avails) wanteds
1969   = go avails emptyBag [] wanteds
1970   where
1971     go :: AvailEnv -> TcDictBinds -> [Inst] -> [Inst]
1972         -> TcM (TcDictBinds, [Inst])
1973     go avails binds irreds [] 
1974       = returnM (binds, irreds)
1975
1976     go avails binds irreds (w:ws)
1977       = case findAvailEnv avails w of
1978           Nothing    -> pprTrace "Urk: extractResults" (ppr w) $
1979                         go avails binds irreds ws
1980
1981           Just IsIrred -> go (add_given avails w) binds (w:irreds) ws
1982
1983           Just (Given id) 
1984                 | id == instToId w
1985                 -> go avails binds irreds ws 
1986                 -- The sought Id can be one of the givens, via a superclass chain
1987                 -- and then we definitely don't want to generate an x=x binding!
1988
1989                 | otherwise
1990                 -> go avails (addBind binds w (nlHsVar id)) irreds ws
1991
1992           Just (Rhs rhs ws') -> go (add_given avails w) new_binds irreds (ws' ++ ws)
1993                              where
1994                                 new_binds = addBind binds w rhs
1995
1996     add_given avails w = extendAvailEnv avails w (Given (instToId w))
1997
1998 addBind binds inst rhs = binds `unionBags` unitBag (L (instSpan inst) 
1999                                                       (VarBind (instToId inst) rhs))
2000 \end{code}
2001
2002
2003 Note [No superclasses for Stop]
2004 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2005 When we decide not to reduce an Inst -- the 'WhatToDo' --- we still
2006 add it to avails, so that any other equal Insts will be commoned up
2007 right here.  However, we do *not* add superclasses.  If we have
2008         df::Floating a
2009         dn::Num a
2010 but a is not bound here, then we *don't* want to derive dn from df
2011 here lest we lose sharing.
2012
2013 \begin{code}
2014 addWanted :: WantSCs -> Avails -> Inst -> LHsExpr TcId -> [Inst] -> TcM Avails
2015 addWanted want_scs avails wanted rhs_expr wanteds
2016   = addAvailAndSCs want_scs avails wanted avail
2017   where
2018     avail = Rhs rhs_expr wanteds
2019
2020 addGiven :: Avails -> Inst -> TcM Avails
2021 addGiven avails given = addAvailAndSCs AddSCs avails given (Given (instToId given))
2022         -- Always add superclasses for 'givens'
2023         --
2024         -- No ASSERT( not (given `elemAvails` avails) ) because in an instance
2025         -- decl for Ord t we can add both Ord t and Eq t as 'givens', 
2026         -- so the assert isn't true
2027
2028 addRefinedGiven :: Refinement -> ([Inst], Avails) -> Inst -> TcM ([Inst], Avails)
2029 addRefinedGiven reft (refined_givens, avails) given
2030   | isDict given        -- We sometimes have 'given' methods, but they
2031                         -- are always optional, so we can drop them
2032   , let pred = dictPred given
2033   , isRefineablePred pred       -- See Note [ImplicInst rigidity]
2034   , Just (co, pred) <- refinePred reft pred
2035   = do  { new_given <- newDictBndr (instLoc given) pred
2036         ; let rhs = L (instSpan given) $
2037                     HsWrap (WpCo co) (HsVar (instToId given))
2038         ; avails <- addAvailAndSCs AddSCs avails new_given (Rhs rhs [given])
2039         ; return (new_given:refined_givens, avails) }
2040             -- ToDo: the superclasses of the original given all exist in Avails 
2041             -- so we could really just cast them, but it's more awkward to do,
2042             -- and hopefully the optimiser will spot the duplicated work
2043   | otherwise
2044   = return (refined_givens, avails)
2045 \end{code}
2046
2047 Note [ImplicInst rigidity]
2048 ~~~~~~~~~~~~~~~~~~~~~~~~~~
2049 Consider
2050         C :: forall ab. (Eq a, Ord b) => b -> T a
2051         
2052         ...(case x of C v -> <body>)...
2053
2054 From the case (where x::T ty) we'll get an implication constraint
2055         forall b. (Eq ty, Ord b) => <body-constraints>
2056 Now suppose <body-constraints> itself has an implication constraint 
2057 of form
2058         forall c. <reft> => <payload>
2059 Then, we can certainly apply the refinement <reft> to the Ord b, becuase it is
2060 existential, but we probably should not apply it to the (Eq ty) because it may
2061 be wobbly. Hence the isRigidInst
2062
2063 @Insts@ are ordered by their class/type info, rather than by their
2064 unique.  This allows the context-reduction mechanism to use standard finite
2065 maps to do their stuff.  It's horrible that this code is here, rather
2066 than with the Avails handling stuff in TcSimplify
2067
2068 \begin{code}
2069 addIrred :: WantSCs -> Avails -> Inst -> TcM Avails
2070 addIrred want_scs avails irred = ASSERT2( not (irred `elemAvails` avails), ppr irred $$ ppr avails )
2071                                  addAvailAndSCs want_scs avails irred IsIrred
2072
2073 addAvailAndSCs :: WantSCs -> Avails -> Inst -> AvailHow -> TcM Avails
2074 addAvailAndSCs want_scs avails inst avail
2075   | not (isClassDict inst) = extendAvails avails inst avail
2076   | NoSCs <- want_scs      = extendAvails avails inst avail
2077   | otherwise              = do { traceTc (text "addAvailAndSCs" <+> vcat [ppr inst, ppr deps])
2078                                 ; avails' <- extendAvails avails inst avail
2079                                 ; addSCs is_loop avails' inst }
2080   where
2081     is_loop pred = any (`tcEqType` mkPredTy pred) dep_tys
2082                         -- Note: this compares by *type*, not by Unique
2083     deps         = findAllDeps (unitVarSet (instToId inst)) avail
2084     dep_tys      = map idType (varSetElems deps)
2085
2086     findAllDeps :: IdSet -> AvailHow -> IdSet
2087     -- Find all the Insts that this one depends on
2088     -- See Note [SUPERCLASS-LOOP 2]
2089     -- Watch out, though.  Since the avails may contain loops 
2090     -- (see Note [RECURSIVE DICTIONARIES]), so we need to track the ones we've seen so far
2091     findAllDeps so_far (Rhs _ kids) = foldl find_all so_far kids
2092     findAllDeps so_far other        = so_far
2093
2094     find_all :: IdSet -> Inst -> IdSet
2095     find_all so_far kid
2096       | kid_id `elemVarSet` so_far         = so_far
2097       | Just avail <- findAvail avails kid = findAllDeps so_far' avail
2098       | otherwise                          = so_far'
2099       where
2100         so_far' = extendVarSet so_far kid_id    -- Add the new kid to so_far
2101         kid_id = instToId kid
2102
2103 addSCs :: (TcPredType -> Bool) -> Avails -> Inst -> TcM Avails
2104         -- Add all the superclasses of the Inst to Avails
2105         -- The first param says "dont do this because the original thing
2106         --      depends on this one, so you'd build a loop"
2107         -- Invariant: the Inst is already in Avails.
2108
2109 addSCs is_loop avails dict
2110   = ASSERT( isDict dict )
2111     do  { sc_dicts <- newDictBndrs (instLoc dict) sc_theta'
2112         ; foldlM add_sc avails (zipEqual "add_scs" sc_dicts sc_sels) }
2113   where
2114     (clas, tys) = getDictClassTys dict
2115     (tyvars, sc_theta, sc_sels, _) = classBigSig clas
2116     sc_theta' = substTheta (zipTopTvSubst tyvars tys) sc_theta
2117
2118     add_sc avails (sc_dict, sc_sel)
2119       | is_loop (dictPred sc_dict) = return avails      -- See Note [SUPERCLASS-LOOP 2]
2120       | is_given sc_dict           = return avails
2121       | otherwise                  = do { avails' <- extendAvails avails sc_dict (Rhs sc_sel_rhs [dict])
2122                                         ; addSCs is_loop avails' sc_dict }
2123       where
2124         sc_sel_rhs = L (instSpan dict) (HsWrap co_fn (HsVar sc_sel))
2125         co_fn      = WpApp (instToId dict) <.> mkWpTyApps tys
2126
2127     is_given :: Inst -> Bool
2128     is_given sc_dict = case findAvail avails sc_dict of
2129                           Just (Given _) -> True        -- Given is cheaper than superclass selection
2130                           other          -> False       
2131 \end{code}
2132
2133 %************************************************************************
2134 %*                                                                      *
2135 \section{tcSimplifyTop: defaulting}
2136 %*                                                                      *
2137 %************************************************************************
2138
2139
2140 @tcSimplifyTop@ is called once per module to simplify all the constant
2141 and ambiguous Insts.
2142
2143 We need to be careful of one case.  Suppose we have
2144
2145         instance Num a => Num (Foo a b) where ...
2146
2147 and @tcSimplifyTop@ is given a constraint (Num (Foo x y)).  Then it'll simplify
2148 to (Num x), and default x to Int.  But what about y??
2149
2150 It's OK: the final zonking stage should zap y to (), which is fine.
2151
2152
2153 \begin{code}
2154 tcSimplifyTop, tcSimplifyInteractive :: [Inst] -> TcM TcDictBinds
2155 tcSimplifyTop wanteds
2156   = tc_simplify_top doc False wanteds
2157   where 
2158     doc = text "tcSimplifyTop"
2159
2160 tcSimplifyInteractive wanteds
2161   = tc_simplify_top doc True wanteds
2162   where 
2163     doc = text "tcSimplifyInteractive"
2164
2165 -- The TcLclEnv should be valid here, solely to improve
2166 -- error message generation for the monomorphism restriction
2167 tc_simplify_top doc interactive wanteds
2168   = do  { wanteds <- mapM zonkInst wanteds
2169         ; mapM_ zonkTopTyVar (varSetElems (tyVarsOfInsts wanteds))
2170
2171         ; (irreds1, binds1) <- topCheckLoop doc wanteds
2172
2173         ; if null irreds1 then 
2174                 return binds1
2175           else do
2176         -- OK, so there are some errors
2177         {       -- Use the defaulting rules to do extra unification
2178                 -- NB: irreds are already zonked
2179         ; extended_default <- if interactive then return True
2180                               else doptM Opt_ExtendedDefaultRules
2181         ; disambiguate extended_default irreds1 -- Does unification
2182         ; (irreds2, binds2) <- topCheckLoop doc irreds1
2183
2184                 -- Deal with implicit parameter
2185         ; let (bad_ips, non_ips) = partition isIPDict irreds2
2186               (ambigs, others)   = partition isTyVarDict non_ips
2187
2188         ; topIPErrs bad_ips     -- Can arise from   f :: Int -> Int
2189                                 --                  f x = x + ?y
2190         ; addNoInstanceErrs others
2191         ; addTopAmbigErrs ambigs        
2192
2193         ; return (binds1 `unionBags` binds2) }}
2194 \end{code}
2195
2196 If a dictionary constrains a type variable which is
2197         * not mentioned in the environment
2198         * and not mentioned in the type of the expression
2199 then it is ambiguous. No further information will arise to instantiate
2200 the type variable; nor will it be generalised and turned into an extra
2201 parameter to a function.
2202
2203 It is an error for this to occur, except that Haskell provided for
2204 certain rules to be applied in the special case of numeric types.
2205 Specifically, if
2206         * at least one of its classes is a numeric class, and
2207         * all of its classes are numeric or standard
2208 then the type variable can be defaulted to the first type in the
2209 default-type list which is an instance of all the offending classes.
2210
2211 So here is the function which does the work.  It takes the ambiguous
2212 dictionaries and either resolves them (producing bindings) or
2213 complains.  It works by splitting the dictionary list by type
2214 variable, and using @disambigOne@ to do the real business.
2215
2216 @disambigOne@ assumes that its arguments dictionaries constrain all
2217 the same type variable.
2218
2219 ADR Comment 20/6/94: I've changed the @CReturnable@ case to default to
2220 @()@ instead of @Int@.  I reckon this is the Right Thing to do since
2221 the most common use of defaulting is code like:
2222 \begin{verbatim}
2223         _ccall_ foo     `seqPrimIO` bar
2224 \end{verbatim}
2225 Since we're not using the result of @foo@, the result if (presumably)
2226 @void@.
2227
2228 \begin{code}
2229 disambiguate :: Bool -> [Inst] -> TcM ()
2230         -- Just does unification to fix the default types
2231         -- The Insts are assumed to be pre-zonked
2232 disambiguate extended_defaulting insts
2233   | null defaultable_groups
2234   = do { traceTc (text "disambigutate" <+> vcat [ppr unaries, ppr bad_tvs, ppr defaultable_groups])
2235         ;     return () }
2236   | otherwise
2237   = do  {       -- Figure out what default types to use
2238           mb_defaults <- getDefaultTys
2239         ; default_tys <- case mb_defaults of
2240                            Just tys -> return tys
2241                            Nothing  ->  -- No use-supplied default;
2242                                         -- use [Integer, Double]
2243                                 do { integer_ty <- tcMetaTy integerTyConName
2244                                    ; checkWiredInTyCon doubleTyCon
2245                                    ; return [integer_ty, doubleTy] }
2246         ; traceTc (text "disambigutate" <+> vcat [ppr unaries, ppr bad_tvs, ppr defaultable_groups])
2247         ; mapM_ (disambigGroup default_tys) defaultable_groups  }
2248   where
2249    unaries :: [(Inst,Class, TcTyVar)]  -- (C tv) constraints
2250    bad_tvs :: TcTyVarSet          -- Tyvars mentioned by *other* constraints
2251    (unaries, bad_tvs) = getDefaultableDicts insts
2252
2253                 -- Group by type variable
2254    defaultable_groups :: [[(Inst,Class,TcTyVar)]]
2255    defaultable_groups = filter defaultable_group (equivClasses cmp_tv unaries)
2256    cmp_tv (_,_,tv1) (_,_,tv2) = tv1 `compare` tv2
2257
2258    defaultable_group :: [(Inst,Class,TcTyVar)] -> Bool
2259    defaultable_group ds@((_,_,tv):_)
2260         =  not (isImmutableTyVar tv)    -- Note [Avoiding spurious errors]
2261         && not (tv `elemVarSet` bad_tvs)
2262         && defaultable_classes [c | (_,c,_) <- ds]
2263    defaultable_group [] = panic "defaultable_group"
2264
2265    defaultable_classes clss 
2266         | extended_defaulting = any isInteractiveClass clss
2267         | otherwise = all isStandardClass clss && any isNumericClass clss
2268
2269         -- In interactive mode, or with -fextended-default-rules,
2270         -- we default Show a to Show () to avoid graututious errors on "show []"
2271    isInteractiveClass cls 
2272         = isNumericClass cls
2273         || (classKey cls `elem` [showClassKey, eqClassKey, ordClassKey])
2274
2275
2276 disambigGroup :: [Type]                 -- The default types
2277               -> [(Inst,Class,TcTyVar)] -- All standard classes of form (C a)
2278               -> TcM () -- Just does unification, to fix the default types
2279
2280 disambigGroup default_tys dicts
2281   = try_default default_tys
2282   where
2283     (_,_,tyvar) = head dicts    -- Should be non-empty
2284     classes = [c | (_,c,_) <- dicts]
2285
2286     try_default [] = return ()
2287     try_default (default_ty : default_tys)
2288       = tryTcLIE_ (try_default default_tys) $
2289         do { tcSimplifyDefault [mkClassPred clas [default_ty] | clas <- classes]
2290                 -- This may fail; then the tryTcLIE_ kicks in
2291                 -- Failure here is caused by there being no type in the
2292                 -- default list which can satisfy all the ambiguous classes.
2293                 -- For example, if Real a is reqd, but the only type in the
2294                 -- default list is Int.
2295
2296                 -- After this we can't fail
2297            ; warnDefault dicts default_ty
2298            ; unifyType default_ty (mkTyVarTy tyvar) }
2299 \end{code}
2300
2301 Note [Avoiding spurious errors]
2302 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
2303 When doing the unification for defaulting, we check for skolem
2304 type variables, and simply don't default them.  For example:
2305    f = (*)      -- Monomorphic
2306    g :: Num a => a -> a
2307    g x = f x x
2308 Here, we get a complaint when checking the type signature for g,
2309 that g isn't polymorphic enough; but then we get another one when
2310 dealing with the (Num a) context arising from f's definition;
2311 we try to unify a with Int (to default it), but find that it's
2312 already been unified with the rigid variable from g's type sig
2313
2314
2315 %************************************************************************
2316 %*                                                                      *
2317 \subsection[simple]{@Simple@ versions}
2318 %*                                                                      *
2319 %************************************************************************
2320
2321 Much simpler versions when there are no bindings to make!
2322
2323 @tcSimplifyThetas@ simplifies class-type constraints formed by
2324 @deriving@ declarations and when specialising instances.  We are
2325 only interested in the simplified bunch of class/type constraints.
2326
2327 It simplifies to constraints of the form (C a b c) where
2328 a,b,c are type variables.  This is required for the context of
2329 instance declarations.
2330
2331 \begin{code}
2332 tcSimplifyDeriv :: InstOrigin
2333                 -> TyCon
2334                 -> [TyVar]      
2335                 -> ThetaType            -- Wanted
2336                 -> TcM ThetaType        -- Needed
2337
2338 tcSimplifyDeriv orig tc tyvars theta
2339   = tcInstTyVars tyvars                 `thenM` \ (tvs, _, tenv) ->
2340         -- The main loop may do unification, and that may crash if 
2341         -- it doesn't see a TcTyVar, so we have to instantiate. Sigh
2342         -- ToDo: what if two of them do get unified?
2343     newDictBndrsO orig (substTheta tenv theta)  `thenM` \ wanteds ->
2344     topCheckLoop doc wanteds                    `thenM` \ (irreds, _) ->
2345
2346     doptM Opt_GlasgowExts                       `thenM` \ gla_exts ->
2347     doptM Opt_AllowUndecidableInstances         `thenM` \ undecidable_ok ->
2348     let
2349         inst_ty = mkTyConApp tc (mkTyVarTys tvs)
2350         (ok_insts, bad_insts) = partition is_ok_inst irreds
2351         is_ok_inst inst
2352            = isDict inst        -- Exclude implication consraints
2353            && (isTyVarClassPred pred || (gla_exts && ok_gla_pred pred))
2354            where
2355              pred = dictPred inst
2356
2357         ok_gla_pred pred = null (checkInstTermination [inst_ty] [pred])
2358                 -- See Note [Deriving context]
2359            
2360         tv_set = mkVarSet tvs
2361         simpl_theta = map dictPred ok_insts
2362         weird_preds = [pred | pred <- simpl_theta
2363                             , not (tyVarsOfPred pred `subVarSet` tv_set)]  
2364
2365           -- Check for a bizarre corner case, when the derived instance decl should
2366           -- have form  instance C a b => D (T a) where ...
2367           -- Note that 'b' isn't a parameter of T.  This gives rise to all sorts
2368           -- of problems; in particular, it's hard to compare solutions for
2369           -- equality when finding the fixpoint.  So I just rule it out for now.
2370         
2371         rev_env = zipTopTvSubst tvs (mkTyVarTys tyvars)
2372                 -- This reverse-mapping is a Royal Pain, 
2373                 -- but the result should mention TyVars not TcTyVars
2374     in
2375         -- In effect, the bad and wierd insts cover all of the cases that
2376         -- would make checkValidInstance fail; if it were called right after tcSimplifyDeriv
2377         --   * wierd_preds ensures unambiguous instances (checkAmbiguity in checkValidInstance)
2378         --   * ok_gla_pred ensures termination (checkInstTermination in checkValidInstance)
2379     addNoInstanceErrs bad_insts                         `thenM_`
2380     mapM_ (addErrTc . badDerivedPred) weird_preds       `thenM_`
2381     returnM (substTheta rev_env simpl_theta)
2382   where
2383     doc = ptext SLIT("deriving classes for a data type")
2384 \end{code}
2385
2386 Note [Deriving context]
2387 ~~~~~~~~~~~~~~~~~~~~~~~
2388 With -fglasgow-exts, we allow things like (C Int a) in the simplified
2389 context for a derived instance declaration, because at a use of this
2390 instance, we might know that a=Bool, and have an instance for (C Int
2391 Bool)
2392
2393 We nevertheless insist that each predicate meets the termination
2394 conditions. If not, the deriving mechanism generates larger and larger
2395 constraints.  Example:
2396   data Succ a = S a
2397   data Seq a = Cons a (Seq (Succ a)) | Nil deriving Show
2398
2399 Note the lack of a Show instance for Succ.  First we'll generate
2400   instance (Show (Succ a), Show a) => Show (Seq a)
2401 and then
2402   instance (Show (Succ (Succ a)), Show (Succ a), Show a) => Show (Seq a)
2403 and so on.  Instead we want to complain of no instance for (Show (Succ a)).
2404   
2405
2406
2407 @tcSimplifyDefault@ just checks class-type constraints, essentially;
2408 used with \tr{default} declarations.  We are only interested in
2409 whether it worked or not.
2410
2411 \begin{code}
2412 tcSimplifyDefault :: ThetaType  -- Wanted; has no type variables in it
2413                   -> TcM ()
2414
2415 tcSimplifyDefault theta
2416   = newDictBndrsO DefaultOrigin theta   `thenM` \ wanteds ->
2417     topCheckLoop doc wanteds            `thenM` \ (irreds, _) ->
2418     addNoInstanceErrs  irreds           `thenM_`
2419     if null irreds then
2420         returnM ()
2421     else
2422         failM
2423   where
2424     doc = ptext SLIT("default declaration")
2425 \end{code}
2426
2427
2428 %************************************************************************
2429 %*                                                                      *
2430 \section{Errors and contexts}
2431 %*                                                                      *
2432 %************************************************************************
2433
2434 ToDo: for these error messages, should we note the location as coming
2435 from the insts, or just whatever seems to be around in the monad just
2436 now?
2437
2438 \begin{code}
2439 groupErrs :: ([Inst] -> TcM ()) -- Deal with one group
2440           -> [Inst]             -- The offending Insts
2441           -> TcM ()
2442 -- Group together insts with the same origin
2443 -- We want to report them together in error messages
2444
2445 groupErrs report_err [] 
2446   = returnM ()
2447 groupErrs report_err (inst:insts) 
2448   = do_one (inst:friends)               `thenM_`
2449     groupErrs report_err others
2450
2451   where
2452         -- (It may seem a bit crude to compare the error messages,
2453         --  but it makes sure that we combine just what the user sees,
2454         --  and it avoids need equality on InstLocs.)
2455    (friends, others) = partition is_friend insts
2456    loc_msg           = showSDoc (pprInstLoc (instLoc inst))
2457    is_friend friend  = showSDoc (pprInstLoc (instLoc friend)) == loc_msg
2458    do_one insts = addInstCtxt (instLoc (head insts)) (report_err insts)
2459                 -- Add location and context information derived from the Insts
2460
2461 -- Add the "arising from..." part to a message about bunch of dicts
2462 addInstLoc :: [Inst] -> Message -> Message
2463 addInstLoc insts msg = msg $$ nest 2 (pprInstArising (head insts))
2464
2465 addTopIPErrs :: [Name] -> [Inst] -> TcM ()
2466 addTopIPErrs bndrs [] 
2467   = return ()
2468 addTopIPErrs bndrs ips
2469   = addErrTcM (tidy_env, mk_msg tidy_ips)
2470   where
2471     (tidy_env, tidy_ips) = tidyInsts ips
2472     mk_msg ips = vcat [sep [ptext SLIT("Implicit parameters escape from"),
2473                             nest 2 (ptext SLIT("the monomorphic top-level binding") 
2474                                             <> plural bndrs <+> ptext SLIT("of")
2475                                             <+> pprBinders bndrs <> colon)],
2476                        nest 2 (vcat (map ppr_ip ips)),
2477                        monomorphism_fix]
2478     ppr_ip ip = pprPred (dictPred ip) <+> pprInstArising ip
2479
2480 topIPErrs :: [Inst] -> TcM ()
2481 topIPErrs dicts
2482   = groupErrs report tidy_dicts
2483   where
2484     (tidy_env, tidy_dicts) = tidyInsts dicts
2485     report dicts = addErrTcM (tidy_env, mk_msg dicts)
2486     mk_msg dicts = addInstLoc dicts (ptext SLIT("Unbound implicit parameter") <> 
2487                                      plural tidy_dicts <+> pprDictsTheta tidy_dicts)
2488
2489 addNoInstanceErrs :: [Inst]     -- Wanted (can include implications)
2490                   -> TcM ()     
2491 addNoInstanceErrs insts
2492   = do  { let (tidy_env, tidy_insts) = tidyInsts insts
2493         ; reportNoInstances tidy_env Nothing tidy_insts }
2494
2495 reportNoInstances 
2496         :: TidyEnv
2497         -> Maybe (InstLoc, [Inst])      -- Context
2498                         -- Nothing => top level
2499                         -- Just (d,g) => d describes the construct
2500                         --               with givens g
2501         -> [Inst]       -- What is wanted (can include implications)
2502         -> TcM ()       
2503
2504 reportNoInstances tidy_env mb_what insts 
2505   = groupErrs (report_no_instances tidy_env mb_what) insts
2506
2507 report_no_instances tidy_env mb_what insts
2508   = do  { inst_envs <- tcGetInstEnvs
2509         ; let (implics, insts1)  = partition isImplicInst insts
2510               (insts2, overlaps) = partitionWith (check_overlap inst_envs) insts1
2511         ; traceTc (text "reportNoInstnces" <+> vcat 
2512                         [ppr implics, ppr insts1, ppr insts2])
2513         ; mapM_ complain_implic implics
2514         ; mapM_ (\doc -> addErrTcM (tidy_env, doc)) overlaps
2515         ; groupErrs complain_no_inst insts2 }
2516   where
2517     complain_no_inst insts = addErrTcM (tidy_env, mk_no_inst_err insts)
2518
2519     complain_implic inst        -- Recurse!
2520       = reportNoInstances tidy_env 
2521                           (Just (tci_loc inst, tci_given inst)) 
2522                           (tci_wanted inst)
2523
2524     check_overlap :: (InstEnv,InstEnv) -> Inst -> Either Inst SDoc
2525         -- Right msg  => overlap message
2526         -- Left  inst => no instance
2527     check_overlap inst_envs wanted
2528         | not (isClassDict wanted) = Left wanted
2529         | otherwise
2530         = case lookupInstEnv inst_envs clas tys of
2531                 -- The case of exactly one match and no unifiers means
2532                 -- a successful lookup.  That can't happen here, becuase
2533                 -- dicts only end up here if they didn't match in Inst.lookupInst
2534 #ifdef DEBUG
2535                 ([m],[]) -> pprPanic "reportNoInstance" (ppr wanted)
2536 #endif
2537                 ([], _)  -> Left wanted         -- No match
2538                 res      -> Right (mk_overlap_msg wanted res)
2539           where
2540             (clas,tys) = getDictClassTys wanted
2541
2542     mk_overlap_msg dict (matches, unifiers)
2543       = vcat [  addInstLoc [dict] ((ptext SLIT("Overlapping instances for") 
2544                                         <+> pprPred (dictPred dict))),
2545                 sep [ptext SLIT("Matching instances") <> colon,
2546                      nest 2 (vcat [pprInstances ispecs, pprInstances unifiers])],
2547                 ASSERT( not (null matches) )
2548                 if not (isSingleton matches)
2549                 then    -- Two or more matches
2550                      empty
2551                 else    -- One match, plus some unifiers
2552                 ASSERT( not (null unifiers) )
2553                 parens (vcat [ptext SLIT("The choice depends on the instantiation of") <+>
2554                                  quotes (pprWithCommas ppr (varSetElems (tyVarsOfInst dict))),
2555                               ptext SLIT("Use -fallow-incoherent-instances to use the first choice above")])]
2556       where
2557         ispecs = [ispec | (_, ispec) <- matches]
2558
2559     mk_no_inst_err insts
2560       | null insts = empty
2561
2562       | Just (loc, givens) <- mb_what,   -- Nested (type signatures, instance decls)
2563         not (isEmptyVarSet (tyVarsOfInsts insts))
2564       = vcat [ addInstLoc insts $
2565                sep [ ptext SLIT("Could not deduce") <+> pprDictsTheta insts
2566                    , nest 2 $ ptext SLIT("from the context") <+> pprDictsTheta givens]
2567              , show_fixes (fix1 loc : fixes2) ]
2568
2569       | otherwise       -- Top level 
2570       = vcat [ addInstLoc insts $
2571                ptext SLIT("No instance") <> plural insts
2572                     <+> ptext SLIT("for") <+> pprDictsTheta insts
2573              , show_fixes fixes2 ]
2574
2575       where
2576         fix1 loc = sep [ ptext SLIT("add") <+> pprDictsTheta insts
2577                                  <+> ptext SLIT("to the context of"),
2578                          nest 2 (ppr (instLocOrigin loc)) ]
2579                          -- I'm not sure it helps to add the location
2580                          -- nest 2 (ptext SLIT("at") <+> ppr (instLocSpan loc)) ]
2581
2582         fixes2 | null instance_dicts = []
2583                | otherwise           = [sep [ptext SLIT("add an instance declaration for"),
2584                                         pprDictsTheta instance_dicts]]
2585         instance_dicts = [d | d <- insts, isClassDict d, not (isTyVarDict d)]
2586                 -- Insts for which it is worth suggesting an adding an instance declaration
2587                 -- Exclude implicit parameters, and tyvar dicts
2588
2589         show_fixes :: [SDoc] -> SDoc
2590         show_fixes []     = empty
2591         show_fixes (f:fs) = sep [ptext SLIT("Possible fix:"), 
2592                                  nest 2 (vcat (f : map (ptext SLIT("or") <+>) fs))]
2593
2594 addTopAmbigErrs dicts
2595 -- Divide into groups that share a common set of ambiguous tyvars
2596   = ifErrsM (return ()) $       -- Only report ambiguity if no other errors happened
2597                                 -- See Note [Avoiding spurious errors]
2598     mapM_ report (equivClasses cmp [(d, tvs_of d) | d <- tidy_dicts])
2599   where
2600     (tidy_env, tidy_dicts) = tidyInsts dicts
2601
2602     tvs_of :: Inst -> [TcTyVar]
2603     tvs_of d = varSetElems (tyVarsOfInst d)
2604     cmp (_,tvs1) (_,tvs2) = tvs1 `compare` tvs2
2605     
2606     report :: [(Inst,[TcTyVar])] -> TcM ()
2607     report pairs@((inst,tvs) : _)       -- The pairs share a common set of ambiguous tyvars
2608         = mkMonomorphismMsg tidy_env tvs        `thenM` \ (tidy_env, mono_msg) ->
2609           setSrcSpan (instSpan inst) $
2610                 -- the location of the first one will do for the err message
2611           addErrTcM (tidy_env, msg $$ mono_msg)
2612         where
2613           dicts = map fst pairs
2614           msg = sep [text "Ambiguous type variable" <> plural tvs <+> 
2615                           pprQuotedList tvs <+> in_msg,
2616                      nest 2 (pprDictsInFull dicts)]
2617           in_msg = text "in the constraint" <> plural dicts <> colon
2618     report [] = panic "addTopAmbigErrs"
2619
2620
2621 mkMonomorphismMsg :: TidyEnv -> [TcTyVar] -> TcM (TidyEnv, Message)
2622 -- There's an error with these Insts; if they have free type variables
2623 -- it's probably caused by the monomorphism restriction. 
2624 -- Try to identify the offending variable
2625 -- ASSUMPTION: the Insts are fully zonked
2626 mkMonomorphismMsg tidy_env inst_tvs
2627   = findGlobals (mkVarSet inst_tvs) tidy_env    `thenM` \ (tidy_env, docs) ->
2628     returnM (tidy_env, mk_msg docs)
2629   where
2630     mk_msg []   = ptext SLIT("Probable fix: add a type signature that fixes these type variable(s)")
2631                         -- This happens in things like
2632                         --      f x = show (read "foo")
2633                         -- where monomorphism doesn't play any role
2634     mk_msg docs = vcat [ptext SLIT("Possible cause: the monomorphism restriction applied to the following:"),
2635                         nest 2 (vcat docs),
2636                         monomorphism_fix
2637                        ]
2638 monomorphism_fix :: SDoc
2639 monomorphism_fix = ptext SLIT("Probable fix:") <+> 
2640                    (ptext SLIT("give these definition(s) an explicit type signature")
2641                     $$ ptext SLIT("or use -fno-monomorphism-restriction"))
2642     
2643 warnDefault ups default_ty
2644   = doptM Opt_WarnTypeDefaults  `thenM` \ warn_flag ->
2645     addInstCtxt (instLoc (head (dicts))) (warnTc warn_flag warn_msg)
2646   where
2647     dicts = [d | (d,_,_) <- ups]
2648
2649         -- Tidy them first
2650     (_, tidy_dicts) = tidyInsts dicts
2651     warn_msg  = vcat [ptext SLIT("Defaulting the following constraint(s) to type") <+>
2652                                 quotes (ppr default_ty),
2653                       pprDictsInFull tidy_dicts]
2654
2655 -- Used for the ...Thetas variants; all top level
2656 badDerivedPred pred
2657   = vcat [ptext SLIT("Can't derive instances where the instance context mentions"),
2658           ptext SLIT("type variables that are not data type parameters"),
2659           nest 2 (ptext SLIT("Offending constraint:") <+> ppr pred)]
2660
2661 reduceDepthErr n stack
2662   = vcat [ptext SLIT("Context reduction stack overflow; size =") <+> int n,
2663           ptext SLIT("Use -fcontext-stack=N to increase stack size to N"),
2664           nest 4 (pprStack stack)]
2665
2666 pprStack stack = vcat (map pprInstInFull stack)
2667 \end{code}