2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
4 \section[TcBinds]{TcBinds}
7 #include "HsVersions.h"
9 module TcBinds ( tcBindsAndThen, tcPragmaSigs, checkSigTyVars, tcBindWithSigs, TcSigInfo(..) ) where
13 import HsSyn ( HsBinds(..), Sig(..), MonoBinds(..),
14 Match, HsType, InPat(..), OutPat(..), HsExpr(..),
15 SYN_IE(RecFlag), nonRecursive,
16 GRHSsAndBinds, ArithSeqInfo, HsLit, Fake, Stmt, DoOrListComp, Fixity,
18 import RnHsSyn ( SYN_IE(RenamedHsBinds), RenamedSig(..),
19 SYN_IE(RenamedMonoBinds)
21 import TcHsSyn ( SYN_IE(TcHsBinds), SYN_IE(TcMonoBinds),
22 TcIdOcc(..), SYN_IE(TcIdBndr), SYN_IE(TcExpr),
27 import Inst ( Inst, SYN_IE(LIE), emptyLIE, plusLIE, InstOrigin(..),
28 newDicts, tyVarsOfInst, instToId
30 import TcEnv ( tcExtendLocalValEnv, tcLookupLocalValueOK, newMonoIds,
31 tcGetGlobalTyVars, tcExtendGlobalTyVars
33 import SpecEnv ( SpecEnv )
34 IMPORT_DELOOPER(TcLoop) ( tcGRHSsAndBinds )
35 import TcMatches ( tcMatchesFun )
36 import TcSimplify ( tcSimplify, tcSimplifyAndCheck )
37 import TcMonoType ( tcHsType )
38 import TcPat ( tcPat )
39 import TcSimplify ( bindInstsOfLocalFuns )
40 import TcType ( SYN_IE(TcType), SYN_IE(TcThetaType), SYN_IE(TcTauType),
41 SYN_IE(TcTyVarSet), SYN_IE(TcTyVar),
42 newTyVarTy, zonkTcType, zonkTcTyVar, zonkTcTyVars,
43 newTcTyVar, tcInstSigType, newTyVarTys
45 import Unify ( unifyTauTy, unifyTauTyLists )
47 import Kind ( isUnboxedTypeKind, mkTypeKind, isTypeKind, mkBoxedTypeKind )
48 import Id ( GenId, idType, mkUserLocal, mkUserId )
49 import IdInfo ( noIdInfo )
50 import Maybes ( maybeToBool, assocMaybe, catMaybes )
51 import Name ( getOccName, getSrcLoc, Name )
52 import PragmaInfo ( PragmaInfo(..) )
54 import Type ( mkTyVarTy, mkTyVarTys, isTyVarTy, tyVarsOfTypes, eqSimpleTheta,
55 mkSigmaTy, splitSigmaTy, mkForAllTys, mkFunTys, getTyVar, mkDictTy,
56 splitRhoTy, mkForAllTy, splitForAllTy )
57 import TyVar ( GenTyVar, SYN_IE(TyVar), tyVarKind, minusTyVarSet, emptyTyVarSet,
58 elementOfTyVarSet, unionTyVarSets, tyVarSetToList )
59 import Bag ( bagToList, foldrBag, isEmptyBag )
60 import Util ( isIn, zipEqual, zipWithEqual, zipWith3Equal, hasNoDups, assoc,
61 assertPanic, panic, pprTrace )
62 import PprType ( GenClass, GenType, GenTyVar )
63 import Unique ( Unique )
64 import SrcLoc ( SrcLoc )
66 import Outputable --( interppSP, interpp'SP )
70 %************************************************************************
72 \subsection{Type-checking bindings}
74 %************************************************************************
76 @tcBindsAndThen@ typechecks a @HsBinds@. The "and then" part is because
77 it needs to know something about the {\em usage} of the things bound,
78 so that it can create specialisations of them. So @tcBindsAndThen@
79 takes a function which, given an extended environment, E, typechecks
80 the scope of the bindings returning a typechecked thing and (most
81 important) an LIE. It is this LIE which is then used as the basis for
82 specialising the things bound.
84 @tcBindsAndThen@ also takes a "combiner" which glues together the
85 bindings and the "thing" to make a new "thing".
87 The real work is done by @tcBindWithSigsAndThen@.
89 Recursive and non-recursive binds are handled in essentially the same
90 way: because of uniques there are no scoping issues left. The only
91 difference is that non-recursive bindings can bind primitive values.
93 Even for non-recursive binding groups we add typings for each binder
94 to the LVE for the following reason. When each individual binding is
95 checked the type of its LHS is unified with that of its RHS; and
96 type-checking the LHS of course requires that the binder is in scope.
98 At the top-level the LIE is sure to contain nothing but constant
99 dictionaries, which we resolve at the module level.
103 :: (TcHsBinds s -> thing -> thing) -- Combinator
105 -> TcM s (thing, LIE s)
106 -> TcM s (thing, LIE s)
108 tcBindsAndThen combiner EmptyBinds do_next
109 = do_next `thenTc` \ (thing, lie) ->
110 returnTc (combiner EmptyBinds thing, lie)
112 tcBindsAndThen combiner (ThenBinds binds1 binds2) do_next
113 = tcBindsAndThen combiner binds1 (tcBindsAndThen combiner binds2 do_next)
115 tcBindsAndThen combiner (MonoBind bind sigs is_rec) do_next
116 = fixTc (\ ~(prag_info_fn, _) ->
117 -- This is the usual prag_info fix; the PragmaInfo field of an Id
118 -- is not inspected till ages later in the compiler, so there
119 -- should be no black-hole problems here.
121 -- TYPECHECK THE SIGNATURES
122 mapTc (tcTySig prag_info_fn) ty_sigs `thenTc` \ tc_ty_sigs ->
124 tcBindWithSigs binder_names bind
125 tc_ty_sigs is_rec prag_info_fn `thenTc` \ (poly_binds, poly_lie, poly_ids) ->
127 -- Extend the environment to bind the new polymorphic Ids
128 tcExtendLocalValEnv binder_names poly_ids $
130 -- Build bindings and IdInfos corresponding to user pragmas
131 tcPragmaSigs sigs `thenTc` \ (prag_info_fn, prag_binds, prag_lie) ->
133 -- Now do whatever happens next, in the augmented envt
134 do_next `thenTc` \ (thing, thing_lie) ->
136 -- Create specialisations of functions bound here
137 bindInstsOfLocalFuns (prag_lie `plusLIE` thing_lie)
138 poly_ids `thenTc` \ (lie2, inst_mbinds) ->
142 final_lie = lie2 `plusLIE` poly_lie
143 final_binds = MonoBind poly_binds [] is_rec `ThenBinds`
144 MonoBind inst_mbinds [] nonRecursive `ThenBinds`
147 returnTc (prag_info_fn, (combiner final_binds thing, final_lie))
148 ) `thenTc` \ (_, result) ->
151 binder_names = map fst (bagToList (collectMonoBinders bind))
152 ty_sigs = [sig | sig@(Sig name _ _) <- sigs]
155 An aside. The original version of @tcBindsAndThen@ which lacks a
156 combiner function, appears below. Though it is perfectly well
157 behaved, it cannot be typed by Haskell, because the recursive call is
158 at a different type to the definition itself. There aren't too many
159 examples of this, which is why I thought it worth preserving! [SLPJ]
164 -> TcM s (thing, LIE s, thing_ty))
165 -> TcM s ((TcHsBinds s, thing), LIE s, thing_ty)
167 tcBindsAndThen EmptyBinds do_next
168 = do_next `thenTc` \ (thing, lie, thing_ty) ->
169 returnTc ((EmptyBinds, thing), lie, thing_ty)
171 tcBindsAndThen (ThenBinds binds1 binds2) do_next
172 = tcBindsAndThen binds1 (tcBindsAndThen binds2 do_next)
173 `thenTc` \ ((binds1', (binds2', thing')), lie1, thing_ty) ->
175 returnTc ((binds1' `ThenBinds` binds2', thing'), lie1, thing_ty)
177 tcBindsAndThen (MonoBind bind sigs is_rec) do_next
178 = tcBindAndThen bind sigs do_next
182 %************************************************************************
184 \subsection{tcBindWithSigs}
186 %************************************************************************
188 @tcBindWithSigs@ deals with a single binding group. It does generalisation,
189 so all the clever stuff is in here.
191 * binder_names and mbind must define the same set of Names
193 * The Names in tc_ty_sigs must be a subset of binder_names
195 * The Ids in tc_ty_sigs don't necessarily have to have the same name
196 as the Name in the tc_ty_sig
204 -> (Name -> PragmaInfo)
205 -> TcM s (TcMonoBinds s, LIE s, [TcIdBndr s])
207 tcBindWithSigs binder_names mbind tc_ty_sigs is_rec prag_info_fn
209 -- If typechecking the binds fails, then return with each
210 -- signature-less binder given type (forall a.a), to minimise subsequent
212 newTcTyVar mkBoxedTypeKind `thenNF_Tc` \ alpha_tv ->
214 forall_a_a = mkForAllTy alpha_tv (mkTyVarTy alpha_tv)
215 poly_ids = map mk_dummy binder_names
216 mk_dummy name = case maybeSig tc_ty_sigs name of
217 Just (TySigInfo _ poly_id _ _ _ _) -> poly_id -- Signature
218 Nothing -> mkUserId name forall_a_a NoPragmaInfo -- No signature
220 returnTc (EmptyMonoBinds, emptyLIE, poly_ids)
223 -- Create a new identifier for each binder, with each being given
224 -- a fresh unique, and a type-variable type.
225 tcGetUniques no_of_binders `thenNF_Tc` \ uniqs ->
226 mapNF_Tc mk_mono_id_ty binder_names `thenNF_Tc` \ mono_id_tys ->
228 mono_id_tyvars = tyVarsOfTypes mono_id_tys
229 mono_ids = zipWith3Equal "tcBindAndSigs" mk_id binder_names uniqs mono_id_tys
230 mk_id name uniq ty = mkUserLocal (getOccName name) uniq ty (getSrcLoc name)
233 -- TYPECHECK THE BINDINGS
234 tcMonoBinds mbind binder_names mono_ids tc_ty_sigs `thenTc` \ (mbind', lie) ->
236 -- CHECK THAT THE SIGNATURES MATCH
237 -- (must do this before getTyVarsToGen)
238 checkSigMatch tc_ty_sigs `thenTc` \ sig_theta ->
240 -- COMPUTE VARIABLES OVER WHICH TO QUANTIFY, namely tyvars_to_gen
241 -- The tyvars_not_to_gen are free in the environment, and hence
242 -- candidates for generalisation, but sometimes the monomorphism
243 -- restriction means we can't generalise them nevertheless
244 getTyVarsToGen is_unrestricted mono_id_tyvars lie `thenTc` \ (tyvars_not_to_gen, tyvars_to_gen) ->
246 -- DEAL WITH TYPE VARIABLE KINDS
247 mapTc defaultUncommittedTyVar (tyVarSetToList tyvars_to_gen) `thenTc` \ tyvars_to_gen_list ->
248 -- It's important that the final list (tyvars_to_gen_list) is fully
249 -- zonked, *including boxity*, because they'll be included in the forall types of
250 -- the polymorphic Ids, and instances of these Ids will be generated from them.
252 -- This step can do unification => keep other zonking after this
255 tcExtendGlobalTyVars tyvars_not_to_gen (
256 if null tc_ty_sigs then
257 -- No signatures, so just simplify the lie
258 tcSimplify tyvars_to_gen lie `thenTc` \ (lie_free, dict_binds, lie_bound) ->
259 returnTc (lie_free, dict_binds, map instToId (bagToList lie_bound))
262 zonk_theta sig_theta `thenNF_Tc` \ sig_theta' ->
263 newDicts SignatureOrigin sig_theta' `thenNF_Tc` \ (dicts_sig, dict_ids) ->
264 -- It's important that sig_theta is zonked, because
265 -- dict_id is later used to form the type of the polymorphic thing,
266 -- and forall-types must be zonked so far as their bound variables
269 -- Check that the needed dicts can be expressed in
270 -- terms of the signature ones
271 tcAddErrCtxt (sigsCtxt tysig_names) $
272 tcSimplifyAndCheck tyvars_to_gen dicts_sig lie `thenTc` \ (lie_free, dict_binds) ->
273 returnTc (lie_free, dict_binds, dict_ids)
275 ) `thenTc` \ (lie_free, dict_binds, dicts_bound) ->
277 ASSERT( not (any (isUnboxedTypeKind . tyVarKind) tyvars_to_gen_list) )
278 -- The instCantBeGeneralised stuff in tcSimplify should have
279 -- already raised an error if we're trying to generalise an unboxed tyvar
280 -- (NB: unboxed tyvars are always introduced along with a class constraint)
281 -- and it's better done there because we have more precise origin information.
282 -- That's why we just use an ASSERT here.
284 -- BUILD THE POLYMORPHIC RESULT IDs
285 mapNF_Tc zonkTcType mono_id_tys `thenNF_Tc` \ zonked_mono_id_types ->
287 exports = zipWith3 mk_export binder_names mono_ids zonked_mono_id_types
288 dict_tys = map tcIdType dicts_bound
290 mk_export binder_name mono_id zonked_mono_id_ty
291 | maybeToBool maybe_sig = (sig_tyvars, TcId sig_poly_id, TcId mono_id)
292 | otherwise = (tyvars_to_gen_list, TcId poly_id, TcId mono_id)
294 maybe_sig = maybeSig tc_ty_sigs binder_name
295 Just (TySigInfo _ sig_poly_id sig_tyvars _ _ _) = maybe_sig
296 poly_id = mkUserId binder_name poly_ty (prag_info_fn binder_name)
297 poly_ty = mkForAllTys tyvars_to_gen_list $ mkFunTys dict_tys $ zonked_mono_id_ty
298 -- It's important to build a fully-zonked poly_ty, because
299 -- we'll slurp out its free type variables when extending the
300 -- local environment (tcExtendLocalValEnv); if it's not zonked
301 -- it appears to have free tyvars that aren't actually free at all.
306 AbsBinds tyvars_to_gen_list
309 (dict_binds `AndMonoBinds` mbind'),
311 [poly_id | (_, TcId poly_id, _) <- exports]
314 no_of_binders = length binder_names
316 mk_mono_id_ty binder_name = case maybeSig tc_ty_sigs binder_name of
317 Just (TySigInfo name _ _ _ tau_ty _) -> returnNF_Tc tau_ty -- There's a signature
318 otherwise -> newTyVarTy kind -- No signature
320 tysig_names = [name | (TySigInfo name _ _ _ _ _) <- tc_ty_sigs]
321 is_unrestricted = isUnRestrictedGroup tysig_names mbind
323 kind | is_rec = mkBoxedTypeKind -- Recursive, so no unboxed types
324 | otherwise = mkTypeKind -- Non-recursive, so we permit unboxed types
326 zonk_theta theta = mapNF_Tc zonk theta
328 zonk (c,t) = zonkTcType t `thenNF_Tc` \ t' ->
332 @getImplicitStuffToGen@ decides what type variables generalise over.
334 For a "restricted group" -- see the monomorphism restriction
335 for a definition -- we bind no dictionaries, and
336 remove from tyvars_to_gen any constrained type variables
338 *Don't* simplify dicts at this point, because we aren't going
339 to generalise over these dicts. By the time we do simplify them
340 we may well know more. For example (this actually came up)
342 f x = array ... xs where xs = [1,2,3,4,5]
343 We don't want to generate lots of (fromInt Int 1), (fromInt Int 2)
344 stuff. If we simplify only at the f-binding (not the xs-binding)
345 we'll know that the literals are all Ints, and we can just produce
348 Find all the type variables involved in overloading, the
349 "constrained_tyvars". These are the ones we *aren't* going to
350 generalise. We must be careful about doing this:
352 (a) If we fail to generalise a tyvar which is not actually
353 constrained, then it will never, ever get bound, and lands
354 up printed out in interface files! Notorious example:
355 instance Eq a => Eq (Foo a b) where ..
356 Here, b is not constrained, even though it looks as if it is.
357 Another, more common, example is when there's a Method inst in
358 the LIE, whose type might very well involve non-overloaded
361 (b) On the other hand, we mustn't generalise tyvars which are constrained,
362 because we are going to pass on out the unmodified LIE, with those
363 tyvars in it. They won't be in scope if we've generalised them.
365 So we are careful, and do a complete simplification just to find the
366 constrained tyvars. We don't use any of the results, except to
367 find which tyvars are constrained.
370 getTyVarsToGen is_unrestricted mono_tyvars lie
371 = tcGetGlobalTyVars `thenNF_Tc` \ free_tyvars ->
372 zonkTcTyVars mono_tyvars `thenNF_Tc` \ mentioned_tyvars ->
374 tyvars_to_gen = mentioned_tyvars `minusTyVarSet` free_tyvars
378 returnTc (emptyTyVarSet, tyvars_to_gen)
380 tcSimplify tyvars_to_gen lie `thenTc` \ (_, _, constrained_dicts) ->
382 -- ASSERT: dicts_sig is already zonked!
383 constrained_tyvars = foldrBag (unionTyVarSets . tyVarsOfInst) emptyTyVarSet constrained_dicts
384 reduced_tyvars_to_gen = tyvars_to_gen `minusTyVarSet` constrained_tyvars
386 returnTc (constrained_tyvars, reduced_tyvars_to_gen)
391 isUnRestrictedGroup :: [Name] -- Signatures given for these
395 is_elem v vs = isIn "isUnResMono" v vs
397 isUnRestrictedGroup sigs (PatMonoBind (VarPatIn v) _ _) = v `is_elem` sigs
398 isUnRestrictedGroup sigs (PatMonoBind other _ _) = False
399 isUnRestrictedGroup sigs (VarMonoBind v _) = v `is_elem` sigs
400 isUnRestrictedGroup sigs (FunMonoBind _ _ _ _) = True
401 isUnRestrictedGroup sigs (AndMonoBinds mb1 mb2) = isUnRestrictedGroup sigs mb1 &&
402 isUnRestrictedGroup sigs mb2
403 isUnRestrictedGroup sigs EmptyMonoBinds = True
406 @defaultUncommittedTyVar@ checks for generalisation over unboxed
407 types, and defaults any TypeKind TyVars to BoxedTypeKind.
410 defaultUncommittedTyVar tyvar
411 | isTypeKind (tyVarKind tyvar)
412 = newTcTyVar mkBoxedTypeKind `thenNF_Tc` \ boxed_tyvar ->
413 unifyTauTy (mkTyVarTy boxed_tyvar) (mkTyVarTy tyvar) `thenTc_`
421 %************************************************************************
423 \subsection{tcMonoBind}
425 %************************************************************************
427 @tcMonoBinds@ deals with a single @MonoBind@.
428 The signatures have been dealt with already.
431 tcMonoBinds :: RenamedMonoBinds
432 -> [Name] -> [TcIdBndr s]
434 -> TcM s (TcMonoBinds s, LIE s)
436 tcMonoBinds mbind binder_names mono_ids tc_ty_sigs
437 = tcExtendLocalValEnv binder_names mono_ids (
441 sig_names = [name | (TySigInfo name _ _ _ _ _) <- tc_ty_sigs]
442 sig_ids = [id | (TySigInfo _ id _ _ _ _) <- tc_ty_sigs]
444 tc_mono_binds EmptyMonoBinds = returnTc (EmptyMonoBinds, emptyLIE)
446 tc_mono_binds (AndMonoBinds mb1 mb2)
447 = tc_mono_binds mb1 `thenTc` \ (mb1a, lie1) ->
448 tc_mono_binds mb2 `thenTc` \ (mb2a, lie2) ->
449 returnTc (AndMonoBinds mb1a mb2a, lie1 `plusLIE` lie2)
451 tc_mono_binds (FunMonoBind name inf matches locn)
453 tcLookupLocalValueOK "tc_mono_binds" name `thenNF_Tc` \ id ->
455 -- Before checking the RHS, extend the envt with
456 -- bindings for the *polymorphic* Ids from any type signatures
457 tcExtendLocalValEnv sig_names sig_ids $
458 tcMatchesFun name (idType id) matches `thenTc` \ (matches', lie) ->
460 returnTc (FunMonoBind (TcId id) inf matches' locn, lie)
462 tc_mono_binds bind@(PatMonoBind pat grhss_and_binds locn)
464 tcPat pat `thenTc` \ (pat2, lie_pat, pat_ty) ->
465 tcExtendLocalValEnv sig_names sig_ids $
466 tcGRHSsAndBinds grhss_and_binds `thenTc` \ (grhss_and_binds2, lie, grhss_ty) ->
467 tcAddErrCtxt (patMonoBindsCtxt bind) $
468 unifyTauTy pat_ty grhss_ty `thenTc_`
469 returnTc (PatMonoBind pat2 grhss_and_binds2 locn,
473 %************************************************************************
475 \subsection{Signatures}
477 %************************************************************************
479 @tcSigs@ checks the signatures for validity, and returns a list of
480 {\em freshly-instantiated} signatures. That is, the types are already
481 split up, and have fresh type variables installed. All non-type-signature
482 "RenamedSigs" are ignored.
484 The @TcSigInfo@ contains @TcTypes@ because they are unified with
485 the variable's type, and after that checked to see whether they've
491 (TcIdBndr s) -- *Polymorphic* binder for this value...
492 [TcTyVar s] (TcThetaType s) (TcTauType s)
496 maybeSig :: [TcSigInfo s] -> Name -> Maybe (TcSigInfo s)
497 -- Search for a particular signature
498 maybeSig [] name = Nothing
499 maybeSig (sig@(TySigInfo sig_name _ _ _ _ _) : sigs) name
500 | name == sig_name = Just sig
501 | otherwise = maybeSig sigs name
506 tcTySig :: (Name -> PragmaInfo)
508 -> TcM s (TcSigInfo s)
510 tcTySig prag_info_fn (Sig v ty src_loc)
511 = tcAddSrcLoc src_loc $
512 tcHsType ty `thenTc` \ sigma_ty ->
513 tcInstSigType sigma_ty `thenNF_Tc` \ sigma_ty' ->
515 poly_id = mkUserId v sigma_ty' (prag_info_fn v)
516 (tyvars', theta', tau') = splitSigmaTy sigma_ty'
517 -- This splitSigmaTy tries hard to make sure that tau' is a type synonym
518 -- wherever possible, which can improve interface files.
520 returnTc (TySigInfo v poly_id tyvars' theta' tau' src_loc)
523 @checkSigMatch@ does the next step in checking signature matching.
524 The tau-type part has already been unified. What we do here is to
525 check that this unification has not over-constrained the (polymorphic)
526 type variables of the original signature type.
528 The error message here is somewhat unsatisfactory, but it'll do for
533 = returnTc (error "checkSigMatch")
535 checkSigMatch tc_ty_sigs
536 = -- CHECK THAT ALL THE SIGNATURE CONTEXTS ARE UNIFIABLE
537 -- The type signatures on a mutually-recursive group of definitions
538 -- must all have the same context (or none).
540 -- We unify them because, with polymorphic recursion, their types
541 -- might not otherwise be related. This is a rather subtle issue.
543 tcAddErrCtxt (sigContextsCtxt tc_ty_sigs) (
544 mapTc (unifyTauTyLists dict_tys1) dict_tys_s
547 -- CHECK THAT THE SIGNATURE TYVARS AND TAU_TYPES ARE OK
548 -- Doesn't affect substitution
549 mapTc check_one_sig tc_ty_sigs `thenTc_`
553 (theta1:thetas) = [theta | TySigInfo _ _ _ theta _ _ <- tc_ty_sigs]
554 (dict_tys1 : dict_tys_s) = map mk_dict_tys (theta1 : thetas)
555 mk_dict_tys theta = [mkDictTy c t | (c,t) <- theta]
557 check_one_sig (TySigInfo name id sig_tyvars _ sig_tau src_loc)
558 = tcAddSrcLoc src_loc $
559 tcAddErrCtxt (sigCtxt id) $
560 checkSigTyVars sig_tyvars sig_tau
564 @checkSigTyVars@ is used after the type in a type signature has been unified with
565 the actual type found. It then checks that the type variables of the type signature
567 (a) still all type variables
568 eg matching signature [a] against inferred type [(p,q)]
569 [then a will be unified to a non-type variable]
571 (b) still all distinct
572 eg matching signature [(a,b)] against inferred type [(p,p)]
573 [then a and b will be unified together]
575 BUT ACTUALLY THESE FIRST TWO ARE FORCED BY USING DontBind TYVARS
577 (c) not mentioned in the environment
578 eg the signature for f in this:
584 Here, f is forced to be monorphic by the free occurence of x.
586 Before doing this, the substitution is applied to the signature type variable.
589 checkSigTyVars :: [TcTyVar s] -- The original signature type variables
590 -> TcType s -- signature type (for err msg)
593 checkSigTyVars sig_tyvars sig_tau
594 = tcGetGlobalTyVars `thenNF_Tc` \ globals ->
596 mono_tyvars = filter (`elementOfTyVarSet` globals) sig_tyvars
599 -- Until the final Bind-handling stuff is in, several type signatures in the same
600 -- bindings group can cause the signature type variable from the different
601 -- signatures to be unified. So we still need to zonk and check point (b).
602 -- Remove when activating the new binding code
603 mapNF_Tc zonkTcTyVar sig_tyvars `thenNF_Tc` \ sig_tys ->
604 checkTcM (hasNoDups (map (getTyVar "checkSigTyVars") sig_tys))
605 (zonkTcType sig_tau `thenNF_Tc` \ sig_tau' ->
606 failTc (badMatchErr sig_tau sig_tau')
611 -- We want to report errors in terms of the original signature tyvars,
612 -- ie sig_tyvars, NOT sig_tyvars'. sig_tys and sig_tyvars' correspond
613 -- 1-1 with sig_tyvars, so we can just map back.
614 checkTc (null mono_tyvars)
615 (notAsPolyAsSigErr sig_tau mono_tyvars)
619 %************************************************************************
621 \subsection{SPECIALIZE pragmas}
623 %************************************************************************
626 @tcPragmaSigs@ munches up the "signatures" that arise through *user*
627 pragmas. It is convenient for them to appear in the @[RenamedSig]@
628 part of a binding because then the same machinery can be used for
629 moving them into place as is done for type signatures.
632 tcPragmaSigs :: [RenamedSig] -- The pragma signatures
633 -> TcM s (Name -> PragmaInfo, -- Maps name to the appropriate PragmaInfo
637 tcPragmaSigs sigs = returnTc ( \name -> NoPragmaInfo, EmptyBinds, emptyLIE )
641 = mapAndUnzip3Tc tcPragmaSig sigs `thenTc` \ (names_w_id_infos, binds, lies) ->
643 name_to_info name = foldr ($) noIdInfo
644 [info_fn | (n,info_fn) <- names_w_id_infos, n==name]
646 returnTc (name_to_info,
647 foldr ThenBinds EmptyBinds binds,
648 foldr plusLIE emptyLIE lies)
651 Here are the easy cases for tcPragmaSigs
654 tcPragmaSig (DeforestSig name loc)
655 = returnTc ((name, addDeforestInfo DoDeforest),EmptyBinds,emptyLIE)
656 tcPragmaSig (InlineSig name loc)
657 = returnTc ((name, addUnfoldInfo (iWantToBeINLINEd UnfoldAlways)), EmptyBinds, emptyLIE)
658 tcPragmaSig (MagicUnfoldingSig name string loc)
659 = returnTc ((name, addUnfoldInfo (mkMagicUnfolding string)), EmptyBinds, emptyLIE)
662 The interesting case is for SPECIALISE pragmas. There are two forms.
663 Here's the first form:
665 f :: Ord a => [a] -> b -> b
666 {-# SPECIALIZE f :: [Int] -> b -> b #-}
669 For this we generate:
671 f* = /\ b -> let d1 = ...
675 where f* is a SpecPragmaId. The **sole** purpose of SpecPragmaIds is to
676 retain a right-hand-side that the simplifier will otherwise discard as
677 dead code... the simplifier has a flag that tells it not to discard
678 SpecPragmaId bindings.
680 In this case the f* retains a call-instance of the overloaded
681 function, f, (including appropriate dictionaries) so that the
682 specialiser will subsequently discover that there's a call of @f@ at
683 Int, and will create a specialisation for @f@. After that, the
684 binding for @f*@ can be discarded.
686 The second form is this:
688 f :: Ord a => [a] -> b -> b
689 {-# SPECIALIZE f :: [Int] -> b -> b = g #-}
692 Here @g@ is specified as a function that implements the specialised
693 version of @f@. Suppose that g has type (a->b->b); that is, g's type
694 is more general than that required. For this we generate
696 f@Int = /\b -> g Int b
700 Here @f@@Int@ is a SpecId, the specialised version of @f@. It inherits
701 f's export status etc. @f*@ is a SpecPragmaId, as before, which just serves
702 to prevent @f@@Int@ from being discarded prematurely. After specialisation,
703 if @f@@Int@ is going to be used at all it will be used explicitly, so the simplifier can
704 discard the f* binding.
706 Actually, there is really only point in giving a SPECIALISE pragma on exported things,
707 and the simplifer won't discard SpecIds for exporte things anyway, so maybe this is
711 tcPragmaSig (SpecSig name poly_ty maybe_spec_name src_loc)
712 = tcAddSrcLoc src_loc $
713 tcAddErrCtxt (valSpecSigCtxt name spec_ty) $
715 -- Get and instantiate its alleged specialised type
716 tcHsType poly_ty `thenTc` \ sig_sigma ->
717 tcInstSigType sig_sigma `thenNF_Tc` \ sig_ty ->
719 (sig_tyvars, sig_theta, sig_tau) = splitSigmaTy sig_ty
720 origin = ValSpecOrigin name
723 -- Check that the SPECIALIZE pragma had an empty context
724 checkTc (null sig_theta)
725 (panic "SPECIALIZE non-empty context (ToDo: msg)") `thenTc_`
727 -- Get and instantiate the type of the id mentioned
728 tcLookupLocalValueOK "tcPragmaSig" name `thenNF_Tc` \ main_id ->
729 tcInstSigType [] (idType main_id) `thenNF_Tc` \ main_ty ->
731 (main_tyvars, main_rho) = splitForAllTy main_ty
732 (main_theta,main_tau) = splitRhoTy main_rho
733 main_arg_tys = mkTyVarTys main_tyvars
736 -- Check that the specialised type is indeed an instance of
737 -- the type of the main function.
738 unifyTauTy sig_tau main_tau `thenTc_`
739 checkSigTyVars sig_tyvars sig_tau `thenTc_`
741 -- Check that the type variables of the polymorphic function are
742 -- either left polymorphic, or instantiate to ground type.
743 -- Also check that the overloaded type variables are instantiated to
744 -- ground type; or equivalently that all dictionaries have ground type
745 mapTc zonkTcType main_arg_tys `thenNF_Tc` \ main_arg_tys' ->
746 zonkTcThetaType main_theta `thenNF_Tc` \ main_theta' ->
747 tcAddErrCtxt (specGroundnessCtxt main_arg_tys')
748 (checkTc (all isGroundOrTyVarTy main_arg_tys')) `thenTc_`
749 tcAddErrCtxt (specContextGroundnessCtxt main_theta')
750 (checkTc (and [isGroundTy ty | (_,ty) <- theta'])) `thenTc_`
752 -- Build the SpecPragmaId; it is the thing that makes sure we
753 -- don't prematurely dead-code-eliminate the binding we are really interested in.
754 newSpecPragmaId name sig_ty `thenNF_Tc` \ spec_pragma_id ->
756 -- Build a suitable binding; depending on whether we were given
757 -- a value (Maybe Name) to be used as the specialisation.
759 Nothing -> -- No implementation function specified
761 -- Make a Method inst for the occurrence of the overloaded function
762 newMethodWithGivenTy (OccurrenceOf name)
763 (TcId main_id) main_arg_tys main_rho `thenNF_Tc` \ (lie, meth_id) ->
766 pseudo_bind = VarMonoBind spec_pragma_id pseudo_rhs
767 pseudo_rhs = mkHsTyLam sig_tyvars (HsVar (TcId meth_id))
769 returnTc (pseudo_bind, lie, \ info -> info)
771 Just spec_name -> -- Use spec_name as the specialisation value ...
773 -- Type check a simple occurrence of the specialised Id
774 tcId spec_name `thenTc` \ (spec_body, spec_lie, spec_tau) ->
776 -- Check that it has the correct type, and doesn't constrain the
777 -- signature variables at all
778 unifyTauTy sig_tau spec_tau `thenTc_`
779 checkSigTyVars sig_tyvars sig_tau `thenTc_`
781 -- Make a local SpecId to bind to applied spec_id
782 newSpecId main_id main_arg_tys sig_ty `thenNF_Tc` \ local_spec_id ->
785 spec_rhs = mkHsTyLam sig_tyvars spec_body
786 spec_binds = VarMonoBind local_spec_id spec_rhs
788 VarMonoBind spec_pragma_id (HsVar (TcId local_spec_id))
789 spec_info = SpecInfo spec_tys (length main_theta) local_spec_id
791 returnTc ((name, addSpecInfo spec_info), spec_binds, spec_lie)
796 %************************************************************************
798 \subsection[TcBinds-errors]{Error contexts and messages}
800 %************************************************************************
804 patMonoBindsCtxt bind sty
805 = hang (ptext SLIT("In a pattern binding:")) 4 (ppr sty bind)
807 -----------------------------------------------
808 valSpecSigCtxt v ty sty
809 = hang (ptext SLIT("In a SPECIALIZE pragma for a value:"))
810 4 (sep [(<>) (ppr sty v) (ptext SLIT(" ::")),
815 -----------------------------------------------
816 notAsPolyAsSigErr sig_tau mono_tyvars sty
817 = hang (ptext SLIT("A type signature is more polymorphic than the inferred type"))
818 4 (vcat [text "Some type variables in the inferred type can't be forall'd, namely:",
819 interpp'SP sty mono_tyvars,
820 ptext SLIT("Possible cause: the RHS mentions something subject to the monomorphism restriction")
823 -----------------------------------------------
824 badMatchErr sig_ty inferred_ty sty
825 = hang (ptext SLIT("Type signature doesn't match inferred type"))
826 4 (vcat [hang (ptext SLIT("Signature:")) 4 (ppr sty sig_ty),
827 hang (ptext SLIT("Inferred :")) 4 (ppr sty inferred_ty)
830 -----------------------------------------------
832 = sep [ptext SLIT("When checking signature for"), ppr sty id]
834 = sep [ptext SLIT("When checking signature(s) for:"), interpp'SP sty ids]
836 -----------------------------------------------
837 sigContextsCtxt ty_sigs sty
838 = hang (ptext SLIT("When matching the contexts of the signatures of a recursive group"))
839 4 (vcat (map ppr_tc_ty_sig ty_sigs))
841 ppr_tc_ty_sig (TySigInfo val _ tyvars theta tau_ty _)
842 = hang ((<>) (ppr sty val) (ptext SLIT(" :: ")))
845 else hcat [parens (hsep (punctuate comma (map (ppr_inst sty) theta))),
847 ppr_inst sty (clas, ty) = hsep [ppr sty clas, ppr sty ty]
849 -----------------------------------------------
851 = panic "specGroundnessCtxt"
853 --------------------------------------------
854 specContextGroundnessCtxt -- err_ctxt dicts sty
855 = panic "specContextGroundnessCtxt"
858 sep [hsep [ptext SLIT("In the SPECIALIZE pragma for"), ppr sty name],
859 hcat [ptext SLIT(" specialised to the type"), ppr sty spec_ty],
861 ptext SLIT("... not all overloaded type variables were instantiated"),
862 ptext SLIT("to ground types:")])
863 4 (vcat [hsep [ppr sty c, ppr sty t]
864 | (c,t) <- map getDictClassAndType dicts])
866 (name, spec_ty, locn, pp_spec_id)
868 ValSpecSigCtxt n ty loc -> (n, ty, loc, \ x -> empty)
869 ValSpecSpecIdCtxt n ty spec loc ->
871 \ sty -> hsep [ptext SLIT("... type of explicit id"), ppr sty spec])