2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
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, tcSimplifyToDicts,
120 tcSimplifyTop, tcSimplifyThetas, tcSimplifyCheckThetas,
124 #include "HsVersions.h"
126 import CmdLineOpts ( opt_MaxContextReductionDepth, opt_GlasgowExts, opt_WarnTypeDefaults )
127 import HsSyn ( MonoBinds(..), HsExpr(..), andMonoBinds, andMonoBindList )
128 import TcHsSyn ( TcExpr, TcId,
129 TcMonoBinds, TcDictBinds
133 import Inst ( lookupInst, lookupSimpleInst, LookupInstResult(..),
135 isDict, isStdClassTyVarDict, isMethodFor, notFunDep,
136 instToId, instBindingRequired, instCanBeGeneralised,
139 instLoc, pprInst, zonkInst, tidyInst, tidyInsts,
140 Inst, LIE, pprInsts, pprInstsInFull, mkLIE, emptyLIE,
143 import TcEnv ( tcGetGlobalTyVars )
144 import TcType ( TcType, TcTyVarSet, typeToTcType )
145 import TcUnify ( unifyTauTy )
147 import Bag ( bagToList )
148 import Class ( Class, classBigSig, classInstEnv )
149 import PrelInfo ( isNumericClass, isCreturnableClass, isCcallishClass )
151 import Type ( Type, ThetaType, TauType, mkTyVarTy, getTyVar,
152 isTyVarTy, splitSigmaTy, tyVarsOfTypes
154 import InstEnv ( InstEnv )
155 import Subst ( mkTopTyVarSubst, substTheta )
156 import PprType ( pprConstraint )
157 import TysWiredIn ( unitTy )
160 import BasicTypes ( TopLevelFlag(..) )
161 import CmdLineOpts ( opt_GlasgowExts )
164 import List ( partition )
168 %************************************************************************
170 \subsection[tcSimplify-main]{Main entry function}
172 %************************************************************************
174 The main wrapper is @tcSimplify@. It just calls @tcSimpl@, but with
175 the ``don't-squash-consts'' flag set depending on top-level ness. For
176 top level defns we *do* squash constants, so that they stay local to a
177 single defn. This makes things which are inlined more likely to be
178 exportable, because their constants are "inside". Later passes will
179 float them out if poss, after inlinings are sorted out.
185 -> TcTyVarSet -- ``Local'' type variables
186 -- ASSERT: this tyvar set is already zonked
188 -> TcM s (LIE, -- Free
189 TcDictBinds, -- Bindings
190 LIE) -- Remaining wanteds; no dups
192 tcSimplify str top_lvl local_tvs wanted_lie
193 | isEmptyVarSet local_tvs
194 = returnTc (wanted_lie, EmptyMonoBinds, emptyLIE)
197 = reduceContext str try_me [] wanteds `thenTc` \ (binds, frees, irreds) ->
199 -- Check for non-generalisable insts
201 cant_generalise = filter (not . instCanBeGeneralised) irreds
203 checkTc (null cant_generalise)
204 (genCantGenErr cant_generalise) `thenTc_`
206 -- Check for ambiguous insts.
207 -- You might think these can't happen (I did) because an ambiguous
208 -- inst like (Eq a) will get tossed out with "frees", and eventually
209 -- dealt with by tcSimplifyTop.
210 -- But we can get stuck with
212 -- where "a" is one of the local_tvs, but "b" is unconstrained.
213 -- Then we must yell about the ambiguous b
214 -- But we must only do so if "b" really is unconstrained; so
215 -- we must grab the global tyvars to answer that question
216 tcGetGlobalTyVars `thenNF_Tc` \ global_tvs ->
218 avail_tvs = local_tvs `unionVarSet` global_tvs
219 (irreds', bad_guys) = partition (isEmptyVarSet . ambig_tv_fn) irreds
220 ambig_tv_fn dict = tyVarsOfInst dict `minusVarSet` avail_tvs
222 addAmbigErrs ambig_tv_fn bad_guys `thenNF_Tc_`
226 returnTc (mkLIE frees, binds, mkLIE irreds')
228 -- the idea behind filtering out the dependencies here is that
229 -- they've already served their purpose, and can be reconstructed
230 -- at a later point from the retained class predicates.
231 -- however, there *is* the possibility that a dependency
232 -- out-lives the predicate from which it arose.
233 -- I don't have any examples of this, but if they show up,
234 -- we'd want to consider the possibility of saving the
235 -- dependencies as hidden constraints (i.e. they'd only
236 -- show up in interface files) -- or maybe they'd be useful
237 -- as first class predicates...
238 wanteds = filter notFunDep (bagToList wanted_lie)
241 -- Does not constrain a local tyvar
242 | isEmptyVarSet (tyVarsOfInst inst `intersectVarSet` local_tvs)
243 = -- if is_top_level then
244 -- FreeIfTautological -- Special case for inference on
245 -- -- top-level defns
249 -- We're infering (not checking) the type, and
250 -- the inst constrains a local type variable
251 | isDict inst = DontReduce -- Dicts
252 | otherwise = ReduceMe AddToIrreds -- Lits and Methods
255 @tcSimplifyAndCheck@ is similar to the above, except that it checks
256 that there is an empty wanted-set at the end. It may still return
257 some of constant insts, which have to be resolved finally at the end.
262 -> TcTyVarSet -- ``Local'' type variables
263 -- ASSERT: this tyvar set is already zonked
264 -> LIE -- Given; constrain only local tyvars
266 -> TcM s (LIE, -- Free
267 TcDictBinds) -- Bindings
269 tcSimplifyAndCheck str local_tvs given_lie wanted_lie
270 | isEmptyVarSet local_tvs
271 -- This can happen quite legitimately; for example in
272 -- instance Num Int where ...
273 = returnTc (wanted_lie, EmptyMonoBinds)
276 = reduceContext str try_me givens wanteds `thenTc` \ (binds, frees, irreds) ->
278 -- Complain about any irreducible ones
279 mapNF_Tc complain irreds `thenNF_Tc_`
282 returnTc (mkLIE frees, binds)
284 givens = bagToList given_lie
285 -- see comment on wanteds in tcSimplify
286 wanteds = filter notFunDep (bagToList wanted_lie)
287 given_dicts = filter isDict givens
290 -- Does not constrain a local tyvar
291 | isEmptyVarSet (tyVarsOfInst inst `intersectVarSet` local_tvs)
294 -- When checking against a given signature we always reduce
295 -- until we find a match against something given, or can't reduce
297 = ReduceMe AddToIrreds
299 complain dict = mapNF_Tc zonkInst givens `thenNF_Tc` \ givens ->
300 addNoInstanceErr str given_dicts dict
303 On the LHS of transformation rules we only simplify methods and constants,
304 getting dictionaries. We want to keep all of them unsimplified, to serve
305 as the available stuff for the RHS of the rule.
307 The same thing is used for specialise pragmas. Consider
310 {-# SPECIALISE f :: Int -> Int #-}
313 The type checker generates a binding like:
315 f_spec = (f :: Int -> Int)
317 and we want to end up with
319 f_spec = _inline_me_ (f Int dNumInt)
321 But that means that we must simplify the Method for f to (f Int dNumInt)!
322 So tcSimplifyToDicts squeezes out all Methods.
325 tcSimplifyToDicts :: LIE -> TcM s (LIE, TcDictBinds)
326 tcSimplifyToDicts wanted_lie
327 = reduceContext (text "tcSimplifyToDicts") try_me [] wanteds `thenTc` \ (binds, frees, irreds) ->
329 returnTc (mkLIE irreds, binds)
331 -- see comment on wanteds in tcSimplify
332 wanteds = filter notFunDep (bagToList wanted_lie)
334 -- Reduce methods and lits only; stop as soon as we get a dictionary
335 try_me inst | isDict inst = DontReduce
336 | otherwise = ReduceMe AddToIrreds
341 %************************************************************************
343 \subsection{Data types for the reduction mechanism}
345 %************************************************************************
347 The main control over context reduction is here
351 = ReduceMe -- Try to reduce this
352 NoInstanceAction -- What to do if there's no such instance
354 | DontReduce -- Return as irreducible
356 | Free -- Return as free
358 | FreeIfTautological -- Return as free iff it's tautological;
359 -- if not, return as irreducible
360 -- The FreeIfTautological case is to allow the possibility
361 -- of generating functions with types like
362 -- f :: C Int => Int -> Int
363 -- Here, the C Int isn't a tautology presumably because Int
364 -- isn't an instance of C in this module; but perhaps it will
365 -- be at f's call site(s). Haskell doesn't allow this at
368 data NoInstanceAction
369 = Stop -- Fail; no error message
370 -- (Only used when tautology checking.)
372 | AddToIrreds -- Just add the inst to the irreductible ones; don't
373 -- produce an error message of any kind.
374 -- It might be quite legitimate such as (Eq a)!
381 = (Avails s, -- What's available
382 [Inst], -- Insts for which try_me returned Free
383 [Inst] -- Insts for which try_me returned DontReduce
386 type Avails s = FiniteMap Inst Avail
390 TcId -- The "main Id"; that is, the Id for the Inst that
391 -- caused this avail to be put into the finite map in the first place
392 -- It is this Id that is bound to the RHS.
394 RHS -- The RHS: an expression whose value is that Inst.
395 -- The main Id should be bound to this RHS
397 [TcId] -- Extra Ids that must all be bound to the main Id.
398 -- At the end we generate a list of bindings
399 -- { i1 = main_id; i2 = main_id; i3 = main_id; ... }
402 = NoRhs -- Used for irreducible dictionaries,
403 -- which are going to be lambda bound, or for those that are
404 -- suppplied as "given" when checking againgst a signature.
406 -- NoRhs is also used for Insts like (CCallable f)
407 -- where no witness is required.
409 | Rhs -- Used when there is a RHS
411 Bool -- True => the RHS simply selects a superclass dictionary
412 -- from a subclass dictionary.
414 -- This is useful info, because superclass selection
415 -- is cheaper than building the dictionary using its dfun,
416 -- and we can sometimes replace the latter with the former
418 | PassiveScSel -- Used for as-yet-unactivated RHSs. For example suppose we have
419 -- an (Ord t) dictionary; then we put an (Eq t) entry in
420 -- the finite map, with an PassiveScSel. Then if the
421 -- the (Eq t) binding is ever *needed* we make it an Rhs
423 [Inst] -- List of Insts that are free in the RHS.
424 -- If the main Id is subsequently needed, we toss this list into
425 -- the needed-inst pool so that we make sure their bindings
426 -- will actually be produced.
428 -- Invariant: these Insts are already in the finite mapping
431 pprAvails avails = vcat (map pp (eltsFM avails))
433 pp (Avail main_id rhs ids)
434 = ppr main_id <> colon <+> brackets (ppr ids) <+> pprRhs rhs
436 pprRhs NoRhs = text "<no rhs>"
437 pprRhs (Rhs rhs b) = ppr rhs
438 pprRhs (PassiveScSel rhs is) = text "passive" <+> ppr rhs
442 %************************************************************************
444 \subsection[reduce]{@reduce@}
446 %************************************************************************
448 The main entry point for context reduction is @reduceContext@:
451 reduceContext :: SDoc -> (Inst -> WhatToDo)
454 -> TcM s (TcDictBinds,
456 [Inst]) -- Irreducible
458 reduceContext str try_me givens wanteds
460 mapNF_Tc zonkInst givens `thenNF_Tc` \ givens ->
461 mapNF_Tc zonkInst wanteds `thenNF_Tc` \ wanteds ->
464 pprTrace "reduceContext" (vcat [
465 text "----------------------",
467 text "given" <+> ppr givens,
468 text "wanted" <+> ppr wanteds,
469 text "----------------------"
472 -- Build the Avail mapping from "givens"
473 foldlNF_Tc addGiven emptyFM givens `thenNF_Tc` \ avails ->
476 reduceList (0,[]) try_me wanteds (avails, [], []) `thenTc` \ (avails, frees, irreds) ->
478 -- Extract the bindings from avails
480 binds = foldFM add_bind EmptyMonoBinds avails
482 add_bind _ (Avail main_id rhs ids) binds
483 = foldr add_synonym (add_rhs_bind rhs binds) ids
485 add_rhs_bind (Rhs rhs _) binds = binds `AndMonoBinds` VarMonoBind main_id rhs
486 add_rhs_bind other binds = binds
488 -- Add the trivial {x = y} bindings
489 -- The main Id can end up in the list when it's first added passively
490 -- and then activated, so we have to filter it out. A bit of a hack.
492 | id /= main_id = binds `AndMonoBinds` VarMonoBind id (HsVar main_id)
496 pprTrace ("reduceContext end") (vcat [
497 text "----------------------",
499 text "given" <+> ppr givens,
500 text "wanted" <+> ppr wanteds,
502 text "avails" <+> pprAvails avails,
503 text "irreds" <+> ppr irreds,
504 text "----------------------"
507 returnTc (binds, frees, irreds)
510 The main context-reduction function is @reduce@. Here's its game plan.
513 reduceList :: (Int,[Inst]) -- Stack (for err msgs)
514 -- along with its depth
515 -> (Inst -> WhatToDo)
518 -> TcM s (RedState s)
522 try_me: given an inst, this function returns
524 DontReduce return this in "irreds"
525 Free return this in "frees"
527 wanteds: The list of insts to reduce
528 state: An accumulating parameter of type RedState
529 that contains the state of the algorithm
531 It returns a RedState.
533 The (n,stack) pair is just used for error reporting.
534 n is always the depth of the stack.
535 The stack is the stack of Insts being reduced: to produce X
536 I had to produce Y, to produce Y I had to produce Z, and so on.
539 reduceList (n,stack) try_me wanteds state
540 | n > opt_MaxContextReductionDepth
541 = failWithTc (reduceDepthErr n stack)
547 pprTrace "Jeepers! ReduceContext:" (reduceDepthMsg n stack)
552 go [] state = returnTc state
553 go (w:ws) state = reduce (n+1, w:stack) try_me w state `thenTc` \ state' ->
556 -- Base case: we're done!
557 reduce stack try_me wanted state@(avails, frees, irreds)
558 -- It's the same as an existing inst, or a superclass thereof
559 | wanted `elemFM` avails
560 = returnTc (activate avails wanted, frees, irreds)
563 = case try_me wanted of {
565 ReduceMe no_instance_action -> -- It should be reduced
566 lookupInst wanted `thenNF_Tc` \ lookup_result ->
567 case lookup_result of
568 GenInst wanteds' rhs -> use_instance wanteds' rhs
569 SimpleInst rhs -> use_instance [] rhs
571 NoInstance -> -- No such instance!
572 case no_instance_action of
574 AddToIrreds -> add_to_irreds
576 Free -> -- It's free and this isn't a top-level binding, so just chuck it upstairs
577 -- First, see if the inst can be reduced to a constant in one step
578 lookupInst wanted `thenNF_Tc` \ lookup_result ->
579 case lookup_result of
580 SimpleInst rhs -> use_instance [] rhs
581 other -> add_to_frees
586 FreeIfTautological -> -- It's free and this is a top level binding, so
587 -- check whether it's a tautology or not
589 add_to_irreds -- If tautology trial fails, add to irreds
591 -- If tautology succeeds, just add to frees
592 (reduce stack try_me_taut wanted (avails, [], []) `thenTc_`
593 returnTc (avails, wanted:frees, irreds))
597 DontReduce -> -- It's irreducible (or at least should not be reduced)
598 -- See if the inst can be reduced to a constant in one step
599 lookupInst wanted `thenNF_Tc` \ lookup_result ->
600 case lookup_result of
601 SimpleInst rhs -> use_instance [] rhs
602 other -> add_to_irreds
605 -- The three main actions
607 avails' = addFree avails wanted
608 -- Add the thing to the avails set so any identical Insts
609 -- will be commoned up with it right here
611 returnTc (avails', wanted:frees, irreds)
613 add_to_irreds = addGiven avails wanted `thenNF_Tc` \ avails' ->
614 returnTc (avails', frees, wanted:irreds)
616 use_instance wanteds' rhs = addWanted avails wanted rhs `thenNF_Tc` \ avails' ->
617 reduceList stack try_me wanteds' (avails', frees, irreds)
620 -- The try-me to use when trying to identify tautologies
621 -- It blunders on reducing as much as possible
622 try_me_taut inst = ReduceMe Stop -- No error recovery
627 activate :: Avails s -> Inst -> Avails s
628 -- Activate the binding for Inst, ensuring that a binding for the
629 -- wanted Inst will be generated.
630 -- (Activate its parent if necessary, recursively).
631 -- Precondition: the Inst is in Avails already
633 activate avails wanted
634 | not (instBindingRequired wanted)
638 = case lookupFM avails wanted of
640 Just (Avail main_id (PassiveScSel rhs insts) ids) ->
641 foldl activate avails' insts -- Activate anything it needs
643 avails' = addToFM avails wanted avail'
644 avail' = Avail main_id (Rhs rhs True) (wanted_id : ids) -- Activate it
646 Just (Avail main_id other_rhs ids) -> -- Just add to the synonyms list
647 addToFM avails wanted (Avail main_id other_rhs (wanted_id : ids))
649 Nothing -> panic "activate"
651 wanted_id = instToId wanted
653 addWanted avails wanted rhs_expr
654 = ASSERT( not (wanted `elemFM` avails) )
655 returnNF_Tc (addToFM avails wanted avail)
656 -- NB: we don't add the thing's superclasses too!
657 -- Why not? Because addWanted is used when we've successfully used an
658 -- instance decl to reduce something; e.g.
659 -- d:Ord [a] = dfunOrd (d1:Eq [a]) (d2:Ord a)
660 -- Note that we pass the superclasses to the dfun, so they will be "wanted".
661 -- If we put the superclasses of "d" in avails, then we might end up
662 -- expressing "d1" in terms of "d", which would be a disaster.
664 avail = Avail (instToId wanted) rhs []
666 rhs | instBindingRequired wanted = Rhs rhs_expr False -- Not superclass selection
669 addFree :: Avails s -> Inst -> (Avails s)
670 -- When an Inst is tossed upstairs as 'free' we nevertheless add it
671 -- to avails, so that any other equal Insts will be commoned up right
672 -- here rather than also being tossed upstairs. This is really just
673 -- an optimisation, and perhaps it is more trouble that it is worth,
674 -- as the following comments show!
676 -- NB1: do *not* add superclasses. If we have
679 -- but a is not bound here, then we *don't* want to derive
680 -- dn from df here lest we lose sharing.
682 -- NB2: do *not* add the Inst to avails at all if it's a method.
683 -- The following situation shows why this is bad:
684 -- truncate :: forall a. RealFrac a => forall b. Integral b => a -> b
685 -- From an application (truncate f i) we get
686 -- t1 = truncate at f
688 -- If we have also have a secon occurrence of truncate, we get
689 -- t3 = truncate at f
691 -- When simplifying with i,f free, we might still notice that
692 -- t1=t3; but alas, the binding for t2 (which mentions t1)
693 -- will continue to float out!
694 -- Solution: never put methods in avail till they are captured
695 -- in which case addFree isn't used
697 | isDict free = addToFM avails free (Avail (instToId free) NoRhs [])
700 addGiven :: Avails s -> Inst -> NF_TcM s (Avails s)
701 addGiven avails given
702 = -- ASSERT( not (given `elemFM` avails) )
703 -- This assertion isn't necessarily true. It's permitted
704 -- to given a redundant context in a type signature (eg (Ord a, Eq a) => ...)
705 -- and when typechecking instance decls we generate redundant "givens" too.
706 addAvail avails given avail
708 avail = Avail (instToId given) NoRhs []
710 addAvail avails wanted avail
711 = addSuperClasses (addToFM avails wanted avail) wanted
713 addSuperClasses :: Avails s -> Inst -> NF_TcM s (Avails s)
714 -- Add all the superclasses of the Inst to Avails
715 -- Invariant: the Inst is already in Avails.
717 addSuperClasses avails dict
721 | otherwise -- It is a dictionary
722 = foldlNF_Tc add_sc avails (zipEqual "addSuperClasses" sc_theta' sc_sels)
724 (clas, tys) = getDictClassTys dict
726 (tyvars, sc_theta, sc_sels, _) = classBigSig clas
727 sc_theta' = substTheta (mkTopTyVarSubst tyvars tys) sc_theta
729 add_sc avails ((super_clas, super_tys), sc_sel)
730 = newDictFromOld dict super_clas super_tys `thenNF_Tc` \ super_dict ->
732 sc_sel_rhs = DictApp (TyApp (HsVar sc_sel) tys)
735 case lookupFM avails super_dict of
737 Just (Avail main_id (Rhs rhs False {- not sc selection -}) ids) ->
738 -- Already there, but not as a superclass selector
739 -- No need to look at its superclasses; since it's there
740 -- already they must be already in avails
741 -- However, we must remember to activate the dictionary
742 -- from which it is (now) generated
743 returnNF_Tc (activate avails' dict)
745 avails' = addToFM avails super_dict avail
746 avail = Avail main_id (Rhs sc_sel_rhs True) ids -- Superclass selection
748 Just (Avail _ _ _) -> returnNF_Tc avails
749 -- Already there; no need to do anything
752 -- Not there at all, so add it, and its superclasses
753 addAvail avails super_dict avail
755 avail = Avail (instToId super_dict)
756 (PassiveScSel sc_sel_rhs [dict])
760 %************************************************************************
762 \subsection[simple]{@Simple@ versions}
764 %************************************************************************
766 Much simpler versions when there are no bindings to make!
768 @tcSimplifyThetas@ simplifies class-type constraints formed by
769 @deriving@ declarations and when specialising instances. We are
770 only interested in the simplified bunch of class/type constraints.
772 It simplifies to constraints of the form (C a b c) where
773 a,b,c are type variables. This is required for the context of
774 instance declarations.
777 tcSimplifyThetas :: (Class -> InstEnv) -- How to find the InstEnv
778 -> ThetaType -- Wanted
779 -> TcM s ThetaType -- Needed
781 tcSimplifyThetas inst_mapper wanteds
782 = reduceSimple inst_mapper [] wanteds `thenNF_Tc` \ irreds ->
784 -- For multi-param Haskell, check that the returned dictionaries
785 -- don't have any of the form (C Int Bool) for which
786 -- we expect an instance here
787 -- For Haskell 98, check that all the constraints are of the form C a,
788 -- where a is a type variable
789 bad_guys | opt_GlasgowExts = [ct | ct@(clas,tys) <- irreds,
790 isEmptyVarSet (tyVarsOfTypes tys)]
791 | otherwise = [ct | ct@(clas,tys) <- irreds,
792 not (all isTyVarTy tys)]
794 if null bad_guys then
797 mapNF_Tc addNoInstErr bad_guys `thenNF_Tc_`
801 @tcSimplifyCheckThetas@ just checks class-type constraints, essentially;
802 used with \tr{default} declarations. We are only interested in
803 whether it worked or not.
806 tcSimplifyCheckThetas :: ThetaType -- Given
807 -> ThetaType -- Wanted
810 tcSimplifyCheckThetas givens wanteds
811 = reduceSimple classInstEnv givens wanteds `thenNF_Tc` \ irreds ->
815 mapNF_Tc addNoInstErr irreds `thenNF_Tc_`
821 type AvailsSimple = FiniteMap (Class, [TauType]) Bool
822 -- True => irreducible
823 -- False => given, or can be derived from a given or from an irreducible
825 reduceSimple :: (Class -> InstEnv)
826 -> ThetaType -- Given
827 -> ThetaType -- Wanted
828 -> NF_TcM s ThetaType -- Irreducible
830 reduceSimple inst_mapper givens wanteds
831 = reduce_simple (0,[]) inst_mapper givens_fm wanteds `thenNF_Tc` \ givens_fm' ->
832 returnNF_Tc [ct | (ct,True) <- fmToList givens_fm']
834 givens_fm = foldl addNonIrred emptyFM givens
836 reduce_simple :: (Int,ThetaType) -- Stack
837 -> (Class -> InstEnv)
840 -> NF_TcM s AvailsSimple
842 reduce_simple (n,stack) inst_mapper avails wanteds
845 go avails [] = returnNF_Tc avails
846 go avails (w:ws) = reduce_simple_help (n+1,w:stack) inst_mapper avails w `thenNF_Tc` \ avails' ->
849 reduce_simple_help stack inst_mapper givens wanted@(clas,tys)
850 | wanted `elemFM` givens
854 = lookupSimpleInst (inst_mapper clas) clas tys `thenNF_Tc` \ maybe_theta ->
857 Nothing -> returnNF_Tc (addIrred givens wanted)
858 Just theta -> reduce_simple stack inst_mapper (addNonIrred givens wanted) theta
860 addIrred :: AvailsSimple -> (Class, [TauType]) -> AvailsSimple
862 = addSCs (addToFM givens ct True) ct
864 addNonIrred :: AvailsSimple -> (Class, [TauType]) -> AvailsSimple
865 addNonIrred givens ct
866 = addSCs (addToFM givens ct False) ct
868 addSCs givens ct@(clas,tys)
869 = foldl add givens sc_theta
871 (tyvars, sc_theta_tmpl, _, _) = classBigSig clas
872 sc_theta = substTheta (mkTopTyVarSubst tyvars tys) sc_theta_tmpl
874 add givens ct = case lookupFM givens ct of
875 Nothing -> -- Add it and its superclasses
876 addSCs (addToFM givens ct False) ct
878 Just True -> -- Set its flag to False; superclasses already done
879 addToFM givens ct False
881 Just False -> -- Already done
886 %************************************************************************
888 \subsection[binds-for-local-funs]{@bindInstsOfLocalFuns@}
890 %************************************************************************
892 When doing a binding group, we may have @Insts@ of local functions.
893 For example, we might have...
895 let f x = x + 1 -- orig local function (overloaded)
896 f.1 = f Int -- two instances of f
901 The point is: we must drop the bindings for @f.1@ and @f.2@ here,
902 where @f@ is in scope; those @Insts@ must certainly not be passed
903 upwards towards the top-level. If the @Insts@ were binding-ified up
904 there, they would have unresolvable references to @f@.
906 We pass in an @init_lie@ of @Insts@ and a list of locally-bound @Ids@.
907 For each method @Inst@ in the @init_lie@ that mentions one of the
908 @Ids@, we create a binding. We return the remaining @Insts@ (in an
909 @LIE@), as well as the @HsBinds@ generated.
912 bindInstsOfLocalFuns :: LIE -> [TcId] -> TcM s (LIE, TcMonoBinds)
914 bindInstsOfLocalFuns init_lie local_ids
915 | null overloaded_ids || null lie_for_here
917 = returnTc (init_lie, EmptyMonoBinds)
920 = reduceContext (text "bindInsts" <+> ppr local_ids)
921 try_me [] lie_for_here `thenTc` \ (binds, frees, irreds) ->
922 ASSERT( null irreds )
923 returnTc (mkLIE frees `plusLIE` mkLIE lie_not_for_here, binds)
925 overloaded_ids = filter is_overloaded local_ids
926 is_overloaded id = case splitSigmaTy (idType id) of
927 (_, theta, _) -> not (null theta)
929 overloaded_set = mkVarSet overloaded_ids -- There can occasionally be a lot of them
930 -- so it's worth building a set, so that
931 -- lookup (in isMethodFor) is faster
933 -- No sense in repeatedly zonking lots of
934 -- constant constraints so filter them out here
935 (lie_for_here, lie_not_for_here) = partition (isMethodFor overloaded_set)
937 try_me inst | isMethodFor overloaded_set inst = ReduceMe AddToIrreds
942 %************************************************************************
944 \section[Disambig]{Disambiguation of overloading}
946 %************************************************************************
949 If a dictionary constrains a type variable which is
952 not mentioned in the environment
954 and not mentioned in the type of the expression
956 then it is ambiguous. No further information will arise to instantiate
957 the type variable; nor will it be generalised and turned into an extra
958 parameter to a function.
960 It is an error for this to occur, except that Haskell provided for
961 certain rules to be applied in the special case of numeric types.
966 at least one of its classes is a numeric class, and
968 all of its classes are numeric or standard
970 then the type variable can be defaulted to the first type in the
971 default-type list which is an instance of all the offending classes.
973 So here is the function which does the work. It takes the ambiguous
974 dictionaries and either resolves them (producing bindings) or
975 complains. It works by splitting the dictionary list by type
976 variable, and using @disambigOne@ to do the real business.
979 @tcSimplifyTop@ is called once per module to simplify
980 all the constant and ambiguous Insts.
983 tcSimplifyTop :: LIE -> TcM s TcDictBinds
984 tcSimplifyTop wanted_lie
985 = reduceContext (text "tcSimplTop") try_me [] wanteds `thenTc` \ (binds1, frees, irreds) ->
989 -- All the non-std ones are definite errors
990 (stds, non_stds) = partition isStdClassTyVarDict irreds
993 -- Group by type variable
994 std_groups = equivClasses cmp_by_tyvar stds
996 -- Pick the ones which its worth trying to disambiguate
997 (std_oks, std_bads) = partition worth_a_try std_groups
998 -- Have a try at disambiguation
999 -- if the type variable isn't bound
1000 -- up with one of the non-standard classes
1001 worth_a_try group@(d:_) = isEmptyVarSet (tyVarsOfInst d `intersectVarSet` non_std_tyvars)
1002 non_std_tyvars = unionVarSets (map tyVarsOfInst non_stds)
1004 -- Collect together all the bad guys
1005 bad_guys = non_stds ++ concat std_bads
1008 -- Disambiguate the ones that look feasible
1009 mapTc disambigGroup std_oks `thenTc` \ binds_ambig ->
1011 -- And complain about the ones that don't
1012 mapNF_Tc complain bad_guys `thenNF_Tc_`
1014 returnTc (binds1 `andMonoBinds` andMonoBindList binds_ambig)
1016 -- see comment on wanteds in tcSimplify
1017 wanteds = filter notFunDep (bagToList wanted_lie)
1018 try_me inst = ReduceMe AddToIrreds
1020 d1 `cmp_by_tyvar` d2 = get_tv d1 `compare` get_tv d2
1022 complain d | isEmptyVarSet (tyVarsOfInst d) = addTopInstanceErr d
1023 | otherwise = addAmbigErr tyVarsOfInst d
1025 get_tv d = case getDictClassTys d of
1026 (clas, [ty]) -> getTyVar "tcSimplifyTop" ty
1027 get_clas d = case getDictClassTys d of
1028 (clas, [ty]) -> clas
1031 @disambigOne@ assumes that its arguments dictionaries constrain all
1032 the same type variable.
1034 ADR Comment 20/6/94: I've changed the @CReturnable@ case to default to
1035 @()@ instead of @Int@. I reckon this is the Right Thing to do since
1036 the most common use of defaulting is code like:
1038 _ccall_ foo `seqPrimIO` bar
1040 Since we're not using the result of @foo@, the result if (presumably)
1044 disambigGroup :: [Inst] -- All standard classes of form (C a)
1045 -> TcM s TcDictBinds
1048 | any isNumericClass classes -- Guaranteed all standard classes
1049 -- see comment at the end of function for reasons as to
1050 -- why the defaulting mechanism doesn't apply to groups that
1051 -- include CCallable or CReturnable dicts.
1052 && not (any isCcallishClass classes)
1053 = -- THE DICTS OBEY THE DEFAULTABLE CONSTRAINT
1054 -- SO, TRY DEFAULT TYPES IN ORDER
1056 -- Failure here is caused by there being no type in the
1057 -- default list which can satisfy all the ambiguous classes.
1058 -- For example, if Real a is reqd, but the only type in the
1059 -- default list is Int.
1060 tcGetDefaultTys `thenNF_Tc` \ default_tys ->
1062 try_default [] -- No defaults work, so fail
1065 try_default (default_ty : default_tys)
1066 = tryTc_ (try_default default_tys) $ -- If default_ty fails, we try
1067 -- default_tys instead
1068 tcSimplifyCheckThetas [] thetas `thenTc` \ _ ->
1071 thetas = classes `zip` repeat [default_ty]
1073 -- See if any default works, and if so bind the type variable to it
1074 -- If not, add an AmbigErr
1075 recoverTc (complain dicts `thenNF_Tc_` returnTc EmptyMonoBinds) $
1077 try_default default_tys `thenTc` \ chosen_default_ty ->
1079 -- Bind the type variable and reduce the context, for real this time
1081 chosen_default_tc_ty = typeToTcType chosen_default_ty -- Tiresome!
1083 unifyTauTy chosen_default_tc_ty (mkTyVarTy tyvar) `thenTc_`
1084 reduceContext (text "disambig" <+> ppr dicts)
1085 try_me [] dicts `thenTc` \ (binds, frees, ambigs) ->
1086 ASSERT( null frees && null ambigs )
1087 warnDefault dicts chosen_default_ty `thenTc_`
1090 | all isCreturnableClass classes
1091 = -- Default CCall stuff to (); we don't even both to check that () is an
1092 -- instance of CReturnable, because we know it is.
1093 unifyTauTy (mkTyVarTy tyvar) unitTy `thenTc_`
1094 returnTc EmptyMonoBinds
1096 | otherwise -- No defaults
1097 = complain dicts `thenNF_Tc_`
1098 returnTc EmptyMonoBinds
1101 complain = addAmbigErrs tyVarsOfInst
1102 try_me inst = ReduceMe AddToIrreds -- This reduce should not fail
1103 tyvar = get_tv (head dicts) -- Should be non-empty
1104 classes = map get_clas dicts
1107 [Aside - why the defaulting mechanism is turned off when
1108 dealing with arguments and results to ccalls.
1110 When typechecking _ccall_s, TcExpr ensures that the external
1111 function is only passed arguments (and in the other direction,
1112 results) of a restricted set of 'native' types. This is
1113 implemented via the help of the pseudo-type classes,
1114 @CReturnable@ (CR) and @CCallable@ (CC.)
1116 The interaction between the defaulting mechanism for numeric
1117 values and CC & CR can be a bit puzzling to the user at times.
1126 What type has 'x' got here? That depends on the default list
1127 in operation, if it is equal to Haskell 98's default-default
1128 of (Integer, Double), 'x' has type Double, since Integer
1129 is not an instance of CR. If the default list is equal to
1130 Haskell 1.4's default-default of (Int, Double), 'x' has type
1133 To try to minimise the potential for surprises here, the
1134 defaulting mechanism is turned off in the presence of
1135 CCallable and CReturnable.
1141 ToDo: for these error messages, should we note the location as coming
1142 from the insts, or just whatever seems to be around in the monad just
1146 genCantGenErr insts -- Can't generalise these Insts
1147 = sep [ptext SLIT("Cannot generalise these overloadings (in a _ccall_):"),
1148 nest 4 (pprInstsInFull insts)
1151 addAmbigErrs ambig_tv_fn dicts = mapNF_Tc (addAmbigErr ambig_tv_fn) dicts
1153 addAmbigErr ambig_tv_fn dict
1154 = addInstErrTcM (instLoc dict)
1156 sep [text "Ambiguous type variable(s)" <+>
1157 hsep (punctuate comma (map (quotes . ppr) ambig_tvs)),
1158 nest 4 (text "in the constraint" <+> quotes (pprInst tidy_dict))])
1160 ambig_tvs = varSetElems (ambig_tv_fn tidy_dict)
1161 (tidy_env, tidy_dict) = tidyInst emptyTidyEnv dict
1163 warnDefault dicts default_ty
1164 | not opt_WarnTypeDefaults
1170 msg | length dicts > 1
1171 = (ptext SLIT("Defaulting the following constraint(s) to type") <+> quotes (ppr default_ty))
1172 $$ pprInstsInFull tidy_dicts
1174 = ptext SLIT("Defaulting") <+> quotes (pprInst (head tidy_dicts)) <+>
1175 ptext SLIT("to type") <+> quotes (ppr default_ty)
1177 (_, tidy_dicts) = mapAccumL tidyInst emptyTidyEnv dicts
1180 = addInstErrTcM (instLoc dict)
1182 vcat [ptext SLIT("Could not deduce") <+> quotes (pprInst tidy_dict),
1183 nest 4 (ptext SLIT("LHS of a rule must have no overloading"))])
1185 (tidy_env, tidy_dict) = tidyInst emptyTidyEnv dict
1187 -- Used for top-level irreducibles
1188 addTopInstanceErr dict
1189 = addInstErrTcM (instLoc dict)
1191 ptext SLIT("No instance for") <+> quotes (pprInst tidy_dict))
1193 (tidy_env, tidy_dict) = tidyInst emptyTidyEnv dict
1195 addNoInstanceErr str givens dict
1196 = addInstErrTcM (instLoc dict)
1198 sep [ptext SLIT("Could not deduce") <+> quotes (pprInst tidy_dict),
1199 nest 4 $ ptext SLIT("from the context:") <+> pprInsts tidy_givens]
1201 ptext SLIT("Probable cause:") <+>
1202 vcat [sep [ptext SLIT("missing") <+> quotes (pprInst tidy_dict),
1203 ptext SLIT("in") <+> str],
1204 if all_tyvars then empty else
1205 ptext SLIT("or missing instance declaration for") <+> quotes (pprInst tidy_dict)]
1208 all_tyvars = all isTyVarTy tys
1209 (_, tys) = getDictClassTys dict
1210 (tidy_env, tidy_dict:tidy_givens) = tidyInsts emptyTidyEnv (dict:givens)
1212 -- Used for the ...Thetas variants; all top level
1214 = addErrTc (ptext SLIT("No instance for") <+> quotes (pprConstraint c ts))
1216 reduceDepthErr n stack
1217 = vcat [ptext SLIT("Context reduction stack overflow; size =") <+> int n,
1218 ptext SLIT("Use -fcontext-stack20 to increase stack size to (e.g.) 20"),
1219 nest 4 (pprInstsInFull stack)]
1221 reduceDepthMsg n stack = nest 4 (pprInstsInFull stack)