2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
4 \section[TcSimplify]{TcSimplify}
8 Inference (local definitions)
9 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
10 If the inst constrains a local type variable, then
11 [ReduceMe] if it's a literal or method inst, reduce it
13 [DontReduce] otherwise see whether the inst is just a constant
15 if not, add original to context
16 This check gets rid of constant dictionaries without
19 If the inst does not constrain a local type variable then
20 [Free] then throw it out as free.
22 Inference (top level definitions)
23 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
24 If the inst does not constrain a local type variable, then
25 [FreeIfTautological] try for tautology;
26 if so, throw it out as free
27 (discarding result of tautology check)
28 if not, make original inst part of the context
29 (eliminating superclasses as usual)
31 If the inst constrains a local type variable, then
32 as for inference (local defns)
35 Checking (local defns)
37 If the inst constrains a local type variable then
38 [ReduceMe] reduce (signal error on failure)
40 If the inst does not constrain a local type variable then
41 [Free] throw it out as free.
45 If the inst constrains a local type variable then
46 as for checking (local defns)
48 If the inst does not constrain a local type variable then
49 as for checking (local defns)
53 Checking once per module
54 ~~~~~~~~~~~~~~~~~~~~~~~~~
55 For dicts of the form (C a), where C is a std class
56 and "a" is a type variable,
57 [DontReduce] add to context
59 otherwise [ReduceMe] always reduce
61 [NB: we may generate one Tree [Int] dict per module, so
62 sharing is not complete.]
64 Sort out ambiguity at the end.
71 f x = let g y = op (y::Int) in True
73 Here the principal type of f is (forall a. a->a)
74 but we'll produce the non-principal type
75 f :: forall a. C Int => a -> a
82 instance C (T a) Int where ...
83 instance C (T a) Bool where ...
85 and suppose we infer a context
89 from some expression, where x and y are type varibles,
90 and x is ambiguous, and y is being quantified over.
91 Should we complain, or should we generate the type
93 forall x y. C (T x) y => <type not involving x>
95 The idea is that at the call of the function we might
96 know that y is Int (say), so the "x" isn't really ambiguous.
97 Notice that we have to add "x" to the type variables over
100 Something similar can happen even if C constrains only ambiguous
101 variables. Suppose we infer the context
105 where x is ambiguous. Then we could infer the type
107 forall x. C [x] => <type not involving x>
109 in the hope that at the call site there was an instance
112 instance Num a => C [a] where ...
114 and hence the default mechanism would resolve the "a".
119 tcSimplify, tcSimplifyAndCheck,
120 tcSimplifyTop, tcSimplifyThetas, tcSimplifyCheckThetas,
124 #include "HsVersions.h"
126 import HsSyn ( MonoBinds(..), HsExpr(..), andMonoBinds )
127 import TcHsSyn ( TcExpr, TcIdOcc(..), TcIdBndr,
128 TcMonoBinds, TcDictBinds
132 import Inst ( lookupInst, lookupSimpleInst, LookupInstResult(..),
134 isDict, isStdClassTyVarDict, isMethodFor,
135 instToId, instBindingRequired, instCanBeGeneralised,
137 instLoc, getDictClassTys,
139 Inst(..), LIE, pprInsts, pprInstsInFull, mkLIE,
140 InstOrigin, pprOrigin
142 import TcEnv ( TcIdOcc(..) )
143 import TcType ( TcType, TcTyVarSet, TcMaybe, tcInstType, tcInstTheta )
144 import Unify ( unifyTauTy )
145 import Id ( mkIdSet )
147 import Bag ( Bag, bagToList, snocBag )
148 import Class ( Class, ClassInstEnv, classBigSig, classInstEnv )
149 import PrelInfo ( isNumericClass, isCcallishClass )
151 import Maybes ( maybeToBool )
152 import Type ( Type, ThetaType, TauType, mkTyVarTy, getTyVar,
153 isTyVarTy, instantiateThetaTy
155 import PprType ( pprConstraint )
156 import TysWiredIn ( unitTy )
157 import TyVar ( intersectTyVarSets, unionManyTyVarSets,
158 isEmptyTyVarSet, zipTyVarEnv, emptyTyVarEnv
161 import BasicTypes ( TopLevelFlag(..) )
162 import Unique ( Unique )
165 import List ( partition )
169 %************************************************************************
171 \subsection[tcSimplify-main]{Main entry function}
173 %************************************************************************
175 The main wrapper is @tcSimplify@. It just calls @tcSimpl@, but with
176 the ``don't-squash-consts'' flag set depending on top-level ness. For
177 top level defns we *do* squash constants, so that they stay local to a
178 single defn. This makes things which are inlined more likely to be
179 exportable, because their constants are "inside". Later passes will
180 float them out if poss, after inlinings are sorted out.
186 -> TcTyVarSet s -- ``Local'' type variables
188 -> TcM s (LIE s, -- Free
189 TcDictBinds s, -- Bindings
190 LIE s) -- Remaining wanteds; no dups
192 tcSimplify str top_lvl local_tvs wanteds
193 = tcSimpl str top_lvl local_tvs Nothing wanteds
196 @tcSimplifyAndCheck@ is similar to the above, except that it checks
197 that there is an empty wanted-set at the end. It may still return
198 some of constant insts, which have to be resolved finally at the end.
203 -> TcTyVarSet s -- ``Local'' type variables; ASSERT is fixpoint
206 -> TcM s (LIE s, -- Free
207 TcDictBinds s) -- Bindings
209 tcSimplifyAndCheck str local_tvs givens wanteds
210 = tcSimpl str top_lvl local_tvs (Just givens) wanteds `thenTc` \ (free_insts, binds, new_wanteds) ->
211 ASSERT( isEmptyBag new_wanteds )
212 returnTc (free_insts, binds)
214 top_lvl = error "tcSimplifyAndCheck" -- Never needed
220 -> TcTyVarSet s -- ``Local'' type variables
221 -- ASSERT: this tyvar set is already zonked
222 -> Maybe (LIE s) -- Given; these constrain only local tyvars
223 -- Nothing => just simplify
224 -- Just g => check that g entails wanteds
226 -> TcM s (LIE s, -- Free
227 TcMonoBinds s, -- Bindings
228 LIE s) -- Remaining wanteds; no dups
230 tcSimpl str top_lvl local_tvs maybe_given_lie wanted_lie
231 = -- ASSSERT: local_tvs are already zonked
232 reduceContext str try_me
234 (bagToList wanted_lie) `thenTc` \ (binds, frees, irreds) ->
236 -- Check for non-generalisable insts
238 cant_generalise = filter (not . instCanBeGeneralised) irreds
240 checkTc (null cant_generalise)
241 (genCantGenErr cant_generalise) `thenTc_`
244 returnTc (mkLIE frees, binds, mkLIE irreds)
246 givens = case maybe_given_lie of
247 Just given_lie -> bagToList given_lie
250 checking_against_signature = maybeToBool maybe_given_lie
251 is_top_level = case top_lvl of { TopLevel -> True; other -> False }
254 -- Does not constrain a local tyvar
255 | isEmptyTyVarSet (inst_tyvars `intersectTyVarSets` local_tvs)
256 = -- if not checking_against_signature && is_top_level then
257 -- FreeIfTautological -- Special case for inference on
258 -- -- top-level defns
263 -- When checking against a given signature we always reduce
264 -- until we find a match against something given, or can't reduce
265 | checking_against_signature
268 -- So we're infering (not checking) the type, and
269 -- the inst constrains a local type variable
271 = if isDict inst then
274 ReduceMe CarryOn -- Lits and Methods
277 inst_tyvars = tyVarsOfInst inst
282 %************************************************************************
284 \subsection{Data types for the reduction mechanism}
286 %************************************************************************
288 The main control over context reduction is here
292 = ReduceMe -- Reduce this
293 NoInstanceAction -- What to do if there's no such instance
295 | DontReduce -- Return as irreducible
297 | Free -- Return as free
299 | FreeIfTautological -- Return as free iff it's tautological;
300 -- if not, return as irreducible
302 data NoInstanceAction
303 = CarryOn -- Produce an error message, but keep on with next inst
305 | Stop -- Produce an error message and stop reduction
307 | AddToIrreds -- Just add the inst to the irreductible ones; don't
308 -- produce an error message of any kind.
309 -- It might be quite legitimate
317 = (Avails s, -- What's available
318 [Inst s], -- Insts for which try_me returned Free
319 [Inst s] -- Insts for which try_me returned DontReduce
322 type Avails s = FiniteMap (Inst s) (Avail s)
326 (TcIdOcc s) -- The "main Id"; that is, the Id for the Inst that
327 -- caused this avail to be put into the finite map in the first place
328 -- It is this Id that is bound to the RHS.
330 (RHS s) -- The RHS: an expression whose value is that Inst.
331 -- The main Id should be bound to this RHS
333 [TcIdOcc s] -- Extra Ids that must all be bound to the main Id.
334 -- At the end we generate a list of bindings
335 -- { i1 = main_id; i2 = main_id; i3 = main_id; ... }
338 = NoRhs -- Used for irreducible dictionaries,
339 -- which are going to be lambda bound, or for those that are
340 -- suppplied as "given" when checking againgst a signature.
342 -- NoRhs is also used for Insts like (CCallable f)
343 -- where no witness is required.
345 | Rhs -- Used when there is a RHS
347 Bool -- True => the RHS simply selects a superclass dictionary
348 -- from a subclass dictionary.
350 -- This is useful info, because superclass selection
351 -- is cheaper than building the dictionary using its dfun,
352 -- and we can sometimes replace the latter with the former
354 | PassiveScSel -- Used for as-yet-unactivated RHSs. For example suppose we have
355 -- an (Ord t) dictionary; then we put an (Eq t) entry in
356 -- the finite map, with an PassiveScSel. Then if the
357 -- the (Eq t) binding is ever *needed* we make it an Rhs
359 [Inst s] -- List of Insts that are free in the RHS.
360 -- If the main Id is subsequently needed, we toss this list into
361 -- the needed-inst pool so that we make sure their bindings
362 -- will actually be produced.
364 -- Invariant: these Insts are already in the finite mapping
367 pprAvails avails = vcat (map pp (eltsFM avails))
369 pp (Avail main_id rhs ids)
370 = ppr main_id <> colon <+> brackets (ppr ids) <+> pprRhs rhs
372 pprRhs NoRhs = text "<no rhs>"
373 pprRhs (Rhs rhs b) = ppr rhs
374 pprRhs (PassiveScSel rhs is) = text "passive" <+> ppr rhs
378 %************************************************************************
380 \subsection[reduce]{@reduce@}
382 %************************************************************************
384 The main entry point for context reduction is @reduceContext@:
387 reduceContext :: SDoc -> (Inst s -> WhatToDo)
389 -> [Inst s] -- Wanted
390 -> TcM s (TcDictBinds s, [Inst s], [Inst s])
392 reduceContext str try_me givens wanteds
394 mapNF_Tc zonkInst givens `thenNF_Tc` \ givens ->
395 mapNF_Tc zonkInst wanteds `thenNF_Tc` \ wanteds ->
398 pprTrace "reduceContext" (vcat [
399 text "----------------------",
401 text "given" <+> ppr givens,
402 text "wanted" <+> ppr wanteds,
403 text "----------------------"
407 -- Build the Avail mapping from "givens"
408 foldlNF_Tc addGiven emptyFM givens `thenNF_Tc` \ avails ->
411 reduce try_me wanteds (avails, [], []) `thenTc` \ (avails, frees, irreds) ->
413 -- Extract the bindings from avails
415 binds = foldFM add_bind EmptyMonoBinds avails
417 add_bind _ (Avail main_id rhs ids) binds
418 = foldr add_synonym (add_rhs_bind rhs binds) ids
420 add_rhs_bind (Rhs rhs _) binds = binds `AndMonoBinds` VarMonoBind main_id rhs
421 add_rhs_bind other binds = binds
423 -- Add the trivial {x = y} bindings
424 -- The main Id can end up in the list when it's first added passively
425 -- and then activated, so we have to filter it out. A bit of a hack.
427 | id /= main_id = binds `AndMonoBinds` VarMonoBind id (HsVar main_id)
431 pprTrace ("reduceContext1") (vcat [
432 text "----------------------",
434 text "given" <+> ppr givens,
435 text "wanted" <+> ppr wanteds,
438 text "----------------------"
441 returnTc (binds, frees, irreds)
444 The main context-reduction function is @reduce@. Here's its game plan.
447 reduce :: (Inst s -> WhatToDo)
450 -> TcM s (RedState s)
454 try_me: given an inst, this function returns
456 DontReduce return this in "irreds"
457 Free return this in "frees"
459 wanteds: The list of insts to reduce
460 state: An accumulating parameter of type RedState
461 that contains the state of the algorithm
463 It returns a RedState.
467 -- Base case: we're done!
468 reduce try_me [] state = returnTc state
470 reduce try_me (wanted:wanteds) state@(avails, frees, irreds)
472 -- It's the same as an existing inst, or a superclass thereof
473 | wanted `elemFM` avails
474 = reduce try_me wanteds (activate avails wanted, frees, irreds)
476 -- It should be reduced
477 | case try_me_result of { ReduceMe _ -> True; _ -> False }
478 = lookupInst wanted `thenNF_Tc` \ lookup_result ->
480 case lookup_result of
481 GenInst wanteds' rhs -> use_instance wanteds' rhs
482 SimpleInst rhs -> use_instance [] rhs
484 NoInstance -> -- No such instance!
485 -- Decide what to do based on the no_instance_action requested
486 case no_instance_action of
488 addNoInstanceErr wanted `thenNF_Tc_`
491 CarryOn -> -- Carry on.
492 -- Add the bad guy to the avails to suppress similar
493 -- messages from other insts in wanteds
494 addNoInstanceErr wanted `thenNF_Tc_`
495 addGiven avails wanted `thenNF_Tc` \ avails' ->
496 reduce try_me wanteds (avails', frees, irreds) -- Carry on
498 AddToIrreds -> -- Add the offending insts to the irreds
503 -- It's free and this isn't a top-level binding, so just chuck it upstairs
504 | case try_me_result of { Free -> True; _ -> False }
505 = -- First, see if the inst can be reduced to a constant in one step
506 lookupInst wanted `thenNF_Tc` \ lookup_result ->
507 case lookup_result of
508 SimpleInst rhs -> use_instance [] rhs
509 other -> add_to_frees
511 -- It's free and this is a top level binding, so
512 -- check whether it's a tautology or not
513 | case try_me_result of { FreeIfTautological -> True; _ -> False }
514 = -- Try for tautology
516 -- If tautology trial fails, add to irreds
517 (addGiven avails wanted `thenNF_Tc` \ avails' ->
518 returnTc (avails', frees, wanted:irreds))
520 -- If tautology succeeds, just add to frees
521 (reduce try_me_taut [wanted] (avails, [], []) `thenTc_`
522 returnTc (avails, wanted:frees, irreds))
524 reduce try_me wanteds state'
527 -- It's irreducible (or at least should not be reduced)
529 = ASSERT( case try_me_result of { DontReduce -> True; other -> False } )
530 -- See if the inst can be reduced to a constant in one step
531 lookupInst wanted `thenNF_Tc` \ lookup_result ->
532 case lookup_result of
533 SimpleInst rhs -> use_instance [] rhs
534 other -> add_to_irreds
537 -- The three main actions
538 add_to_frees = reduce try_me wanteds (avails, wanted:frees, irreds)
540 add_to_irreds = addGiven avails wanted `thenNF_Tc` \ avails' ->
541 reduce try_me wanteds (avails', frees, wanted:irreds)
543 use_instance wanteds' rhs = addWanted avails wanted rhs `thenNF_Tc` \ avails' ->
544 reduce try_me (wanteds' ++ wanteds) (avails', frees, irreds)
547 try_me_result = try_me wanted
548 ReduceMe no_instance_action = try_me_result
550 -- The try-me to use when trying to identify tautologies
551 -- It blunders on reducing as much as possible
552 try_me_taut inst = ReduceMe Stop -- No error recovery
557 activate :: Avails s -> Inst s -> Avails s
558 -- Activate the binding for Inst, ensuring that a binding for the
559 -- wanted Inst will be generated.
560 -- (Activate its parent if necessary, recursively).
561 -- Precondition: the Inst is in Avails already
563 activate avails wanted
564 | not (instBindingRequired wanted)
568 = case lookupFM avails wanted of
570 Just (Avail main_id (PassiveScSel rhs insts) ids) ->
571 foldl activate avails' insts -- Activate anything it needs
573 avails' = addToFM avails wanted avail'
574 avail' = Avail main_id (Rhs rhs True) (wanted_id : ids) -- Activate it
576 Just (Avail main_id other_rhs ids) -> -- Just add to the synonyms list
577 addToFM avails wanted (Avail main_id other_rhs (wanted_id : ids))
579 Nothing -> panic "activate"
581 wanted_id = instToId wanted
583 addWanted avails wanted rhs_expr
584 = ASSERT( not (wanted `elemFM` avails) )
585 returnNF_Tc (addToFM avails wanted avail)
586 -- NB: we don't add the thing's superclasses too!
587 -- Why not? Because addWanted is used when we've successfully used an
588 -- instance decl to reduce something; e.g.
589 -- d:Ord [a] = dfunOrd (d1:Eq [a]) (d2:Ord a)
590 -- Note that we pass the superclasses to the dfun, so they will be "wanted".
591 -- If we put the superclasses of "d" in avails, then we might end up
592 -- expressing "d1" in terms of "d", which would be a disaster.
594 avail = Avail (instToId wanted) rhs []
596 rhs | instBindingRequired wanted = Rhs rhs_expr False -- Not superclass selection
599 addGiven :: Avails s -> Inst s -> NF_TcM s (Avails s)
600 addGiven avails given
601 = -- ASSERT( not (given `elemFM` avails) )
602 -- This assertion isn' necessarily true. It's permitted
603 -- to given a redundant context in a type signature (eg (Ord a, Eq a) => ...)
604 -- and when typechecking instance decls we generate redundant "givens" too.
605 addAvail avails given avail
607 avail = Avail (instToId given) NoRhs []
609 addAvail avails wanted avail
610 = addSuperClasses (addToFM avails wanted avail) wanted
612 addSuperClasses :: Avails s -> Inst s -> NF_TcM s (Avails s)
613 -- Add all the superclasses of the Inst to Avails
614 -- Invariant: the Inst is already in Avails.
616 addSuperClasses avails dict
620 | otherwise -- It is a dictionary
621 = tcInstTheta env sc_theta `thenNF_Tc` \ sc_theta' ->
622 foldlNF_Tc add_sc avails (zipEqual "addSuperClasses" sc_theta' sc_sels)
624 (clas, tys) = getDictClassTys dict
626 (tyvars, sc_theta, sc_sels, _, _) = classBigSig clas
627 env = zipTyVarEnv tyvars tys
629 add_sc avails ((super_clas, super_tys), sc_sel)
630 = newDictFromOld dict super_clas super_tys `thenNF_Tc` \ super_dict ->
632 sc_sel_rhs = DictApp (TyApp (HsVar (RealId sc_sel))
636 case lookupFM avails super_dict of
638 Just (Avail main_id (Rhs rhs False {- not sc selection -}) ids) ->
639 -- Already there, but not as a superclass selector
640 -- No need to look at its superclasses; since it's there
641 -- already they must be already in avails
642 -- However, we must remember to activate the dictionary
643 -- from which it is (now) generated
644 returnNF_Tc (activate avails' dict)
646 avails' = addToFM avails super_dict avail
647 avail = Avail main_id (Rhs sc_sel_rhs True) ids -- Superclass selection
649 Just (Avail _ _ _) -> returnNF_Tc avails
650 -- Already there; no need to do anything
653 -- Not there at all, so add it, and its superclasses
654 addAvail avails super_dict avail
656 avail = Avail (instToId super_dict)
657 (PassiveScSel sc_sel_rhs [dict])
661 %************************************************************************
663 \subsection[simple]{@Simple@ versions}
665 %************************************************************************
667 Much simpler versions when there are no bindings to make!
669 @tcSimplifyThetas@ simplifies class-type constraints formed by
670 @deriving@ declarations and when specialising instances. We are
671 only interested in the simplified bunch of class/type constraints.
673 It simplifies to constraints of the form (C a b c) where
674 a,b,c are type variables. This is required for the context of
675 instance declarations.
678 tcSimplifyThetas :: (Class -> ClassInstEnv) -- How to find the ClassInstEnv
679 -> ThetaType -- Wanted
680 -> TcM s ThetaType -- Needed; of the form C a b c
681 -- where a,b,c are type variables
683 tcSimplifyThetas inst_mapper wanteds
684 = reduceSimple inst_mapper [] wanteds `thenNF_Tc` \ irreds ->
686 -- Check that the returned dictionaries are of the form (C a b c)
687 bad_guys = [ct | ct@(clas,tys) <- irreds, not (all isTyVarTy tys)]
689 if null bad_guys then
692 mapNF_Tc addNoInstErr bad_guys `thenNF_Tc_`
696 @tcSimplifyCheckThetas@ just checks class-type constraints, essentially;
697 used with \tr{default} declarations. We are only interested in
698 whether it worked or not.
701 tcSimplifyCheckThetas :: ThetaType -- Given
702 -> ThetaType -- Wanted
705 tcSimplifyCheckThetas givens wanteds
706 = reduceSimple classInstEnv givens wanteds `thenNF_Tc` \ irreds ->
710 mapNF_Tc addNoInstErr irreds `thenNF_Tc_`
713 addNoInstErr (c,ts) = addErrTc (noDictInstanceErr c ts)
718 type AvailsSimple = FiniteMap (Class, [TauType]) Bool
719 -- True => irreducible
720 -- False => given, or can be derived from a given or from an irreducible
722 reduceSimple :: (Class -> ClassInstEnv)
723 -> ThetaType -- Given
724 -> ThetaType -- Wanted
725 -> NF_TcM s ThetaType -- Irreducible
727 reduceSimple inst_mapper givens wanteds
728 = reduce_simple inst_mapper givens_fm wanteds `thenNF_Tc` \ givens_fm' ->
729 returnNF_Tc [ct | (ct,True) <- fmToList givens_fm']
731 givens_fm = foldl addNonIrred emptyFM givens
733 reduce_simple :: (Class -> ClassInstEnv)
736 -> NF_TcM s AvailsSimple
738 reduce_simple inst_mapper givens []
739 = -- Finished, so pull out the needed ones
742 reduce_simple inst_mapper givens (wanted@(clas,tys) : wanteds)
743 | wanted `elemFM` givens
744 = reduce_simple inst_mapper givens wanteds
747 = lookupSimpleInst (inst_mapper clas) clas tys `thenNF_Tc` \ maybe_theta ->
750 Nothing -> reduce_simple inst_mapper (addIrred givens wanted) wanteds
751 Just theta -> reduce_simple inst_mapper (addNonIrred givens wanted) (theta ++ wanteds)
753 addIrred :: AvailsSimple -> (Class, [TauType]) -> AvailsSimple
755 = addSCs (addToFM givens ct True) ct
757 addNonIrred :: AvailsSimple -> (Class, [TauType]) -> AvailsSimple
758 addNonIrred givens ct
759 = addSCs (addToFM givens ct False) ct
761 addSCs givens ct@(clas,tys)
762 = foldl add givens sc_theta
764 (tyvars, sc_theta_tmpl, _, _, _) = classBigSig clas
765 sc_theta = instantiateThetaTy (zipTyVarEnv tyvars tys) sc_theta_tmpl
767 add givens ct = case lookupFM givens ct of
768 Nothing -> -- Add it and its superclasses
769 addSCs (addToFM givens ct False) ct
771 Just True -> -- Set its flag to False; superclasses already done
772 addToFM givens ct False
774 Just False -> -- Already done
779 %************************************************************************
781 \subsection[binds-for-local-funs]{@bindInstsOfLocalFuns@}
783 %************************************************************************
785 When doing a binding group, we may have @Insts@ of local functions.
786 For example, we might have...
788 let f x = x + 1 -- orig local function (overloaded)
789 f.1 = f Int -- two instances of f
794 The point is: we must drop the bindings for @f.1@ and @f.2@ here,
795 where @f@ is in scope; those @Insts@ must certainly not be passed
796 upwards towards the top-level. If the @Insts@ were binding-ified up
797 there, they would have unresolvable references to @f@.
799 We pass in an @init_lie@ of @Insts@ and a list of locally-bound @Ids@.
800 For each method @Inst@ in the @init_lie@ that mentions one of the
801 @Ids@, we create a binding. We return the remaining @Insts@ (in an
802 @LIE@), as well as the @HsBinds@ generated.
805 bindInstsOfLocalFuns :: LIE s -> [TcIdBndr s] -> TcM s (LIE s, TcMonoBinds s)
807 bindInstsOfLocalFuns init_lie local_ids
808 = reduceContext (text "bindInsts" <+> ppr local_ids)
809 try_me [] (bagToList init_lie) `thenTc` \ (binds, frees, irreds) ->
810 ASSERT( null irreds )
811 returnTc (mkLIE frees, binds)
813 local_id_set = mkIdSet local_ids -- There can occasionally be a lot of them
814 -- so it's worth building a set, so that
815 -- lookup (in isMethodFor) is faster
816 try_me inst | isMethodFor local_id_set inst = ReduceMe CarryOn
821 %************************************************************************
823 \section[Disambig]{Disambiguation of overloading}
825 %************************************************************************
828 If a dictionary constrains a type variable which is
831 not mentioned in the environment
833 and not mentioned in the type of the expression
835 then it is ambiguous. No further information will arise to instantiate
836 the type variable; nor will it be generalised and turned into an extra
837 parameter to a function.
839 It is an error for this to occur, except that Haskell provided for
840 certain rules to be applied in the special case of numeric types.
845 at least one of its classes is a numeric class, and
847 all of its classes are numeric or standard
849 then the type variable can be defaulted to the first type in the
850 default-type list which is an instance of all the offending classes.
852 So here is the function which does the work. It takes the ambiguous
853 dictionaries and either resolves them (producing bindings) or
854 complains. It works by splitting the dictionary list by type
855 variable, and using @disambigOne@ to do the real business.
858 @tcSimplifyTop@ is called once per module to simplify
859 all the constant and ambiguous Insts.
862 tcSimplifyTop :: LIE s -> TcM s (TcDictBinds s)
863 tcSimplifyTop wanteds
864 = reduceContext (text "tcSimplTop") try_me [] (bagToList wanteds) `thenTc` \ (binds1, frees, irreds) ->
868 -- All the non-std ones are definite errors
869 (stds, non_stds) = partition isStdClassTyVarDict irreds
872 -- Group by type variable
873 std_groups = equivClasses cmp_by_tyvar stds
875 -- Pick the ones which its worth trying to disambiguate
876 (std_oks, std_bads) = partition worth_a_try std_groups
877 -- Have a try at disambiguation
878 -- if the type variable isn't bound
879 -- up with one of the non-standard classes
880 worth_a_try group@(d:_) = isEmptyTyVarSet (tyVarsOfInst d `intersectTyVarSets` non_std_tyvars)
881 non_std_tyvars = unionManyTyVarSets (map tyVarsOfInst non_stds)
883 -- Collect together all the bad guys
884 bad_guys = non_stds ++ concat std_bads
887 -- Disambiguate the ones that look feasible
888 mapTc disambigGroup std_oks `thenTc` \ binds_ambig ->
890 -- And complain about the ones that don't
891 mapNF_Tc complain bad_guys `thenNF_Tc_`
893 returnTc (binds1 `AndMonoBinds` andMonoBinds binds_ambig)
895 try_me inst = ReduceMe AddToIrreds
897 d1 `cmp_by_tyvar` d2 = get_tv d1 `compare` get_tv d2
899 complain d | isEmptyTyVarSet (tyVarsOfInst d) = addNoInstanceErr d
900 | otherwise = addAmbigErr [d]
902 get_tv d = case getDictClassTys d of
903 (clas, [ty]) -> getTyVar "tcSimplifyTop" ty
904 get_clas d = case getDictClassTys d of
908 @disambigOne@ assumes that its arguments dictionaries constrain all
909 the same type variable.
911 ADR Comment 20/6/94: I've changed the @CReturnable@ case to default to
912 @()@ instead of @Int@. I reckon this is the Right Thing to do since
913 the most common use of defaulting is code like:
915 _ccall_ foo `seqPrimIO` bar
917 Since we're not using the result of @foo@, the result if (presumably)
921 disambigGroup :: [Inst s] -- All standard classes of form (C a)
922 -> TcM s (TcDictBinds s)
925 | any isNumericClass classes -- Guaranteed all standard classes
926 = -- THE DICTS OBEY THE DEFAULTABLE CONSTRAINT
927 -- SO, TRY DEFAULT TYPES IN ORDER
929 -- Failure here is caused by there being no type in the
930 -- default list which can satisfy all the ambiguous classes.
931 -- For example, if Real a is reqd, but the only type in the
932 -- default list is Int.
933 tcGetDefaultTys `thenNF_Tc` \ default_tys ->
935 try_default [] -- No defaults work, so fail
938 try_default (default_ty : default_tys)
939 = tryTc (try_default default_tys) $ -- If default_ty fails, we try
940 -- default_tys instead
941 tcSimplifyCheckThetas [] thetas `thenTc` \ _ ->
944 thetas = classes `zip` repeat [default_ty]
946 -- See if any default works, and if so bind the type variable to it
947 -- If not, add an AmbigErr
948 recoverTc (addAmbigErr dicts `thenNF_Tc_` returnTc EmptyMonoBinds) $
950 try_default default_tys `thenTc` \ chosen_default_ty ->
952 -- Bind the type variable and reduce the context, for real this time
953 tcInstType emptyTyVarEnv chosen_default_ty `thenNF_Tc` \ chosen_default_tc_ty -> -- Tiresome!
954 unifyTauTy chosen_default_tc_ty (mkTyVarTy tyvar) `thenTc_`
955 reduceContext (text "disambig" <+> ppr dicts)
956 try_me [] dicts `thenTc` \ (binds, frees, ambigs) ->
957 ASSERT( null frees && null ambigs )
960 | all isCcallishClass classes
961 = -- Default CCall stuff to (); we don't even both to check that () is an
962 -- instance of CCallable/CReturnable, because we know it is.
963 unifyTauTy (mkTyVarTy tyvar) unitTy `thenTc_`
964 returnTc EmptyMonoBinds
966 | otherwise -- No defaults
967 = addAmbigErr dicts `thenNF_Tc_`
968 returnTc EmptyMonoBinds
971 try_me inst = ReduceMe CarryOn
972 tyvar = get_tv (head dicts) -- Should be non-empty
973 classes = map get_clas dicts
980 ToDo: for these error messages, should we note the location as coming
981 from the insts, or just whatever seems to be around in the monad just
985 genCantGenErr insts -- Can't generalise these Insts
986 = sep [ptext SLIT("Cannot generalise these overloadings (in a _ccall_):"),
987 nest 4 (pprInstsInFull insts)
991 = tcAddSrcLoc (instLoc (head dicts)) $
992 addErrTc (sep [text "Cannot resolve the ambiguous context" <+> pprInsts dicts,
993 nest 4 (pprInstsInFull dicts)])
995 addNoInstanceErr dict
996 = tcAddSrcLoc (instLoc dict) $
997 tcAddErrCtxt (pprOrigin dict) $
998 addErrTc (noDictInstanceErr clas tys)
1000 (clas, tys) = getDictClassTys dict
1002 noDictInstanceErr clas tys
1003 = ptext SLIT("No instance for:") <+> quotes (pprConstraint clas tys)
1006 = sep [ptext SLIT("When matching against a type signature with context"),
1007 nest 4 (quotes (pprInsts (bagToList lie)))