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