2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
5 \section[TcBinds]{TcBinds}
8 module TcBinds ( tcLocalBinds, tcTopBinds,
9 tcHsBootSigs, tcPolyBinds,
10 PragFun, tcSpecPrags, tcVectDecls, mkPragFun,
11 TcSigInfo(..), SigFun, mkSigFun,
12 badBootDeclErr ) where
14 import {-# SOURCE #-} TcMatches ( tcGRHSsPat, tcMatchesFun )
15 import {-# SOURCE #-} TcExpr ( tcMonoExpr )
28 import RnBinds( misplacedSigErr )
47 import Data.List( partition )
50 #include "HsVersions.h"
54 %************************************************************************
56 \subsection{Type-checking bindings}
58 %************************************************************************
60 @tcBindsAndThen@ typechecks a @HsBinds@. The "and then" part is because
61 it needs to know something about the {\em usage} of the things bound,
62 so that it can create specialisations of them. So @tcBindsAndThen@
63 takes a function which, given an extended environment, E, typechecks
64 the scope of the bindings returning a typechecked thing and (most
65 important) an LIE. It is this LIE which is then used as the basis for
66 specialising the things bound.
68 @tcBindsAndThen@ also takes a "combiner" which glues together the
69 bindings and the "thing" to make a new "thing".
71 The real work is done by @tcBindWithSigsAndThen@.
73 Recursive and non-recursive binds are handled in essentially the same
74 way: because of uniques there are no scoping issues left. The only
75 difference is that non-recursive bindings can bind primitive values.
77 Even for non-recursive binding groups we add typings for each binder
78 to the LVE for the following reason. When each individual binding is
79 checked the type of its LHS is unified with that of its RHS; and
80 type-checking the LHS of course requires that the binder is in scope.
82 At the top-level the LIE is sure to contain nothing but constant
83 dictionaries, which we resolve at the module level.
86 tcTopBinds :: HsValBinds Name
87 -> TcM ( LHsBinds TcId -- Typechecked bindings
88 , [LTcSpecPrag] -- SPECIALISE prags for imported Ids
89 , TcLclEnv) -- Augmented environment
91 -- Note: returning the TcLclEnv is more than we really
92 -- want. The bit we care about is the local bindings
93 -- and the free type variables thereof
95 = do { (ValBindsOut prs sigs, env) <- tcValBinds TopLevel binds getLclEnv
96 ; let binds = foldr (unionBags . snd) emptyBag prs
97 ; specs <- tcImpPrags sigs
98 ; return (binds, specs, env) }
99 -- The top level bindings are flattened into a giant
100 -- implicitly-mutually-recursive LHsBinds
102 tcHsBootSigs :: HsValBinds Name -> TcM [Id]
103 -- A hs-boot file has only one BindGroup, and it only has type
104 -- signatures in it. The renamer checked all this
105 tcHsBootSigs (ValBindsOut binds sigs)
106 = do { checkTc (null binds) badBootDeclErr
107 ; mapM (addLocM tc_boot_sig) (filter isTypeLSig sigs) }
109 tc_boot_sig (TypeSig (L _ name) ty)
110 = do { sigma_ty <- tcHsSigType (FunSigCtxt name) ty
111 ; return (mkVanillaGlobal name sigma_ty) }
112 -- Notice that we make GlobalIds, not LocalIds
113 tc_boot_sig s = pprPanic "tcHsBootSigs/tc_boot_sig" (ppr s)
114 tcHsBootSigs groups = pprPanic "tcHsBootSigs" (ppr groups)
116 badBootDeclErr :: Message
117 badBootDeclErr = ptext (sLit "Illegal declarations in an hs-boot file")
119 ------------------------
120 tcLocalBinds :: HsLocalBinds Name -> TcM thing
121 -> TcM (HsLocalBinds TcId, thing)
123 tcLocalBinds EmptyLocalBinds thing_inside
124 = do { thing <- thing_inside
125 ; return (EmptyLocalBinds, thing) }
127 tcLocalBinds (HsValBinds binds) thing_inside
128 = do { (binds', thing) <- tcValBinds NotTopLevel binds thing_inside
129 ; return (HsValBinds binds', thing) }
131 tcLocalBinds (HsIPBinds (IPBinds ip_binds _)) thing_inside
132 = do { (given_ips, ip_binds') <- mapAndUnzipM (wrapLocSndM tc_ip_bind) ip_binds
134 -- If the binding binds ?x = E, we must now
135 -- discharge any ?x constraints in expr_lie
136 -- See Note [Implicit parameter untouchables]
137 ; (ev_binds, result) <- checkConstraints (IPSkol ips)
138 [] given_ips thing_inside
140 ; return (HsIPBinds (IPBinds ip_binds' ev_binds), result) }
142 ips = [ip | L _ (IPBind ip _) <- ip_binds]
144 -- I wonder if we should do these one at at time
147 tc_ip_bind (IPBind ip expr)
148 = do { ty <- newFlexiTyVarTy argTypeKind
149 ; ip_id <- newIP ip ty
150 ; expr' <- tcMonoExpr expr ty
151 ; return (ip_id, (IPBind (IPName ip_id) expr')) }
154 Note [Implicit parameter untouchables]
155 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
156 We add the type variables in the types of the implicit parameters
157 as untouchables, not so much because we really must not unify them,
158 but rather because we otherwise end up with constraints like this
159 Num alpha, Implic { wanted = alpha ~ Int }
160 The constraint solver solves alpha~Int by unification, but then
161 doesn't float that solved constraint out (it's not an unsolved
162 wanted. Result disaster: the (Num alpha) is again solved, this
163 time by defaulting. No no no.
165 However [Oct 10] this is all handled automatically by the
166 untouchable-range idea.
169 tcValBinds :: TopLevelFlag
170 -> HsValBinds Name -> TcM thing
171 -> TcM (HsValBinds TcId, thing)
173 tcValBinds _ (ValBindsIn binds _) _
174 = pprPanic "tcValBinds" (ppr binds)
176 tcValBinds top_lvl (ValBindsOut binds sigs) thing_inside
177 = do { -- Typecheck the signature
178 ; let { prag_fn = mkPragFun sigs (foldr (unionBags . snd) emptyBag binds)
179 ; ty_sigs = filter isTypeLSig sigs
180 ; sig_fn = mkSigFun ty_sigs }
182 ; poly_ids <- checkNoErrs (mapAndRecoverM tcTySig ty_sigs)
183 -- No recovery from bad signatures, because the type sigs
184 -- may bind type variables, so proceeding without them
185 -- can lead to a cascade of errors
186 -- ToDo: this means we fall over immediately if any type sig
187 -- is wrong, which is over-conservative, see Trac bug #745
189 -- Extend the envt right away with all
190 -- the Ids declared with type signatures
191 ; (binds', thing) <- tcExtendIdEnv poly_ids $
192 tcBindGroups top_lvl sig_fn prag_fn
195 ; return (ValBindsOut binds' sigs, thing) }
197 ------------------------
198 tcBindGroups :: TopLevelFlag -> SigFun -> PragFun
199 -> [(RecFlag, LHsBinds Name)] -> TcM thing
200 -> TcM ([(RecFlag, LHsBinds TcId)], thing)
201 -- Typecheck a whole lot of value bindings,
202 -- one strongly-connected component at a time
203 -- Here a "strongly connected component" has the strightforward
204 -- meaning of a group of bindings that mention each other,
205 -- ignoring type signatures (that part comes later)
207 tcBindGroups _ _ _ [] thing_inside
208 = do { thing <- thing_inside
209 ; return ([], thing) }
211 tcBindGroups top_lvl sig_fn prag_fn (group : groups) thing_inside
212 = do { (group', (groups', thing))
213 <- tc_group top_lvl sig_fn prag_fn group $
214 tcBindGroups top_lvl sig_fn prag_fn groups thing_inside
215 ; return (group' ++ groups', thing) }
217 ------------------------
218 tc_group :: forall thing.
219 TopLevelFlag -> SigFun -> PragFun
220 -> (RecFlag, LHsBinds Name) -> TcM thing
221 -> TcM ([(RecFlag, LHsBinds TcId)], thing)
223 -- Typecheck one strongly-connected component of the original program.
224 -- We get a list of groups back, because there may
225 -- be specialisations etc as well
227 tc_group top_lvl sig_fn prag_fn (NonRecursive, binds) thing_inside
228 -- A single non-recursive binding
229 -- We want to keep non-recursive things non-recursive
230 -- so that we desugar unlifted bindings correctly
231 = do { (binds1, ids) <- tcPolyBinds top_lvl sig_fn prag_fn NonRecursive NonRecursive
233 ; thing <- tcExtendIdEnv ids thing_inside
234 ; return ( [(NonRecursive, binds1)], thing) }
236 tc_group top_lvl sig_fn prag_fn (Recursive, binds) thing_inside
237 = -- To maximise polymorphism (assumes -XRelaxedPolyRec), we do a new
238 -- strongly-connected-component analysis, this time omitting
239 -- any references to variables with type signatures.
240 do { traceTc "tc_group rec" (pprLHsBinds binds)
241 ; (binds1, _ids, thing) <- go sccs
242 -- Here is where we should do bindInstsOfLocalFuns
243 -- if we start having Methods again
244 ; return ([(Recursive, binds1)], thing) }
245 -- Rec them all together
247 sccs :: [SCC (LHsBind Name)]
248 sccs = stronglyConnCompFromEdgedVertices (mkEdges sig_fn binds)
250 go :: [SCC (LHsBind Name)] -> TcM (LHsBinds TcId, [TcId], thing)
251 go (scc:sccs) = do { (binds1, ids1) <- tc_scc scc
252 ; (binds2, ids2, thing) <- tcExtendIdEnv ids1 $ go sccs
253 ; return (binds1 `unionBags` binds2, ids1 ++ ids2, thing) }
254 go [] = do { thing <- thing_inside; return (emptyBag, [], thing) }
256 tc_scc (AcyclicSCC bind) = tc_sub_group NonRecursive [bind]
257 tc_scc (CyclicSCC binds) = tc_sub_group Recursive binds
259 tc_sub_group = tcPolyBinds top_lvl sig_fn prag_fn Recursive
262 ------------------------
264 bindLocalInsts :: TopLevelFlag
265 -> TcM (LHsBinds TcId, [TcId], a)
266 -> TcM (LHsBinds TcId, TcEvBinds, a)
267 bindLocalInsts top_lvl thing_inside
269 = do { (binds, _, thing) <- thing_inside; return (binds, emptyBag, thing) }
270 -- For the top level don't bother with all this bindInstsOfLocalFuns stuff.
271 -- All the top level things are rec'd together anyway, so it's fine to
272 -- leave them to the tcSimplifyTop, and quite a bit faster too
274 | otherwise -- Nested case
275 = do { ((binds, ids, thing), lie) <- captureConstraints thing_inside
276 ; lie_binds <- bindLocalMethods lie ids
277 ; return (binds, lie_binds, thing) }
280 ------------------------
281 mkEdges :: SigFun -> LHsBinds Name
282 -> [(LHsBind Name, BKey, [BKey])]
284 type BKey = Int -- Just number off the bindings
287 = [ (bind, key, [key | n <- nameSetToList (bind_fvs (unLoc bind)),
288 Just key <- [lookupNameEnv key_map n], no_sig n ])
289 | (bind, key) <- keyd_binds
292 no_sig :: Name -> Bool
293 no_sig n = isNothing (sig_fn n)
295 keyd_binds = bagToList binds `zip` [0::BKey ..]
297 key_map :: NameEnv BKey -- Which binding it comes from
298 key_map = mkNameEnv [(bndr, key) | (L _ bind, key) <- keyd_binds
299 , bndr <- bindersOfHsBind bind ]
301 bindersOfHsBind :: HsBind Name -> [Name]
302 bindersOfHsBind (PatBind { pat_lhs = pat }) = collectPatBinders pat
303 bindersOfHsBind (FunBind { fun_id = L _ f }) = [f]
304 bindersOfHsBind (AbsBinds {}) = panic "bindersOfHsBind AbsBinds"
305 bindersOfHsBind (VarBind {}) = panic "bindersOfHsBind VarBind"
307 ------------------------
308 tcPolyBinds :: TopLevelFlag -> SigFun -> PragFun
309 -> RecFlag -- Whether the group is really recursive
310 -> RecFlag -- Whether it's recursive after breaking
311 -- dependencies based on type signatures
313 -> TcM (LHsBinds TcId, [TcId])
315 -- Typechecks a single bunch of bindings all together,
316 -- and generalises them. The bunch may be only part of a recursive
317 -- group, because we use type signatures to maximise polymorphism
319 -- Returns a list because the input may be a single non-recursive binding,
320 -- in which case the dependency order of the resulting bindings is
323 -- Knows nothing about the scope of the bindings
325 tcPolyBinds top_lvl sig_fn prag_fn rec_group rec_tc bind_list
327 recoverM (recoveryCode binder_names sig_fn) $ do
328 -- Set up main recoer; take advantage of any type sigs
330 { traceTc "------------------------------------------------" empty
331 ; traceTc "Bindings for" (ppr binder_names)
333 ; tc_sig_fn <- tcInstSigs sig_fn binder_names
336 ; let plan = decideGeneralisationPlan dflags top_lvl binder_names bind_list tc_sig_fn
337 ; traceTc "Generalisation plan" (ppr plan)
338 ; (binds, poly_ids) <- case plan of
339 NoGen -> tcPolyNoGen tc_sig_fn prag_fn rec_tc bind_list
340 InferGen mono -> tcPolyInfer top_lvl mono tc_sig_fn prag_fn rec_tc bind_list
341 CheckGen sig -> tcPolyCheck sig prag_fn rec_tc bind_list
343 -- Check whether strict bindings are ok
344 -- These must be non-recursive etc, and are not generalised
345 -- They desugar to a case expression in the end
346 ; checkStrictBinds top_lvl rec_group bind_list poly_ids
348 ; return (binds, poly_ids) }
350 binder_names = collectHsBindListBinders bind_list
351 loc = getLoc (head bind_list)
352 -- TODO: location a bit awkward, but the mbinds have been
353 -- dependency analysed and may no longer be adjacent
357 :: TcSigFun -> PragFun
358 -> RecFlag -- Whether it's recursive after breaking
359 -- dependencies based on type signatures
361 -> TcM (LHsBinds TcId, [TcId])
362 -- No generalisation whatsoever
364 tcPolyNoGen tc_sig_fn prag_fn rec_tc bind_list
365 = do { (binds', mono_infos) <- tcMonoBinds tc_sig_fn (LetGblBndr prag_fn)
367 ; mono_ids' <- mapM tc_mono_info mono_infos
368 ; return (binds', mono_ids') }
370 tc_mono_info (name, _, mono_id)
371 = do { mono_ty' <- zonkTcTypeCarefully (idType mono_id)
372 -- Zonk, mainly to expose unboxed types to checkStrictBinds
373 ; let mono_id' = setIdType mono_id mono_ty'
374 ; _specs <- tcSpecPrags mono_id' (prag_fn name)
376 -- NB: tcPrags generates error messages for
377 -- specialisation pragmas for non-overloaded sigs
378 -- Indeed that is why we call it here!
379 -- So we can safely ignore _specs
382 tcPolyCheck :: TcSigInfo -> PragFun
383 -> RecFlag -- Whether it's recursive after breaking
384 -- dependencies based on type signatures
386 -> TcM (LHsBinds TcId, [TcId])
387 -- There is just one binding,
388 -- it binds a single variable,
389 -- it has a signature,
390 tcPolyCheck sig@(TcSigInfo { sig_id = id, sig_tvs = tvs, sig_scoped = scoped
391 , sig_theta = theta, sig_tau = tau, sig_loc = loc })
392 prag_fn rec_tc bind_list
393 = do { ev_vars <- newEvVars theta
394 ; let skol_info = SigSkol (FunSigCtxt (idName id)) (mkPhiTy theta tau)
395 ; (ev_binds, (binds', [mono_info]))
396 <- checkConstraints skol_info tvs ev_vars $
397 tcExtendTyVarEnv2 (scoped `zip` mkTyVarTys tvs) $
398 tcMonoBinds (\_ -> Just sig) LetLclBndr rec_tc bind_list
400 ; export <- mkExport prag_fn tvs theta mono_info
402 ; let (_, poly_id, _, _) = export
403 abs_bind = L loc $ AbsBinds
405 , abs_ev_vars = ev_vars, abs_ev_binds = ev_binds
406 , abs_exports = [export], abs_binds = binds' }
407 ; return (unitBag abs_bind, [poly_id]) }
412 -> Bool -- True <=> apply the monomorphism restriction
413 -> TcSigFun -> PragFun
414 -> RecFlag -- Whether it's recursive after breaking
415 -- dependencies based on type signatures
417 -> TcM (LHsBinds TcId, [TcId])
418 tcPolyInfer top_lvl mono sig_fn prag_fn rec_tc bind_list
419 = do { ((binds', mono_infos), wanted)
420 <- captureConstraints $
421 tcMonoBinds sig_fn LetLclBndr rec_tc bind_list
423 ; unifyCtxts [sig | (_, Just sig, _) <- mono_infos]
425 ; let name_taus = [(name, idType mono_id) | (name, _, mono_id) <- mono_infos]
426 ; (qtvs, givens, ev_binds) <- simplifyInfer top_lvl mono name_taus wanted
428 ; exports <- mapM (mkExport prag_fn qtvs (map evVarPred givens))
431 ; let poly_ids = [poly_id | (_, poly_id, _, _) <- exports]
432 ; traceTc "Binding:" (ppr (poly_ids `zip` map idType poly_ids))
435 ; let abs_bind = L loc $ AbsBinds { abs_tvs = qtvs
436 , abs_ev_vars = givens, abs_ev_binds = ev_binds
437 , abs_exports = exports, abs_binds = binds' }
439 ; return (unitBag abs_bind, poly_ids) -- poly_ids are guaranteed zonked by mkExport
444 mkExport :: PragFun -> [TyVar] -> TcThetaType
446 -> TcM ([TyVar], Id, Id, TcSpecPrags)
447 -- mkExport generates exports with
448 -- zonked type variables,
450 -- The former is just because no further unifications will change
451 -- the quantified type variables, so we can fix their final form
453 -- The latter is needed because the poly_ids are used to extend the
454 -- type environment; see the invariant on TcEnv.tcExtendIdEnv
456 -- Pre-condition: the inferred_tvs are already zonked
458 mkExport prag_fn inferred_tvs theta
459 (poly_name, mb_sig, mono_id)
460 = do { (tvs, poly_id) <- mk_poly_id mb_sig
461 -- poly_id has a zonked type
463 ; poly_id' <- addInlinePrags poly_id prag_sigs
465 ; spec_prags <- tcSpecPrags poly_id prag_sigs
466 -- tcPrags requires a zonked poly_id
468 ; return (tvs, poly_id', mono_id, SpecPrags spec_prags) }
470 prag_sigs = prag_fn poly_name
471 poly_ty = mkSigmaTy inferred_tvs theta (idType mono_id)
473 mk_poly_id Nothing = do { poly_ty' <- zonkTcTypeCarefully poly_ty
474 ; return (inferred_tvs, mkLocalId poly_name poly_ty') }
475 mk_poly_id (Just sig) = do { tvs <- mapM zonk_tv (sig_tvs sig)
476 ; return (tvs, sig_id sig) }
478 zonk_tv tv = do { ty <- zonkTcTyVar tv; return (tcGetTyVar "mkExport" ty) }
480 ------------------------
481 type PragFun = Name -> [LSig Name]
483 mkPragFun :: [LSig Name] -> LHsBinds Name -> PragFun
484 mkPragFun sigs binds = \n -> lookupNameEnv prag_env n `orElse` []
486 prs = mapCatMaybes get_sig sigs
488 get_sig :: LSig Name -> Maybe (Located Name, LSig Name)
489 get_sig (L l (SpecSig nm ty inl)) = Just (nm, L l $ SpecSig nm ty (add_arity nm inl))
490 get_sig (L l (InlineSig nm inl)) = Just (nm, L l $ InlineSig nm (add_arity nm inl))
493 add_arity (L _ n) inl_prag -- Adjust inl_sat field to match visible arity of function
494 | Just ar <- lookupNameEnv ar_env n,
495 Inline <- inl_inline inl_prag = inl_prag { inl_sat = Just ar }
496 -- add arity only for real INLINE pragmas, not INLINABLE
497 | otherwise = inl_prag
499 prag_env :: NameEnv [LSig Name]
500 prag_env = foldl add emptyNameEnv prs
501 add env (L _ n,p) = extendNameEnv_Acc (:) singleton env n p
503 -- ar_env maps a local to the arity of its definition
504 ar_env :: NameEnv Arity
505 ar_env = foldrBag lhsBindArity emptyNameEnv binds
507 lhsBindArity :: LHsBind Name -> NameEnv Arity -> NameEnv Arity
508 lhsBindArity (L _ (FunBind { fun_id = id, fun_matches = ms })) env
509 = extendNameEnv env (unLoc id) (matchGroupArity ms)
510 lhsBindArity _ env = env -- PatBind/VarBind
513 tcSpecPrags :: Id -> [LSig Name]
515 -- Add INLINE and SPECIALSE pragmas
516 -- INLINE prags are added to the (polymorphic) Id directly
517 -- SPECIALISE prags are passed to the desugarer via TcSpecPrags
518 -- Pre-condition: the poly_id is zonked
519 -- Reason: required by tcSubExp
520 tcSpecPrags poly_id prag_sigs
521 = do { unless (null bad_sigs) warn_discarded_sigs
522 ; mapAndRecoverM (wrapLocM (tcSpec poly_id)) spec_sigs }
524 spec_sigs = filter isSpecLSig prag_sigs
525 bad_sigs = filter is_bad_sig prag_sigs
526 is_bad_sig s = not (isSpecLSig s || isInlineLSig s)
528 warn_discarded_sigs = warnPrags poly_id bad_sigs $
529 ptext (sLit "Discarding unexpected pragmas for")
533 tcSpec :: TcId -> Sig Name -> TcM TcSpecPrag
534 tcSpec poly_id prag@(SpecSig _ hs_ty inl)
535 -- The Name in the SpecSig may not be the same as that of the poly_id
536 -- Example: SPECIALISE for a class method: the Name in the SpecSig is
537 -- for the selector Id, but the poly_id is something like $cop
538 = addErrCtxt (spec_ctxt prag) $
539 do { spec_ty <- tcHsSigType sig_ctxt hs_ty
540 ; warnIf (not (isOverloadedTy poly_ty || isInlinePragma inl))
541 (ptext (sLit "SPECIALISE pragma for non-overloaded function") <+> quotes (ppr poly_id))
542 -- Note [SPECIALISE pragmas]
543 ; wrap <- tcSubType origin sig_ctxt (idType poly_id) spec_ty
544 ; return (SpecPrag poly_id wrap inl) }
546 name = idName poly_id
547 poly_ty = idType poly_id
548 origin = SpecPragOrigin name
549 sig_ctxt = FunSigCtxt name
550 spec_ctxt prag = hang (ptext (sLit "In the SPECIALISE pragma")) 2 (ppr prag)
552 tcSpec _ prag = pprPanic "tcSpec" (ppr prag)
555 tcImpPrags :: [LSig Name] -> TcM [LTcSpecPrag]
557 = do { this_mod <- getModule
559 = case sigName prag of
561 Just name -> not (nameIsLocalOrFrom this_mod name)
562 (spec_prags, others) = partition isSpecLSig $
564 ; mapM_ misplacedSigErr others
565 -- Messy that this misplaced-sig error comes here
566 -- but the others come from the renamer
567 ; mapAndRecoverM (wrapLocM tcImpSpec) spec_prags }
569 tcImpSpec :: Sig Name -> TcM TcSpecPrag
570 tcImpSpec prag@(SpecSig (L _ name) _ _)
571 = do { id <- tcLookupId name
572 ; checkTc (isAnyInlinePragma (idInlinePragma id))
575 tcImpSpec p = pprPanic "tcImpSpec" (ppr p)
577 impSpecErr :: Name -> SDoc
579 = hang (ptext (sLit "You cannot SPECIALISE") <+> quotes (ppr name))
580 2 (vcat [ ptext (sLit "because its definition has no INLINE/INLINABLE pragma")
581 , ptext (sLit "(or you compiled its defining module without -O)")])
584 tcVectDecls :: [LVectDecl Name] -> TcM [LVectDecl TcId]
586 = do { decls' <- mapM (wrapLocM tcVect) decls
587 ; let ids = [unLoc id | L _ (HsVect id _) <- decls']
588 dups = findDupsEq (==) ids
589 ; mapM_ reportVectDups dups
593 reportVectDups (first:_second:_more)
594 = addErrAt (getSrcSpan first) $
595 ptext (sLit "Duplicate vectorisation declarations for") <+> ppr first
596 reportVectDups _ = return ()
599 tcVect :: VectDecl Name -> TcM (VectDecl TcId)
600 -- We can't typecheck the expression of a vectorisation declaration against the vectorised type
601 -- of the original definition as this requires internals of the vectoriser not available during
602 -- type checking. Instead, we infer the type of the expression and leave it to the vectoriser
603 -- to check the compatibility of the Core types.
604 tcVect (HsVect name Nothing)
605 = addErrCtxt (vectCtxt name) $
606 do { id <- wrapLocM tcLookupId name
607 ; return (HsVect id Nothing)
609 tcVect (HsVect name@(L loc _) (Just rhs))
610 = addErrCtxt (vectCtxt name) $
611 do { _id <- wrapLocM tcLookupId name -- need to ensure that the name is already defined
613 -- turn the vectorisation declaration into a single non-recursive binding
614 ; let bind = L loc $ mkFunBind name [mkSimpleMatch [] rhs]
615 sigFun = const Nothing
616 pragFun = mkPragFun [] (unitBag bind)
618 -- perform type inference (including generalisation)
619 ; (binds, [id']) <- tcPolyInfer TopLevel False sigFun pragFun NonRecursive [bind]
621 ; traceTc "tcVect inferred type" $ ppr (varType id')
623 -- add the type variable and dictionary bindings produced by type generalisation to the
624 -- right-hand side of the vectorisation declaration
625 ; let [AbsBinds tvs evs _ evBinds actualBinds] = (map unLoc . bagToList) binds
626 ; let [bind'] = bagToList actualBinds
628 [L _ (Match _ _ (GRHSs [L _ (GRHS _ rhs')] _))]
629 _ = (fun_matches . unLoc) bind'
630 rhsWrapped = mkHsLams tvs evs (mkHsDictLet evBinds rhs')
632 -- We return the type-checked 'Id', to propagate the inferred signature
633 -- to the vectoriser - see "Note [Typechecked vectorisation pragmas]" in HsDecls
634 ; return $ HsVect (L loc id') (Just rhsWrapped)
637 vectCtxt :: Located Name -> SDoc
638 vectCtxt name = ptext (sLit "When checking the vectorisation declaration for") <+> ppr name
641 -- If typechecking the binds fails, then return with each
642 -- signature-less binder given type (forall a.a), to minimise
643 -- subsequent error messages
644 recoveryCode :: [Name] -> SigFun -> TcM (LHsBinds TcId, [Id])
645 recoveryCode binder_names sig_fn
646 = do { traceTc "tcBindsWithSigs: error recovery" (ppr binder_names)
647 ; poly_ids <- mapM mk_dummy binder_names
648 ; return (emptyBag, poly_ids) }
651 | isJust (sig_fn name) = tcLookupId name -- Had signature; look it up
652 | otherwise = return (mkLocalId name forall_a_a) -- No signature
655 forall_a_a = mkForAllTy openAlphaTyVar (mkTyVarTy openAlphaTyVar)
658 Note [SPECIALISE pragmas]
659 ~~~~~~~~~~~~~~~~~~~~~~~~~
660 There is no point in a SPECIALISE pragma for a non-overloaded function:
661 reverse :: [a] -> [a]
662 {-# SPECIALISE reverse :: [Int] -> [Int] #-}
664 But SPECIALISE INLINE *can* make sense for GADTS:
666 ArrInt :: !Int -> ByteArray# -> Arr Int
667 ArrPair :: !Int -> Arr e1 -> Arr e2 -> Arr (e1, e2)
669 (!:) :: Arr e -> Int -> e
670 {-# SPECIALISE INLINE (!:) :: Arr Int -> Int -> Int #-}
671 {-# SPECIALISE INLINE (!:) :: Arr (a, b) -> Int -> (a, b) #-}
672 (ArrInt _ ba) !: (I# i) = I# (indexIntArray# ba i)
673 (ArrPair _ a1 a2) !: i = (a1 !: i, a2 !: i)
675 When (!:) is specialised it becomes non-recursive, and can usefully
676 be inlined. Scary! So we only warn for SPECIALISE *without* INLINE
677 for a non-overloaded function.
679 %************************************************************************
681 \subsection{tcMonoBind}
683 %************************************************************************
685 @tcMonoBinds@ deals with a perhaps-recursive group of HsBinds.
686 The signatures have been dealt with already.
689 tcMonoBinds :: TcSigFun -> LetBndrSpec
690 -> RecFlag -- Whether the binding is recursive for typechecking purposes
691 -- i.e. the binders are mentioned in their RHSs, and
692 -- we are not resuced by a type signature
694 -> TcM (LHsBinds TcId, [MonoBindInfo])
696 tcMonoBinds sig_fn no_gen is_rec
697 [ L b_loc (FunBind { fun_id = L nm_loc name, fun_infix = inf,
698 fun_matches = matches, bind_fvs = fvs })]
699 -- Single function binding,
700 | NonRecursive <- is_rec -- ...binder isn't mentioned in RHS
701 , Nothing <- sig_fn name -- ...with no type signature
702 = -- In this very special case we infer the type of the
703 -- right hand side first (it may have a higher-rank type)
704 -- and *then* make the monomorphic Id for the LHS
705 -- e.g. f = \(x::forall a. a->a) -> <body>
706 -- We want to infer a higher-rank type for f
708 do { ((co_fn, matches'), rhs_ty) <- tcInfer (tcMatchesFun name inf matches)
710 ; mono_id <- newNoSigLetBndr no_gen name rhs_ty
711 ; return (unitBag (L b_loc (FunBind { fun_id = L nm_loc mono_id, fun_infix = inf,
712 fun_matches = matches', bind_fvs = fvs,
713 fun_co_fn = co_fn, fun_tick = Nothing })),
714 [(name, Nothing, mono_id)]) }
716 tcMonoBinds sig_fn no_gen _ binds
717 = do { tc_binds <- mapM (wrapLocM (tcLhs sig_fn no_gen)) binds
719 -- Bring the monomorphic Ids, into scope for the RHSs
720 ; let mono_info = getMonoBindInfo tc_binds
721 rhs_id_env = [(name,mono_id) | (name, Nothing, mono_id) <- mono_info]
722 -- A monomorphic binding for each term variable that lacks
723 -- a type sig. (Ones with a sig are already in scope.)
725 ; binds' <- tcExtendIdEnv2 rhs_id_env $ do
726 traceTc "tcMonoBinds" $ vcat [ ppr n <+> ppr id <+> ppr (idType id)
727 | (n,id) <- rhs_id_env]
728 mapM (wrapLocM tcRhs) tc_binds
729 ; return (listToBag binds', mono_info) }
731 ------------------------
732 -- tcLhs typechecks the LHS of the bindings, to construct the environment in which
733 -- we typecheck the RHSs. Basically what we are doing is this: for each binder:
734 -- if there's a signature for it, use the instantiated signature type
735 -- otherwise invent a type variable
736 -- You see that quite directly in the FunBind case.
738 -- But there's a complication for pattern bindings:
739 -- data T = MkT (forall a. a->a)
741 -- Here we can guess a type variable for the entire LHS (which will be refined to T)
742 -- but we want to get (f::forall a. a->a) as the RHS environment.
743 -- The simplest way to do this is to typecheck the pattern, and then look up the
744 -- bound mono-ids. Then we want to retain the typechecked pattern to avoid re-doing
745 -- it; hence the TcMonoBind data type in which the LHS is done but the RHS isn't
747 data TcMonoBind -- Half completed; LHS done, RHS not done
748 = TcFunBind MonoBindInfo SrcSpan Bool (MatchGroup Name)
749 | TcPatBind [MonoBindInfo] (LPat TcId) (GRHSs Name) TcSigmaType
751 type MonoBindInfo = (Name, Maybe TcSigInfo, TcId)
752 -- Type signature (if any), and
753 -- the monomorphic bound things
755 tcLhs :: TcSigFun -> LetBndrSpec -> HsBind Name -> TcM TcMonoBind
756 tcLhs sig_fn no_gen (FunBind { fun_id = L nm_loc name, fun_infix = inf, fun_matches = matches })
757 | Just sig <- sig_fn name
758 = do { mono_id <- newSigLetBndr no_gen name sig
759 ; return (TcFunBind (name, Just sig, mono_id) nm_loc inf matches) }
761 = do { mono_ty <- newFlexiTyVarTy argTypeKind
762 ; mono_id <- newNoSigLetBndr no_gen name mono_ty
763 ; return (TcFunBind (name, Nothing, mono_id) nm_loc inf matches) }
765 tcLhs sig_fn no_gen (PatBind { pat_lhs = pat, pat_rhs = grhss })
766 = do { let tc_pat exp_ty = tcLetPat sig_fn no_gen pat exp_ty $
767 mapM lookup_info (collectPatBinders pat)
769 -- After typechecking the pattern, look up the binder
770 -- names, which the pattern has brought into scope.
771 lookup_info :: Name -> TcM MonoBindInfo
772 lookup_info name = do { mono_id <- tcLookupId name
773 ; return (name, sig_fn name, mono_id) }
775 ; ((pat', infos), pat_ty) <- addErrCtxt (patMonoBindsCtxt pat grhss) $
778 ; return (TcPatBind infos pat' grhss pat_ty) }
780 tcLhs _ _ other_bind = pprPanic "tcLhs" (ppr other_bind)
781 -- AbsBind, VarBind impossible
784 tcRhs :: TcMonoBind -> TcM (HsBind TcId)
785 -- When we are doing pattern bindings, or multiple function bindings at a time
786 -- we *don't* bring any scoped type variables into scope
787 -- Wny not? They are not completely rigid.
788 -- That's why we have the special case for a single FunBind in tcMonoBinds
789 tcRhs (TcFunBind (_,_,mono_id) loc inf matches)
790 = do { (co_fn, matches') <- tcMatchesFun (idName mono_id) inf
791 matches (idType mono_id)
792 ; return (FunBind { fun_id = L loc mono_id, fun_infix = inf
793 , fun_matches = matches'
795 , bind_fvs = placeHolderNames, fun_tick = Nothing }) }
797 tcRhs (TcPatBind _ pat' grhss pat_ty)
798 = do { grhss' <- addErrCtxt (patMonoBindsCtxt pat' grhss) $
799 tcGRHSsPat grhss pat_ty
800 ; return (PatBind { pat_lhs = pat', pat_rhs = grhss', pat_rhs_ty = pat_ty
801 , bind_fvs = placeHolderNames }) }
804 ---------------------
805 getMonoBindInfo :: [Located TcMonoBind] -> [MonoBindInfo]
806 getMonoBindInfo tc_binds
807 = foldr (get_info . unLoc) [] tc_binds
809 get_info (TcFunBind info _ _ _) rest = info : rest
810 get_info (TcPatBind infos _ _ _) rest = infos ++ rest
814 %************************************************************************
818 %************************************************************************
820 unifyCtxts checks that all the signature contexts are the same
821 The type signatures on a mutually-recursive group of definitions
822 must all have the same context (or none).
824 The trick here is that all the signatures should have the same
825 context, and we want to share type variables for that context, so that
826 all the right hand sides agree a common vocabulary for their type
829 We unify them because, with polymorphic recursion, their types
830 might not otherwise be related. This is a rather subtle issue.
833 unifyCtxts :: [TcSigInfo] -> TcM ()
834 -- Post-condition: the returned Insts are full zonked
835 unifyCtxts [] = return ()
836 unifyCtxts (sig1 : sigs)
837 = do { traceTc "unifyCtxts" (ppr (sig1 : sigs))
838 ; mapM_ unify_ctxt sigs }
840 theta1 = sig_theta sig1
841 unify_ctxt :: TcSigInfo -> TcM ()
842 unify_ctxt sig@(TcSigInfo { sig_theta = theta })
843 = setSrcSpan (sig_loc sig) $
844 addErrCtxt (sigContextsCtxt sig1 sig) $
845 do { cois <- unifyTheta theta1 theta
846 ; -- Check whether all coercions are identity coercions
847 -- That can happen if we have, say
849 -- g :: C (F a) => ...
850 -- where F is a type function and (F a ~ [a])
851 -- Then unification might succeed with a coercion. But it's much
852 -- much simpler to require that such signatures have identical contexts
853 checkTc (all isIdentityCoI cois)
854 (ptext (sLit "Mutually dependent functions have syntactically distinct contexts"))
859 @getTyVarsToGen@ decides what type variables to generalise over.
861 For a "restricted group" -- see the monomorphism restriction
862 for a definition -- we bind no dictionaries, and
863 remove from tyvars_to_gen any constrained type variables
865 *Don't* simplify dicts at this point, because we aren't going
866 to generalise over these dicts. By the time we do simplify them
867 we may well know more. For example (this actually came up)
869 f x = array ... xs where xs = [1,2,3,4,5]
870 We don't want to generate lots of (fromInt Int 1), (fromInt Int 2)
871 stuff. If we simplify only at the f-binding (not the xs-binding)
872 we'll know that the literals are all Ints, and we can just produce
875 Find all the type variables involved in overloading, the
876 "constrained_tyvars". These are the ones we *aren't* going to
877 generalise. We must be careful about doing this:
879 (a) If we fail to generalise a tyvar which is not actually
880 constrained, then it will never, ever get bound, and lands
881 up printed out in interface files! Notorious example:
882 instance Eq a => Eq (Foo a b) where ..
883 Here, b is not constrained, even though it looks as if it is.
884 Another, more common, example is when there's a Method inst in
885 the LIE, whose type might very well involve non-overloaded
887 [NOTE: Jan 2001: I don't understand the problem here so I'm doing
888 the simple thing instead]
890 (b) On the other hand, we mustn't generalise tyvars which are constrained,
891 because we are going to pass on out the unmodified LIE, with those
892 tyvars in it. They won't be in scope if we've generalised them.
894 So we are careful, and do a complete simplification just to find the
895 constrained tyvars. We don't use any of the results, except to
896 find which tyvars are constrained.
898 Note [Polymorphic recursion]
899 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
900 The game plan for polymorphic recursion in the code above is
902 * Bind any variable for which we have a type signature
903 to an Id with a polymorphic type. Then when type-checking
904 the RHSs we'll make a full polymorphic call.
906 This fine, but if you aren't a bit careful you end up with a horrendous
907 amount of partial application and (worse) a huge space leak. For example:
909 f :: Eq a => [a] -> [a]
912 If we don't take care, after typechecking we get
914 f = /\a -> \d::Eq a -> let f' = f a d
918 Notice the the stupid construction of (f a d), which is of course
919 identical to the function we're executing. In this case, the
920 polymorphic recursion isn't being used (but that's a very common case).
921 This can lead to a massive space leak, from the following top-level defn
927 Now (f dEqInt) evaluates to a lambda that has f' as a free variable; but
928 f' is another thunk which evaluates to the same thing... and you end
929 up with a chain of identical values all hung onto by the CAF ff.
933 = let f' = f Int dEqInt in \ys. ...f'...
935 = let f' = let f' = f Int dEqInt in \ys. ...f'...
940 NOTE: a bit of arity anaysis would push the (f a d) inside the (\ys...),
941 which would make the space leak go away in this case
943 Solution: when typechecking the RHSs we always have in hand the
944 *monomorphic* Ids for each binding. So we just need to make sure that
945 if (Method f a d) shows up in the constraints emerging from (...f...)
946 we just use the monomorphic Id. We achieve this by adding monomorphic Ids
947 to the "givens" when simplifying constraints. That's what the "lies_avail"
952 f = /\a -> \d::Eq a -> letrec
953 fm = \ys:[a] -> ...fm...
957 %************************************************************************
961 %************************************************************************
963 Type signatures are tricky. See Note [Signature skolems] in TcType
965 @tcSigs@ checks the signatures for validity, and returns a list of
966 {\em freshly-instantiated} signatures. That is, the types are already
967 split up, and have fresh type variables installed. All non-type-signature
968 "RenamedSigs" are ignored.
970 The @TcSigInfo@ contains @TcTypes@ because they are unified with
971 the variable's type, and after that checked to see whether they've
976 The -XScopedTypeVariables flag brings lexically-scoped type variables
977 into scope for any explicitly forall-quantified type variables:
978 f :: forall a. a -> a
980 Then 'a' is in scope inside 'e'.
982 However, we do *not* support this
983 - For pattern bindings e.g
987 - For multiple function bindings, unless Opt_RelaxedPolyRec is on
988 f :: forall a. a -> a
990 g :: forall b. b -> b
992 Reason: we use mutable variables for 'a' and 'b', since they may
993 unify to each other, and that means the scoped type variable would
994 not stand for a completely rigid variable.
996 Currently, we simply make Opt_ScopedTypeVariables imply Opt_RelaxedPolyRec
999 Note [More instantiated than scoped]
1000 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1001 There may be more instantiated type variables than lexically-scoped
1003 type T a = forall b. b -> (a,b)
1005 Here, the signature for f will have one scoped type variable, c,
1006 but two instantiated type variables, c' and b'.
1008 We assume that the scoped ones are at the *front* of sig_tvs,
1009 and remember the names from the original HsForAllTy in the TcSigFun.
1011 Note [Signature skolems]
1012 ~~~~~~~~~~~~~~~~~~~~~~~~
1013 When instantiating a type signature, we do so with either skolems or
1014 SigTv meta-type variables depending on the use_skols boolean. This
1015 variable is set True when we are typechecking a single function
1016 binding; and False for pattern bindings and a group of several
1019 Reason: in the latter cases, the "skolems" can be unified together,
1020 so they aren't properly rigid in the type-refinement sense.
1021 NB: unless we are doing H98, each function with a sig will be done
1022 separately, even if it's mutually recursive, so use_skols will be True
1025 Note [Only scoped tyvars are in the TyVarEnv]
1026 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1027 We are careful to keep only the *lexically scoped* type variables in
1028 the type environment. Why? After all, the renamer has ensured
1029 that only legal occurrences occur, so we could put all type variables
1032 But we want to check that two distinct lexically scoped type variables
1033 do not map to the same internal type variable. So we need to know which
1034 the lexically-scoped ones are... and at the moment we do that by putting
1035 only the lexically scoped ones into the environment.
1037 Note [Instantiate sig with fresh variables]
1038 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1039 It's vital to instantiate a type signature with fresh variables.
1041 type T = forall a. [a] -> [a]
1043 f = g where { g :: T; g = <rhs> }
1045 We must not use the same 'a' from the defn of T at both places!!
1046 (Instantiation is only necessary because of type synonyms. Otherwise,
1047 it's all cool; each signature has distinct type variables from the renamer.)
1050 type SigFun = Name -> Maybe ([Name], SrcSpan)
1051 -- Maps a let-binder to the list of
1052 -- type variables brought into scope
1053 -- by its type signature, plus location
1054 -- Nothing => no type signature
1056 mkSigFun :: [LSig Name] -> SigFun
1057 -- Search for a particular type signature
1058 -- Precondition: the sigs are all type sigs
1059 -- Precondition: no duplicates
1060 mkSigFun sigs = lookupNameEnv env
1062 env = mkNameEnv (mapCatMaybes mk_pair sigs)
1063 mk_pair (L loc (TypeSig (L _ name) lhs_ty)) = Just (name, (hsExplicitTvs lhs_ty, loc))
1064 mk_pair (L loc (IdSig id)) = Just (idName id, ([], loc))
1066 -- The scoped names are the ones explicitly mentioned
1067 -- in the HsForAll. (There may be more in sigma_ty, because
1068 -- of nested type synonyms. See Note [More instantiated than scoped].)
1069 -- See Note [Only scoped tyvars are in the TyVarEnv]
1073 tcTySig :: LSig Name -> TcM TcId
1074 tcTySig (L span (TypeSig (L _ name) ty))
1076 do { sigma_ty <- tcHsSigType (FunSigCtxt name) ty
1077 ; return (mkLocalId name sigma_ty) }
1078 tcTySig (L _ (IdSig id))
1080 tcTySig s = pprPanic "tcTySig" (ppr s)
1083 tcInstSigs :: SigFun -> [Name] -> TcM TcSigFun
1084 tcInstSigs sig_fn bndrs
1085 = do { prs <- mapMaybeM (tcInstSig sig_fn use_skols) bndrs
1086 ; return (lookupNameEnv (mkNameEnv prs)) }
1088 use_skols = isSingleton bndrs -- See Note [Signature skolems]
1090 tcInstSig :: SigFun -> Bool -> Name -> TcM (Maybe (Name, TcSigInfo))
1091 -- For use_skols :: Bool see Note [Signature skolems]
1093 -- We must instantiate with fresh uniques,
1094 -- (see Note [Instantiate sig with fresh variables])
1095 -- although we keep the same print-name.
1097 tcInstSig sig_fn use_skols name
1098 | Just (scoped_tvs, loc) <- sig_fn name
1099 = do { poly_id <- tcLookupId name -- Cannot fail; the poly ids are put into
1100 -- scope when starting the binding group
1101 ; let poly_ty = idType poly_id
1102 ; (tvs, theta, tau) <- if use_skols
1103 then tcInstType tcInstSkolTyVars poly_ty
1104 else tcInstType tcInstSigTyVars poly_ty
1105 ; let sig = TcSigInfo { sig_id = poly_id
1106 , sig_scoped = scoped_tvs
1107 , sig_tvs = tvs, sig_theta = theta, sig_tau = tau
1109 ; return (Just (name, sig)) }
1113 -------------------------------
1114 data GeneralisationPlan
1115 = NoGen -- No generalisation, no AbsBinds
1116 | InferGen Bool -- Implicit generalisation; there is an AbsBinds
1117 -- True <=> apply the MR; generalise only unconstrained type vars
1118 | CheckGen TcSigInfo -- Explicit generalisation; there is an AbsBinds
1120 -- A consequence of the no-AbsBinds choice (NoGen) is that there is
1121 -- no "polymorphic Id" and "monmomorphic Id"; there is just the one
1123 instance Outputable GeneralisationPlan where
1124 ppr NoGen = ptext (sLit "NoGen")
1125 ppr (InferGen b) = ptext (sLit "InferGen") <+> ppr b
1126 ppr (CheckGen s) = ptext (sLit "CheckGen") <+> ppr s
1128 decideGeneralisationPlan
1129 :: DynFlags -> TopLevelFlag -> [Name] -> [LHsBind Name] -> TcSigFun -> GeneralisationPlan
1130 decideGeneralisationPlan dflags top_lvl _bndrs binds sig_fn
1131 | bang_pat_binds = NoGen
1132 | mono_pat_binds = NoGen
1133 | Just sig <- one_funbind_with_sig binds = if null (sig_tvs sig) && null (sig_theta sig)
1134 then NoGen -- Optimise common case
1136 | (xopt Opt_MonoLocalBinds dflags
1137 && isNotTopLevel top_lvl) = NoGen
1138 | otherwise = InferGen mono_restriction
1141 bang_pat_binds = any (isBangHsBind . unLoc) binds
1142 -- Bang patterns must not be polymorphic,
1143 -- because we are going to force them
1146 mono_pat_binds = xopt Opt_MonoPatBinds dflags
1147 && any (is_pat_bind . unLoc) binds
1149 mono_restriction = xopt Opt_MonomorphismRestriction dflags
1150 && any (restricted . unLoc) binds
1152 no_sig n = isNothing (sig_fn n)
1154 -- With OutsideIn, all nested bindings are monomorphic
1155 -- except a single function binding with a signature
1156 one_funbind_with_sig [L _ FunBind { fun_id = v }] = sig_fn (unLoc v)
1157 one_funbind_with_sig _ = Nothing
1159 -- The Haskell 98 monomorphism resetriction
1160 restricted (PatBind {}) = True
1161 restricted (VarBind { var_id = v }) = no_sig v
1162 restricted (FunBind { fun_id = v, fun_matches = m }) = restricted_match m
1164 restricted (AbsBinds {}) = panic "isRestrictedGroup/unrestricted AbsBinds"
1166 restricted_match (MatchGroup (L _ (Match [] _ _) : _) _) = True
1167 restricted_match _ = False
1168 -- No args => like a pattern binding
1169 -- Some args => a function binding
1171 is_pat_bind (PatBind {}) = True
1172 is_pat_bind _ = False
1175 checkStrictBinds :: TopLevelFlag -> RecFlag
1176 -> [LHsBind Name] -> [Id]
1178 -- Check that non-overloaded unlifted bindings are
1179 -- a) non-recursive,
1180 -- b) not top level,
1181 -- c) not a multiple-binding group (more or less implied by (a))
1183 checkStrictBinds top_lvl rec_group binds poly_ids
1184 | unlifted || bang_pat
1185 = do { checkTc (isNotTopLevel top_lvl)
1186 (strictBindErr "Top-level" unlifted binds)
1187 ; checkTc (isNonRec rec_group)
1188 (strictBindErr "Recursive" unlifted binds)
1189 ; checkTc (isSingleton binds)
1190 (strictBindErr "Multiple" unlifted binds)
1191 -- This should be a checkTc, not a warnTc, but as of GHC 6.11
1192 -- the versions of alex and happy available have non-conforming
1193 -- templates, so the GHC build fails if it's an error:
1194 ; warnUnlifted <- doptM Opt_WarnLazyUnliftedBindings
1195 ; warnTc (warnUnlifted && not bang_pat && lifted_pat)
1196 -- No outer bang, but it's a compound pattern
1197 -- E.g (I# x#) = blah
1198 -- Warn about this, but not about
1201 (unliftedMustBeBang binds) }
1205 unlifted = any is_unlifted poly_ids
1206 bang_pat = any (isBangHsBind . unLoc) binds
1207 lifted_pat = any (isLiftedPatBind . unLoc) binds
1208 is_unlifted id = case tcSplitForAllTys (idType id) of
1209 (_, rho) -> isUnLiftedType rho
1211 unliftedMustBeBang :: [LHsBind Name] -> SDoc
1212 unliftedMustBeBang binds
1213 = hang (text "Pattern bindings containing unlifted types should use an outermost bang pattern:")
1214 2 (pprBindList binds)
1216 strictBindErr :: String -> Bool -> [LHsBind Name] -> SDoc
1217 strictBindErr flavour unlifted binds
1218 = hang (text flavour <+> msg <+> ptext (sLit "aren't allowed:"))
1219 2 (pprBindList binds)
1221 msg | unlifted = ptext (sLit "bindings for unlifted types")
1222 | otherwise = ptext (sLit "bang-pattern bindings")
1224 pprBindList :: [LHsBind Name] -> SDoc
1225 pprBindList binds = vcat (map ppr binds)
1229 %************************************************************************
1231 \subsection[TcBinds-errors]{Error contexts and messages}
1233 %************************************************************************
1237 -- This one is called on LHS, when pat and grhss are both Name
1238 -- and on RHS, when pat is TcId and grhss is still Name
1239 patMonoBindsCtxt :: OutputableBndr id => LPat id -> GRHSs Name -> SDoc
1240 patMonoBindsCtxt pat grhss
1241 = hang (ptext (sLit "In a pattern binding:")) 2 (pprPatBind pat grhss)
1243 -----------------------------------------------
1244 sigContextsCtxt :: TcSigInfo -> TcSigInfo -> SDoc
1245 sigContextsCtxt sig1 sig2
1246 = vcat [ptext (sLit "When matching the contexts of the signatures for"),
1247 nest 2 (vcat [ppr id1 <+> dcolon <+> ppr (idType id1),
1248 ppr id2 <+> dcolon <+> ppr (idType id2)]),
1249 ptext (sLit "The signature contexts in a mutually recursive group should all be identical")]