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 )
48 #include "HsVersions.h"
52 %************************************************************************
54 \subsection{Type-checking bindings}
56 %************************************************************************
58 @tcBindsAndThen@ typechecks a @HsBinds@. The "and then" part is because
59 it needs to know something about the {\em usage} of the things bound,
60 so that it can create specialisations of them. So @tcBindsAndThen@
61 takes a function which, given an extended environment, E, typechecks
62 the scope of the bindings returning a typechecked thing and (most
63 important) an LIE. It is this LIE which is then used as the basis for
64 specialising the things bound.
66 @tcBindsAndThen@ also takes a "combiner" which glues together the
67 bindings and the "thing" to make a new "thing".
69 The real work is done by @tcBindWithSigsAndThen@.
71 Recursive and non-recursive binds are handled in essentially the same
72 way: because of uniques there are no scoping issues left. The only
73 difference is that non-recursive bindings can bind primitive values.
75 Even for non-recursive binding groups we add typings for each binder
76 to the LVE for the following reason. When each individual binding is
77 checked the type of its LHS is unified with that of its RHS; and
78 type-checking the LHS of course requires that the binder is in scope.
80 At the top-level the LIE is sure to contain nothing but constant
81 dictionaries, which we resolve at the module level.
84 tcTopBinds :: HsValBinds Name
85 -> TcM ( LHsBinds TcId -- Typechecked bindings
86 , [LTcSpecPrag] -- SPECIALISE prags for imported Ids
87 , TcLclEnv) -- Augmented environment
89 -- Note: returning the TcLclEnv is more than we really
90 -- want. The bit we care about is the local bindings
91 -- and the free type variables thereof
93 = do { (ValBindsOut prs sigs, env) <- tcValBinds TopLevel binds getLclEnv
94 ; let binds = foldr (unionBags . snd) emptyBag prs
95 ; specs <- tcImpPrags sigs
96 ; return (binds, specs, env) }
97 -- The top level bindings are flattened into a giant
98 -- implicitly-mutually-recursive LHsBinds
100 tcHsBootSigs :: HsValBinds Name -> TcM [Id]
101 -- A hs-boot file has only one BindGroup, and it only has type
102 -- signatures in it. The renamer checked all this
103 tcHsBootSigs (ValBindsOut binds sigs)
104 = do { checkTc (null binds) badBootDeclErr
105 ; mapM (addLocM tc_boot_sig) (filter isTypeLSig sigs) }
107 tc_boot_sig (TypeSig (L _ name) ty)
108 = do { sigma_ty <- tcHsSigType (FunSigCtxt name) ty
109 ; return (mkVanillaGlobal name sigma_ty) }
110 -- Notice that we make GlobalIds, not LocalIds
111 tc_boot_sig s = pprPanic "tcHsBootSigs/tc_boot_sig" (ppr s)
112 tcHsBootSigs groups = pprPanic "tcHsBootSigs" (ppr groups)
114 badBootDeclErr :: Message
115 badBootDeclErr = ptext (sLit "Illegal declarations in an hs-boot file")
117 ------------------------
118 tcLocalBinds :: HsLocalBinds Name -> TcM thing
119 -> TcM (HsLocalBinds TcId, thing)
121 tcLocalBinds EmptyLocalBinds thing_inside
122 = do { thing <- thing_inside
123 ; return (EmptyLocalBinds, thing) }
125 tcLocalBinds (HsValBinds binds) thing_inside
126 = do { (binds', thing) <- tcValBinds NotTopLevel binds thing_inside
127 ; return (HsValBinds binds', thing) }
129 tcLocalBinds (HsIPBinds (IPBinds ip_binds _)) thing_inside
130 = do { (given_ips, ip_binds') <- mapAndUnzipM (wrapLocSndM tc_ip_bind) ip_binds
132 -- If the binding binds ?x = E, we must now
133 -- discharge any ?x constraints in expr_lie
134 -- See Note [Implicit parameter untouchables]
135 ; (ev_binds, result) <- checkConstraints (IPSkol ips)
136 [] given_ips thing_inside
138 ; return (HsIPBinds (IPBinds ip_binds' ev_binds), result) }
140 ips = [ip | L _ (IPBind ip _) <- ip_binds]
142 -- I wonder if we should do these one at at time
145 tc_ip_bind (IPBind ip expr)
146 = do { ty <- newFlexiTyVarTy argTypeKind
147 ; ip_id <- newIP ip ty
148 ; expr' <- tcMonoExpr expr ty
149 ; return (ip_id, (IPBind (IPName ip_id) expr')) }
152 Note [Implicit parameter untouchables]
153 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
154 We add the type variables in the types of the implicit parameters
155 as untouchables, not so much because we really must not unify them,
156 but rather because we otherwise end up with constraints like this
157 Num alpha, Implic { wanted = alpha ~ Int }
158 The constraint solver solves alpha~Int by unification, but then
159 doesn't float that solved constraint out (it's not an unsolved
160 wanted. Result disaster: the (Num alpha) is again solved, this
161 time by defaulting. No no no.
163 However [Oct 10] this is all handled automatically by the
164 untouchable-range idea.
167 tcValBinds :: TopLevelFlag
168 -> HsValBinds Name -> TcM thing
169 -> TcM (HsValBinds TcId, thing)
171 tcValBinds _ (ValBindsIn binds _) _
172 = pprPanic "tcValBinds" (ppr binds)
174 tcValBinds top_lvl (ValBindsOut binds sigs) thing_inside
175 = do { -- Typecheck the signature
176 ; let { prag_fn = mkPragFun sigs (foldr (unionBags . snd) emptyBag binds)
177 ; ty_sigs = filter isTypeLSig sigs
178 ; sig_fn = mkSigFun ty_sigs }
180 ; poly_ids <- checkNoErrs (mapAndRecoverM tcTySig ty_sigs)
181 -- No recovery from bad signatures, because the type sigs
182 -- may bind type variables, so proceeding without them
183 -- can lead to a cascade of errors
184 -- ToDo: this means we fall over immediately if any type sig
185 -- is wrong, which is over-conservative, see Trac bug #745
187 -- Extend the envt right away with all
188 -- the Ids declared with type signatures
189 ; (binds', thing) <- tcExtendIdEnv poly_ids $
190 tcBindGroups top_lvl sig_fn prag_fn
193 ; return (ValBindsOut binds' sigs, thing) }
195 ------------------------
196 tcBindGroups :: TopLevelFlag -> SigFun -> PragFun
197 -> [(RecFlag, LHsBinds Name)] -> TcM thing
198 -> TcM ([(RecFlag, LHsBinds TcId)], thing)
199 -- Typecheck a whole lot of value bindings,
200 -- one strongly-connected component at a time
201 -- Here a "strongly connected component" has the strightforward
202 -- meaning of a group of bindings that mention each other,
203 -- ignoring type signatures (that part comes later)
205 tcBindGroups _ _ _ [] thing_inside
206 = do { thing <- thing_inside
207 ; return ([], thing) }
209 tcBindGroups top_lvl sig_fn prag_fn (group : groups) thing_inside
210 = do { (group', (groups', thing))
211 <- tc_group top_lvl sig_fn prag_fn group $
212 tcBindGroups top_lvl sig_fn prag_fn groups thing_inside
213 ; return (group' ++ groups', thing) }
215 ------------------------
216 tc_group :: forall thing.
217 TopLevelFlag -> SigFun -> PragFun
218 -> (RecFlag, LHsBinds Name) -> TcM thing
219 -> TcM ([(RecFlag, LHsBinds TcId)], thing)
221 -- Typecheck one strongly-connected component of the original program.
222 -- We get a list of groups back, because there may
223 -- be specialisations etc as well
225 tc_group top_lvl sig_fn prag_fn (NonRecursive, binds) thing_inside
226 -- A single non-recursive binding
227 -- We want to keep non-recursive things non-recursive
228 -- so that we desugar unlifted bindings correctly
229 = do { (binds1, ids) <- tcPolyBinds top_lvl sig_fn prag_fn NonRecursive NonRecursive
231 ; thing <- tcExtendIdEnv ids thing_inside
232 ; return ( [(NonRecursive, binds1)], thing) }
234 tc_group top_lvl sig_fn prag_fn (Recursive, binds) thing_inside
235 = -- To maximise polymorphism (assumes -XRelaxedPolyRec), we do a new
236 -- strongly-connected-component analysis, this time omitting
237 -- any references to variables with type signatures.
238 do { traceTc "tc_group rec" (pprLHsBinds binds)
239 ; (binds1, _ids, thing) <- go sccs
240 -- Here is where we should do bindInstsOfLocalFuns
241 -- if we start having Methods again
242 ; return ([(Recursive, binds1)], thing) }
243 -- Rec them all together
245 sccs :: [SCC (LHsBind Name)]
246 sccs = stronglyConnCompFromEdgedVertices (mkEdges sig_fn binds)
248 go :: [SCC (LHsBind Name)] -> TcM (LHsBinds TcId, [TcId], thing)
249 go (scc:sccs) = do { (binds1, ids1) <- tc_scc scc
250 ; (binds2, ids2, thing) <- tcExtendIdEnv ids1 $ go sccs
251 ; return (binds1 `unionBags` binds2, ids1 ++ ids2, thing) }
252 go [] = do { thing <- thing_inside; return (emptyBag, [], thing) }
254 tc_scc (AcyclicSCC bind) = tc_sub_group NonRecursive [bind]
255 tc_scc (CyclicSCC binds) = tc_sub_group Recursive binds
257 tc_sub_group = tcPolyBinds top_lvl sig_fn prag_fn Recursive
260 ------------------------
262 bindLocalInsts :: TopLevelFlag
263 -> TcM (LHsBinds TcId, [TcId], a)
264 -> TcM (LHsBinds TcId, TcEvBinds, a)
265 bindLocalInsts top_lvl thing_inside
267 = do { (binds, _, thing) <- thing_inside; return (binds, emptyBag, thing) }
268 -- For the top level don't bother with all this bindInstsOfLocalFuns stuff.
269 -- All the top level things are rec'd together anyway, so it's fine to
270 -- leave them to the tcSimplifyTop, and quite a bit faster too
272 | otherwise -- Nested case
273 = do { ((binds, ids, thing), lie) <- captureConstraints thing_inside
274 ; lie_binds <- bindLocalMethods lie ids
275 ; return (binds, lie_binds, thing) }
278 ------------------------
279 mkEdges :: SigFun -> LHsBinds Name
280 -> [(LHsBind Name, BKey, [BKey])]
282 type BKey = Int -- Just number off the bindings
285 = [ (bind, key, [key | n <- nameSetToList (bind_fvs (unLoc bind)),
286 Just key <- [lookupNameEnv key_map n], no_sig n ])
287 | (bind, key) <- keyd_binds
290 no_sig :: Name -> Bool
291 no_sig n = isNothing (sig_fn n)
293 keyd_binds = bagToList binds `zip` [0::BKey ..]
295 key_map :: NameEnv BKey -- Which binding it comes from
296 key_map = mkNameEnv [(bndr, key) | (L _ bind, key) <- keyd_binds
297 , bndr <- bindersOfHsBind bind ]
299 bindersOfHsBind :: HsBind Name -> [Name]
300 bindersOfHsBind (PatBind { pat_lhs = pat }) = collectPatBinders pat
301 bindersOfHsBind (FunBind { fun_id = L _ f }) = [f]
302 bindersOfHsBind (AbsBinds {}) = panic "bindersOfHsBind AbsBinds"
303 bindersOfHsBind (VarBind {}) = panic "bindersOfHsBind VarBind"
305 ------------------------
306 tcPolyBinds :: TopLevelFlag -> SigFun -> PragFun
307 -> RecFlag -- Whether the group is really recursive
308 -> RecFlag -- Whether it's recursive after breaking
309 -- dependencies based on type signatures
311 -> TcM (LHsBinds TcId, [TcId])
313 -- Typechecks a single bunch of bindings all together,
314 -- and generalises them. The bunch may be only part of a recursive
315 -- group, because we use type signatures to maximise polymorphism
317 -- Returns a list because the input may be a single non-recursive binding,
318 -- in which case the dependency order of the resulting bindings is
321 -- Knows nothing about the scope of the bindings
323 tcPolyBinds top_lvl sig_fn prag_fn rec_group rec_tc bind_list
325 recoverM (recoveryCode binder_names sig_fn) $ do
326 -- Set up main recover; take advantage of any type sigs
328 { traceTc "------------------------------------------------" empty
329 ; traceTc "Bindings for" (ppr binder_names)
331 -- Instantiate the polytypes of any binders that have signatures
332 -- (as determined by sig_fn), returning a TcSigInfo for each
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 = foldr1 combineSrcSpans (map getLoc bind_list)
352 -- The mbinds have been dependency analysed and
353 -- may no longer be adjacent; so find the narrowest
354 -- span that includes them all
358 :: TcSigFun -> PragFun
359 -> RecFlag -- Whether it's recursive after breaking
360 -- dependencies based on type signatures
362 -> TcM (LHsBinds TcId, [TcId])
363 -- No generalisation whatsoever
365 tcPolyNoGen tc_sig_fn prag_fn rec_tc bind_list
366 = do { (binds', mono_infos) <- tcMonoBinds tc_sig_fn (LetGblBndr prag_fn)
368 ; mono_ids' <- mapM tc_mono_info mono_infos
369 ; return (binds', mono_ids') }
371 tc_mono_info (name, _, mono_id)
372 = do { mono_ty' <- zonkTcTypeCarefully (idType mono_id)
373 -- Zonk, mainly to expose unboxed types to checkStrictBinds
374 ; let mono_id' = setIdType mono_id mono_ty'
375 ; _specs <- tcSpecPrags mono_id' (prag_fn name)
377 -- NB: tcPrags generates error messages for
378 -- specialisation pragmas for non-overloaded sigs
379 -- Indeed that is why we call it here!
380 -- So we can safely ignore _specs
383 tcPolyCheck :: TcSigInfo -> PragFun
384 -> RecFlag -- Whether it's recursive after breaking
385 -- dependencies based on type signatures
387 -> TcM (LHsBinds TcId, [TcId])
388 -- There is just one binding,
389 -- it binds a single variable,
390 -- it has a signature,
391 tcPolyCheck sig@(TcSigInfo { sig_id = id, sig_tvs = tvs, sig_scoped = scoped
392 , sig_theta = theta, sig_tau = tau })
393 prag_fn rec_tc bind_list
394 = do { ev_vars <- newEvVars theta
395 ; let skol_info = SigSkol (FunSigCtxt (idName id)) (mkPhiTy theta tau)
396 ; (ev_binds, (binds', [mono_info]))
397 <- checkConstraints skol_info tvs ev_vars $
398 tcExtendTyVarEnv2 (scoped `zip` mkTyVarTys tvs) $
399 tcMonoBinds (\_ -> Just sig) LetLclBndr rec_tc bind_list
401 ; export <- mkExport prag_fn tvs theta mono_info
404 ; let (_, poly_id, _, _) = export
405 abs_bind = L loc $ AbsBinds
407 , abs_ev_vars = ev_vars, abs_ev_binds = ev_binds
408 , abs_exports = [export], abs_binds = binds' }
409 ; return (unitBag abs_bind, [poly_id]) }
414 -> Bool -- True <=> apply the monomorphism restriction
415 -> TcSigFun -> PragFun
416 -> RecFlag -- Whether it's recursive after breaking
417 -- dependencies based on type signatures
419 -> TcM (LHsBinds TcId, [TcId])
420 tcPolyInfer top_lvl mono tc_sig_fn prag_fn rec_tc bind_list
421 = do { ((binds', mono_infos), wanted)
422 <- captureConstraints $
423 tcMonoBinds tc_sig_fn LetLclBndr rec_tc bind_list
425 ; unifyCtxts [sig | (_, Just sig, _) <- mono_infos]
427 ; let name_taus = [(name, idType mono_id) | (name, _, mono_id) <- mono_infos]
428 ; (qtvs, givens, ev_binds) <- simplifyInfer top_lvl mono name_taus wanted
430 ; exports <- mapM (mkExport prag_fn qtvs (map evVarPred givens))
433 ; let poly_ids = [poly_id | (_, poly_id, _, _) <- exports]
434 ; traceTc "Binding:" (ppr (poly_ids `zip` map idType poly_ids))
437 ; let abs_bind = L loc $ AbsBinds { abs_tvs = qtvs
438 , abs_ev_vars = givens, abs_ev_binds = ev_binds
439 , abs_exports = exports, abs_binds = binds' }
441 ; return (unitBag abs_bind, poly_ids) -- poly_ids are guaranteed zonked by mkExport
446 mkExport :: PragFun -> [TyVar] -> TcThetaType
448 -> TcM ([TyVar], Id, Id, TcSpecPrags)
449 -- mkExport generates exports with
450 -- zonked type variables,
452 -- The former is just because no further unifications will change
453 -- the quantified type variables, so we can fix their final form
455 -- The latter is needed because the poly_ids are used to extend the
456 -- type environment; see the invariant on TcEnv.tcExtendIdEnv
458 -- Pre-condition: the inferred_tvs are already zonked
460 mkExport prag_fn inferred_tvs theta
461 (poly_name, mb_sig, mono_id)
462 = do { (tvs, poly_id) <- mk_poly_id mb_sig
463 -- poly_id has a zonked type
465 ; poly_id' <- addInlinePrags poly_id prag_sigs
467 ; spec_prags <- tcSpecPrags poly_id prag_sigs
468 -- tcPrags requires a zonked poly_id
470 ; return (tvs, poly_id', mono_id, SpecPrags spec_prags) }
472 prag_sigs = prag_fn poly_name
473 poly_ty = mkSigmaTy inferred_tvs theta (idType mono_id)
475 mk_poly_id Nothing = do { poly_ty' <- zonkTcTypeCarefully poly_ty
476 ; return (inferred_tvs, mkLocalId poly_name poly_ty') }
477 mk_poly_id (Just sig) = do { tvs <- mapM zonk_tv (sig_tvs sig)
478 ; return (tvs, sig_id sig) }
480 zonk_tv tv = do { ty <- zonkTcTyVar tv; return (tcGetTyVar "mkExport" ty) }
482 ------------------------
483 type PragFun = Name -> [LSig Name]
485 mkPragFun :: [LSig Name] -> LHsBinds Name -> PragFun
486 mkPragFun sigs binds = \n -> lookupNameEnv prag_env n `orElse` []
488 prs = mapCatMaybes get_sig sigs
490 get_sig :: LSig Name -> Maybe (Located Name, LSig Name)
491 get_sig (L l (SpecSig nm ty inl)) = Just (nm, L l $ SpecSig nm ty (add_arity nm inl))
492 get_sig (L l (InlineSig nm inl)) = Just (nm, L l $ InlineSig nm (add_arity nm inl))
495 add_arity (L _ n) inl_prag -- Adjust inl_sat field to match visible arity of function
496 | Just ar <- lookupNameEnv ar_env n,
497 Inline <- inl_inline inl_prag = inl_prag { inl_sat = Just ar }
498 -- add arity only for real INLINE pragmas, not INLINABLE
499 | otherwise = inl_prag
501 prag_env :: NameEnv [LSig Name]
502 prag_env = foldl add emptyNameEnv prs
503 add env (L _ n,p) = extendNameEnv_Acc (:) singleton env n p
505 -- ar_env maps a local to the arity of its definition
506 ar_env :: NameEnv Arity
507 ar_env = foldrBag lhsBindArity emptyNameEnv binds
509 lhsBindArity :: LHsBind Name -> NameEnv Arity -> NameEnv Arity
510 lhsBindArity (L _ (FunBind { fun_id = id, fun_matches = ms })) env
511 = extendNameEnv env (unLoc id) (matchGroupArity ms)
512 lhsBindArity _ env = env -- PatBind/VarBind
515 tcSpecPrags :: Id -> [LSig Name]
517 -- Add INLINE and SPECIALSE pragmas
518 -- INLINE prags are added to the (polymorphic) Id directly
519 -- SPECIALISE prags are passed to the desugarer via TcSpecPrags
520 -- Pre-condition: the poly_id is zonked
521 -- Reason: required by tcSubExp
522 tcSpecPrags poly_id prag_sigs
523 = do { unless (null bad_sigs) warn_discarded_sigs
524 ; mapAndRecoverM (wrapLocM (tcSpec poly_id)) spec_sigs }
526 spec_sigs = filter isSpecLSig prag_sigs
527 bad_sigs = filter is_bad_sig prag_sigs
528 is_bad_sig s = not (isSpecLSig s || isInlineLSig s)
530 warn_discarded_sigs = warnPrags poly_id bad_sigs $
531 ptext (sLit "Discarding unexpected pragmas for")
535 tcSpec :: TcId -> Sig Name -> TcM TcSpecPrag
536 tcSpec poly_id prag@(SpecSig _ hs_ty inl)
537 -- The Name in the SpecSig may not be the same as that of the poly_id
538 -- Example: SPECIALISE for a class method: the Name in the SpecSig is
539 -- for the selector Id, but the poly_id is something like $cop
540 = addErrCtxt (spec_ctxt prag) $
541 do { spec_ty <- tcHsSigType sig_ctxt hs_ty
542 ; warnIf (not (isOverloadedTy poly_ty || isInlinePragma inl))
543 (ptext (sLit "SPECIALISE pragma for non-overloaded function") <+> quotes (ppr poly_id))
544 -- Note [SPECIALISE pragmas]
545 ; wrap <- tcSubType origin sig_ctxt (idType poly_id) spec_ty
546 ; return (SpecPrag poly_id wrap inl) }
548 name = idName poly_id
549 poly_ty = idType poly_id
550 origin = SpecPragOrigin name
551 sig_ctxt = FunSigCtxt name
552 spec_ctxt prag = hang (ptext (sLit "In the SPECIALISE pragma")) 2 (ppr prag)
554 tcSpec _ prag = pprPanic "tcSpec" (ppr prag)
557 tcImpPrags :: [LSig Name] -> TcM [LTcSpecPrag]
558 -- SPECIALISE pragamas for imported things
560 = do { this_mod <- getModule
562 ; if (not_specialising dflags) then
565 mapAndRecoverM (wrapLocM tcImpSpec)
566 [L loc (name,prag) | (L loc prag@(SpecSig (L _ name) _ _)) <- prags
567 , not (nameIsLocalOrFrom this_mod name) ] }
569 -- Ignore SPECIALISE pragmas for imported things
570 -- when we aren't specialising, or when we aren't generating
571 -- code. The latter happens when Haddocking the base library;
572 -- we don't wnat complaints about lack of INLINABLE pragmas
573 not_specialising dflags
574 | not (dopt Opt_Specialise dflags) = True
575 | otherwise = case hscTarget dflags of
577 HscInterpreted -> True
580 tcImpSpec :: (Name, Sig Name) -> TcM TcSpecPrag
581 tcImpSpec (name, prag)
582 = do { id <- tcLookupId name
583 ; unless (isAnyInlinePragma (idInlinePragma id))
584 (addWarnTc (impSpecErr name))
587 impSpecErr :: Name -> SDoc
589 = hang (ptext (sLit "You cannot SPECIALISE") <+> quotes (ppr name))
590 2 (vcat [ ptext (sLit "because its definition has no INLINE/INLINABLE pragma")
592 [ ptext (sLit "or its defining module") <+> quotes (ppr mod)
593 , ptext (sLit "was compiled without -O")]])
595 mod = nameModule name
598 tcVectDecls :: [LVectDecl Name] -> TcM ([LVectDecl TcId])
600 = do { decls' <- mapM (wrapLocM tcVect) decls
601 ; let ids = [unLoc id | L _ (HsVect id _) <- decls']
602 dups = findDupsEq (==) ids
603 ; mapM_ reportVectDups dups
604 ; traceTcConstraints "End of tcVectDecls"
608 reportVectDups (first:_second:_more)
609 = addErrAt (getSrcSpan first) $
610 ptext (sLit "Duplicate vectorisation declarations for") <+> ppr first
611 reportVectDups _ = return ()
614 tcVect :: VectDecl Name -> TcM (VectDecl TcId)
615 -- We can't typecheck the expression of a vectorisation declaration against the vectorised type
616 -- of the original definition as this requires internals of the vectoriser not available during
617 -- type checking. Instead, we infer the type of the expression and leave it to the vectoriser
618 -- to check the compatibility of the Core types.
619 tcVect (HsVect name Nothing)
620 = addErrCtxt (vectCtxt name) $
621 do { id <- wrapLocM tcLookupId name
622 ; return $ HsVect id Nothing
624 tcVect (HsVect name@(L loc _) (Just rhs))
625 = addErrCtxt (vectCtxt name) $
626 do { _id <- wrapLocM tcLookupId name -- need to ensure that the name is already defined
628 -- turn the vectorisation declaration into a single non-recursive binding
629 ; let bind = L loc $ mkFunBind name [mkSimpleMatch [] rhs]
630 sigFun = const Nothing
631 pragFun = mkPragFun [] (unitBag bind)
633 -- perform type inference (including generalisation)
634 ; (binds, [id']) <- tcPolyInfer TopLevel False sigFun pragFun NonRecursive [bind]
636 ; traceTc "tcVect inferred type" $ ppr (varType id')
637 ; traceTc "tcVect bindings" $ ppr binds
639 -- add all bindings, including the type variable and dictionary bindings produced by type
640 -- generalisation to the right-hand side of the vectorisation declaration
641 ; let [AbsBinds tvs evs _ evBinds actualBinds] = (map unLoc . bagToList) binds
642 ; let [bind'] = bagToList actualBinds
644 [L _ (Match _ _ (GRHSs [L _ (GRHS _ rhs')] _))]
645 _ = (fun_matches . unLoc) bind'
646 rhsWrapped = mkHsLams tvs evs (mkHsDictLet evBinds rhs')
648 -- We return the type-checked 'Id', to propagate the inferred signature
649 -- to the vectoriser - see "Note [Typechecked vectorisation pragmas]" in HsDecls
650 ; return $ HsVect (L loc id') (Just rhsWrapped)
653 vectCtxt :: Located Name -> SDoc
654 vectCtxt name = ptext (sLit "When checking the vectorisation declaration for") <+> ppr name
657 -- If typechecking the binds fails, then return with each
658 -- signature-less binder given type (forall a.a), to minimise
659 -- subsequent error messages
660 recoveryCode :: [Name] -> SigFun -> TcM (LHsBinds TcId, [Id])
661 recoveryCode binder_names sig_fn
662 = do { traceTc "tcBindsWithSigs: error recovery" (ppr binder_names)
663 ; poly_ids <- mapM mk_dummy binder_names
664 ; return (emptyBag, poly_ids) }
667 | isJust (sig_fn name) = tcLookupId name -- Had signature; look it up
668 | otherwise = return (mkLocalId name forall_a_a) -- No signature
671 forall_a_a = mkForAllTy openAlphaTyVar (mkTyVarTy openAlphaTyVar)
674 Note [SPECIALISE pragmas]
675 ~~~~~~~~~~~~~~~~~~~~~~~~~
676 There is no point in a SPECIALISE pragma for a non-overloaded function:
677 reverse :: [a] -> [a]
678 {-# SPECIALISE reverse :: [Int] -> [Int] #-}
680 But SPECIALISE INLINE *can* make sense for GADTS:
682 ArrInt :: !Int -> ByteArray# -> Arr Int
683 ArrPair :: !Int -> Arr e1 -> Arr e2 -> Arr (e1, e2)
685 (!:) :: Arr e -> Int -> e
686 {-# SPECIALISE INLINE (!:) :: Arr Int -> Int -> Int #-}
687 {-# SPECIALISE INLINE (!:) :: Arr (a, b) -> Int -> (a, b) #-}
688 (ArrInt _ ba) !: (I# i) = I# (indexIntArray# ba i)
689 (ArrPair _ a1 a2) !: i = (a1 !: i, a2 !: i)
691 When (!:) is specialised it becomes non-recursive, and can usefully
692 be inlined. Scary! So we only warn for SPECIALISE *without* INLINE
693 for a non-overloaded function.
695 %************************************************************************
697 \subsection{tcMonoBind}
699 %************************************************************************
701 @tcMonoBinds@ deals with a perhaps-recursive group of HsBinds.
702 The signatures have been dealt with already.
705 tcMonoBinds :: TcSigFun -> LetBndrSpec
706 -> RecFlag -- Whether the binding is recursive for typechecking purposes
707 -- i.e. the binders are mentioned in their RHSs, and
708 -- we are not resuced by a type signature
710 -> TcM (LHsBinds TcId, [MonoBindInfo])
712 tcMonoBinds sig_fn no_gen is_rec
713 [ L b_loc (FunBind { fun_id = L nm_loc name, fun_infix = inf,
714 fun_matches = matches, bind_fvs = fvs })]
715 -- Single function binding,
716 | NonRecursive <- is_rec -- ...binder isn't mentioned in RHS
717 , Nothing <- sig_fn name -- ...with no type signature
718 = -- In this very special case we infer the type of the
719 -- right hand side first (it may have a higher-rank type)
720 -- and *then* make the monomorphic Id for the LHS
721 -- e.g. f = \(x::forall a. a->a) -> <body>
722 -- We want to infer a higher-rank type for f
724 do { ((co_fn, matches'), rhs_ty) <- tcInfer (tcMatchesFun name inf matches)
726 ; mono_id <- newNoSigLetBndr no_gen name rhs_ty
727 ; return (unitBag (L b_loc (FunBind { fun_id = L nm_loc mono_id, fun_infix = inf,
728 fun_matches = matches', bind_fvs = fvs,
729 fun_co_fn = co_fn, fun_tick = Nothing })),
730 [(name, Nothing, mono_id)]) }
732 tcMonoBinds sig_fn no_gen _ binds
733 = do { tc_binds <- mapM (wrapLocM (tcLhs sig_fn no_gen)) binds
735 -- Bring the monomorphic Ids, into scope for the RHSs
736 ; let mono_info = getMonoBindInfo tc_binds
737 rhs_id_env = [(name,mono_id) | (name, Nothing, mono_id) <- mono_info]
738 -- A monomorphic binding for each term variable that lacks
739 -- a type sig. (Ones with a sig are already in scope.)
741 ; binds' <- tcExtendIdEnv2 rhs_id_env $ do
742 traceTc "tcMonoBinds" $ vcat [ ppr n <+> ppr id <+> ppr (idType id)
743 | (n,id) <- rhs_id_env]
744 mapM (wrapLocM tcRhs) tc_binds
745 ; return (listToBag binds', mono_info) }
747 ------------------------
748 -- tcLhs typechecks the LHS of the bindings, to construct the environment in which
749 -- we typecheck the RHSs. Basically what we are doing is this: for each binder:
750 -- if there's a signature for it, use the instantiated signature type
751 -- otherwise invent a type variable
752 -- You see that quite directly in the FunBind case.
754 -- But there's a complication for pattern bindings:
755 -- data T = MkT (forall a. a->a)
757 -- Here we can guess a type variable for the entire LHS (which will be refined to T)
758 -- but we want to get (f::forall a. a->a) as the RHS environment.
759 -- The simplest way to do this is to typecheck the pattern, and then look up the
760 -- bound mono-ids. Then we want to retain the typechecked pattern to avoid re-doing
761 -- it; hence the TcMonoBind data type in which the LHS is done but the RHS isn't
763 data TcMonoBind -- Half completed; LHS done, RHS not done
764 = TcFunBind MonoBindInfo SrcSpan Bool (MatchGroup Name)
765 | TcPatBind [MonoBindInfo] (LPat TcId) (GRHSs Name) TcSigmaType
767 type MonoBindInfo = (Name, Maybe TcSigInfo, TcId)
768 -- Type signature (if any), and
769 -- the monomorphic bound things
771 tcLhs :: TcSigFun -> LetBndrSpec -> HsBind Name -> TcM TcMonoBind
772 tcLhs sig_fn no_gen (FunBind { fun_id = L nm_loc name, fun_infix = inf, fun_matches = matches })
773 | Just sig <- sig_fn name
774 = do { mono_id <- newSigLetBndr no_gen name sig
775 ; return (TcFunBind (name, Just sig, mono_id) nm_loc inf matches) }
777 = do { mono_ty <- newFlexiTyVarTy argTypeKind
778 ; mono_id <- newNoSigLetBndr no_gen name mono_ty
779 ; return (TcFunBind (name, Nothing, mono_id) nm_loc inf matches) }
781 tcLhs sig_fn no_gen (PatBind { pat_lhs = pat, pat_rhs = grhss })
782 = do { let tc_pat exp_ty = tcLetPat sig_fn no_gen pat exp_ty $
783 mapM lookup_info (collectPatBinders pat)
785 -- After typechecking the pattern, look up the binder
786 -- names, which the pattern has brought into scope.
787 lookup_info :: Name -> TcM MonoBindInfo
788 lookup_info name = do { mono_id <- tcLookupId name
789 ; return (name, sig_fn name, mono_id) }
791 ; ((pat', infos), pat_ty) <- addErrCtxt (patMonoBindsCtxt pat grhss) $
794 ; return (TcPatBind infos pat' grhss pat_ty) }
796 tcLhs _ _ other_bind = pprPanic "tcLhs" (ppr other_bind)
797 -- AbsBind, VarBind impossible
800 tcRhs :: TcMonoBind -> TcM (HsBind TcId)
801 -- When we are doing pattern bindings, or multiple function bindings at a time
802 -- we *don't* bring any scoped type variables into scope
803 -- Wny not? They are not completely rigid.
804 -- That's why we have the special case for a single FunBind in tcMonoBinds
805 tcRhs (TcFunBind (_,_,mono_id) loc inf matches)
806 = do { (co_fn, matches') <- tcMatchesFun (idName mono_id) inf
807 matches (idType mono_id)
808 ; return (FunBind { fun_id = L loc mono_id, fun_infix = inf
809 , fun_matches = matches'
811 , bind_fvs = placeHolderNames, fun_tick = Nothing }) }
813 tcRhs (TcPatBind _ pat' grhss pat_ty)
814 = do { grhss' <- addErrCtxt (patMonoBindsCtxt pat' grhss) $
815 tcGRHSsPat grhss pat_ty
816 ; return (PatBind { pat_lhs = pat', pat_rhs = grhss', pat_rhs_ty = pat_ty
817 , bind_fvs = placeHolderNames }) }
820 ---------------------
821 getMonoBindInfo :: [Located TcMonoBind] -> [MonoBindInfo]
822 getMonoBindInfo tc_binds
823 = foldr (get_info . unLoc) [] tc_binds
825 get_info (TcFunBind info _ _ _) rest = info : rest
826 get_info (TcPatBind infos _ _ _) rest = infos ++ rest
830 %************************************************************************
834 %************************************************************************
836 unifyCtxts checks that all the signature contexts are the same
837 The type signatures on a mutually-recursive group of definitions
838 must all have the same context (or none).
840 The trick here is that all the signatures should have the same
841 context, and we want to share type variables for that context, so that
842 all the right hand sides agree a common vocabulary for their type
845 We unify them because, with polymorphic recursion, their types
846 might not otherwise be related. This is a rather subtle issue.
849 unifyCtxts :: [TcSigInfo] -> TcM ()
850 -- Post-condition: the returned Insts are full zonked
851 unifyCtxts [] = return ()
852 unifyCtxts (sig1 : sigs)
853 = do { traceTc "unifyCtxts" (ppr (sig1 : sigs))
854 ; mapM_ unify_ctxt sigs }
856 theta1 = sig_theta sig1
857 unify_ctxt :: TcSigInfo -> TcM ()
858 unify_ctxt sig@(TcSigInfo { sig_theta = theta })
859 = setSrcSpan (sig_loc sig) $
860 addErrCtxt (sigContextsCtxt sig1 sig) $
861 do { cois <- unifyTheta theta1 theta
862 ; -- Check whether all coercions are identity coercions
863 -- That can happen if we have, say
865 -- g :: C (F a) => ...
866 -- where F is a type function and (F a ~ [a])
867 -- Then unification might succeed with a coercion. But it's much
868 -- much simpler to require that such signatures have identical contexts
869 checkTc (all isReflCo cois)
870 (ptext (sLit "Mutually dependent functions have syntactically distinct contexts"))
875 @getTyVarsToGen@ decides what type variables to generalise over.
877 For a "restricted group" -- see the monomorphism restriction
878 for a definition -- we bind no dictionaries, and
879 remove from tyvars_to_gen any constrained type variables
881 *Don't* simplify dicts at this point, because we aren't going
882 to generalise over these dicts. By the time we do simplify them
883 we may well know more. For example (this actually came up)
885 f x = array ... xs where xs = [1,2,3,4,5]
886 We don't want to generate lots of (fromInt Int 1), (fromInt Int 2)
887 stuff. If we simplify only at the f-binding (not the xs-binding)
888 we'll know that the literals are all Ints, and we can just produce
891 Find all the type variables involved in overloading, the
892 "constrained_tyvars". These are the ones we *aren't* going to
893 generalise. We must be careful about doing this:
895 (a) If we fail to generalise a tyvar which is not actually
896 constrained, then it will never, ever get bound, and lands
897 up printed out in interface files! Notorious example:
898 instance Eq a => Eq (Foo a b) where ..
899 Here, b is not constrained, even though it looks as if it is.
900 Another, more common, example is when there's a Method inst in
901 the LIE, whose type might very well involve non-overloaded
903 [NOTE: Jan 2001: I don't understand the problem here so I'm doing
904 the simple thing instead]
906 (b) On the other hand, we mustn't generalise tyvars which are constrained,
907 because we are going to pass on out the unmodified LIE, with those
908 tyvars in it. They won't be in scope if we've generalised them.
910 So we are careful, and do a complete simplification just to find the
911 constrained tyvars. We don't use any of the results, except to
912 find which tyvars are constrained.
914 Note [Polymorphic recursion]
915 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
916 The game plan for polymorphic recursion in the code above is
918 * Bind any variable for which we have a type signature
919 to an Id with a polymorphic type. Then when type-checking
920 the RHSs we'll make a full polymorphic call.
922 This fine, but if you aren't a bit careful you end up with a horrendous
923 amount of partial application and (worse) a huge space leak. For example:
925 f :: Eq a => [a] -> [a]
928 If we don't take care, after typechecking we get
930 f = /\a -> \d::Eq a -> let f' = f a d
934 Notice the the stupid construction of (f a d), which is of course
935 identical to the function we're executing. In this case, the
936 polymorphic recursion isn't being used (but that's a very common case).
937 This can lead to a massive space leak, from the following top-level defn
943 Now (f dEqInt) evaluates to a lambda that has f' as a free variable; but
944 f' is another thunk which evaluates to the same thing... and you end
945 up with a chain of identical values all hung onto by the CAF ff.
949 = let f' = f Int dEqInt in \ys. ...f'...
951 = let f' = let f' = f Int dEqInt in \ys. ...f'...
956 NOTE: a bit of arity anaysis would push the (f a d) inside the (\ys...),
957 which would make the space leak go away in this case
959 Solution: when typechecking the RHSs we always have in hand the
960 *monomorphic* Ids for each binding. So we just need to make sure that
961 if (Method f a d) shows up in the constraints emerging from (...f...)
962 we just use the monomorphic Id. We achieve this by adding monomorphic Ids
963 to the "givens" when simplifying constraints. That's what the "lies_avail"
968 f = /\a -> \d::Eq a -> letrec
969 fm = \ys:[a] -> ...fm...
973 %************************************************************************
977 %************************************************************************
979 Type signatures are tricky. See Note [Signature skolems] in TcType
981 @tcSigs@ checks the signatures for validity, and returns a list of
982 {\em freshly-instantiated} signatures. That is, the types are already
983 split up, and have fresh type variables installed. All non-type-signature
984 "RenamedSigs" are ignored.
986 The @TcSigInfo@ contains @TcTypes@ because they are unified with
987 the variable's type, and after that checked to see whether they've
992 The -XScopedTypeVariables flag brings lexically-scoped type variables
993 into scope for any explicitly forall-quantified type variables:
994 f :: forall a. a -> a
996 Then 'a' is in scope inside 'e'.
998 However, we do *not* support this
999 - For pattern bindings e.g
1003 - For multiple function bindings, unless Opt_RelaxedPolyRec is on
1004 f :: forall a. a -> a
1006 g :: forall b. b -> b
1008 Reason: we use mutable variables for 'a' and 'b', since they may
1009 unify to each other, and that means the scoped type variable would
1010 not stand for a completely rigid variable.
1012 Currently, we simply make Opt_ScopedTypeVariables imply Opt_RelaxedPolyRec
1015 Note [More instantiated than scoped]
1016 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1017 There may be more instantiated type variables than lexically-scoped
1019 type T a = forall b. b -> (a,b)
1021 Here, the signature for f will have one scoped type variable, c,
1022 but two instantiated type variables, c' and b'.
1024 We assume that the scoped ones are at the *front* of sig_tvs,
1025 and remember the names from the original HsForAllTy in the TcSigFun.
1027 Note [Signature skolems]
1028 ~~~~~~~~~~~~~~~~~~~~~~~~
1029 When instantiating a type signature, we do so with either skolems or
1030 SigTv meta-type variables depending on the use_skols boolean. This
1031 variable is set True when we are typechecking a single function
1032 binding; and False for pattern bindings and a group of several
1035 Reason: in the latter cases, the "skolems" can be unified together,
1036 so they aren't properly rigid in the type-refinement sense.
1037 NB: unless we are doing H98, each function with a sig will be done
1038 separately, even if it's mutually recursive, so use_skols will be True
1041 Note [Only scoped tyvars are in the TyVarEnv]
1042 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1043 We are careful to keep only the *lexically scoped* type variables in
1044 the type environment. Why? After all, the renamer has ensured
1045 that only legal occurrences occur, so we could put all type variables
1048 But we want to check that two distinct lexically scoped type variables
1049 do not map to the same internal type variable. So we need to know which
1050 the lexically-scoped ones are... and at the moment we do that by putting
1051 only the lexically scoped ones into the environment.
1053 Note [Instantiate sig with fresh variables]
1054 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1055 It's vital to instantiate a type signature with fresh variables.
1057 type T = forall a. [a] -> [a]
1059 f = g where { g :: T; g = <rhs> }
1061 We must not use the same 'a' from the defn of T at both places!!
1062 (Instantiation is only necessary because of type synonyms. Otherwise,
1063 it's all cool; each signature has distinct type variables from the renamer.)
1066 type SigFun = Name -> Maybe ([Name], SrcSpan)
1067 -- Maps a let-binder to the list of
1068 -- type variables brought into scope
1069 -- by its type signature, plus location
1070 -- Nothing => no type signature
1072 mkSigFun :: [LSig Name] -> SigFun
1073 -- Search for a particular type signature
1074 -- Precondition: the sigs are all type sigs
1075 -- Precondition: no duplicates
1076 mkSigFun sigs = lookupNameEnv env
1078 env = mkNameEnv (mapCatMaybes mk_pair sigs)
1079 mk_pair (L loc (TypeSig (L _ name) lhs_ty)) = Just (name, (hsExplicitTvs lhs_ty, loc))
1080 mk_pair (L loc (IdSig id)) = Just (idName id, ([], loc))
1082 -- The scoped names are the ones explicitly mentioned
1083 -- in the HsForAll. (There may be more in sigma_ty, because
1084 -- of nested type synonyms. See Note [More instantiated than scoped].)
1085 -- See Note [Only scoped tyvars are in the TyVarEnv]
1089 tcTySig :: LSig Name -> TcM TcId
1090 tcTySig (L span (TypeSig (L _ name) ty))
1092 do { sigma_ty <- tcHsSigType (FunSigCtxt name) ty
1093 ; return (mkLocalId name sigma_ty) }
1094 tcTySig (L _ (IdSig id))
1096 tcTySig s = pprPanic "tcTySig" (ppr s)
1099 tcInstSigs :: SigFun -> [Name] -> TcM TcSigFun
1100 tcInstSigs sig_fn bndrs
1101 = do { prs <- mapMaybeM (tcInstSig sig_fn use_skols) bndrs
1102 ; return (lookupNameEnv (mkNameEnv prs)) }
1104 use_skols = isSingleton bndrs -- See Note [Signature skolems]
1106 tcInstSig :: SigFun -> Bool -> Name -> TcM (Maybe (Name, TcSigInfo))
1107 -- For use_skols :: Bool see Note [Signature skolems]
1109 -- We must instantiate with fresh uniques,
1110 -- (see Note [Instantiate sig with fresh variables])
1111 -- although we keep the same print-name.
1113 tcInstSig sig_fn use_skols name
1114 | Just (scoped_tvs, loc) <- sig_fn name
1115 = do { poly_id <- tcLookupId name -- Cannot fail; the poly ids are put into
1116 -- scope when starting the binding group
1117 ; let poly_ty = idType poly_id
1118 ; (tvs, theta, tau) <- if use_skols
1119 then tcInstType tcInstSkolTyVars poly_ty
1120 else tcInstType tcInstSigTyVars poly_ty
1121 ; let sig = TcSigInfo { sig_id = poly_id
1122 , sig_scoped = scoped_tvs
1123 , sig_tvs = tvs, sig_theta = theta, sig_tau = tau
1125 ; return (Just (name, sig)) }
1129 -------------------------------
1130 data GeneralisationPlan
1131 = NoGen -- No generalisation, no AbsBinds
1132 | InferGen Bool -- Implicit generalisation; there is an AbsBinds
1133 -- True <=> apply the MR; generalise only unconstrained type vars
1134 | CheckGen TcSigInfo -- Explicit generalisation; there is an AbsBinds
1136 -- A consequence of the no-AbsBinds choice (NoGen) is that there is
1137 -- no "polymorphic Id" and "monmomorphic Id"; there is just the one
1139 instance Outputable GeneralisationPlan where
1140 ppr NoGen = ptext (sLit "NoGen")
1141 ppr (InferGen b) = ptext (sLit "InferGen") <+> ppr b
1142 ppr (CheckGen s) = ptext (sLit "CheckGen") <+> ppr s
1144 decideGeneralisationPlan
1145 :: DynFlags -> TopLevelFlag -> [Name] -> [LHsBind Name] -> TcSigFun -> GeneralisationPlan
1146 decideGeneralisationPlan dflags top_lvl _bndrs binds sig_fn
1147 | bang_pat_binds = NoGen
1148 | mono_pat_binds = NoGen
1149 | Just sig <- one_funbind_with_sig binds = if null (sig_tvs sig) && null (sig_theta sig)
1150 then NoGen -- Optimise common case
1152 | (xopt Opt_MonoLocalBinds dflags
1153 && isNotTopLevel top_lvl) = NoGen
1154 | otherwise = InferGen mono_restriction
1157 bang_pat_binds = any (isBangHsBind . unLoc) binds
1158 -- Bang patterns must not be polymorphic,
1159 -- because we are going to force them
1162 mono_pat_binds = xopt Opt_MonoPatBinds dflags
1163 && any (is_pat_bind . unLoc) binds
1165 mono_restriction = xopt Opt_MonomorphismRestriction dflags
1166 && any (restricted . unLoc) binds
1168 no_sig n = isNothing (sig_fn n)
1170 -- With OutsideIn, all nested bindings are monomorphic
1171 -- except a single function binding with a signature
1172 one_funbind_with_sig [L _ FunBind { fun_id = v }] = sig_fn (unLoc v)
1173 one_funbind_with_sig _ = Nothing
1175 -- The Haskell 98 monomorphism resetriction
1176 restricted (PatBind {}) = True
1177 restricted (VarBind { var_id = v }) = no_sig v
1178 restricted (FunBind { fun_id = v, fun_matches = m }) = restricted_match m
1180 restricted (AbsBinds {}) = panic "isRestrictedGroup/unrestricted AbsBinds"
1182 restricted_match (MatchGroup (L _ (Match [] _ _) : _) _) = True
1183 restricted_match _ = False
1184 -- No args => like a pattern binding
1185 -- Some args => a function binding
1187 is_pat_bind (PatBind {}) = True
1188 is_pat_bind _ = False
1191 checkStrictBinds :: TopLevelFlag -> RecFlag
1192 -> [LHsBind Name] -> [Id]
1194 -- Check that non-overloaded unlifted bindings are
1195 -- a) non-recursive,
1196 -- b) not top level,
1197 -- c) not a multiple-binding group (more or less implied by (a))
1199 checkStrictBinds top_lvl rec_group binds poly_ids
1200 | unlifted || bang_pat
1201 = do { checkTc (isNotTopLevel top_lvl)
1202 (strictBindErr "Top-level" unlifted binds)
1203 ; checkTc (isNonRec rec_group)
1204 (strictBindErr "Recursive" unlifted binds)
1205 ; checkTc (isSingleton binds)
1206 (strictBindErr "Multiple" unlifted binds)
1207 -- This should be a checkTc, not a warnTc, but as of GHC 6.11
1208 -- the versions of alex and happy available have non-conforming
1209 -- templates, so the GHC build fails if it's an error:
1210 ; warnUnlifted <- doptM Opt_WarnLazyUnliftedBindings
1211 ; warnTc (warnUnlifted && not bang_pat && lifted_pat)
1212 -- No outer bang, but it's a compound pattern
1213 -- E.g (I# x#) = blah
1214 -- Warn about this, but not about
1217 (unliftedMustBeBang binds) }
1221 unlifted = any is_unlifted poly_ids
1222 bang_pat = any (isBangHsBind . unLoc) binds
1223 lifted_pat = any (isLiftedPatBind . unLoc) binds
1224 is_unlifted id = case tcSplitForAllTys (idType id) of
1225 (_, rho) -> isUnLiftedType rho
1227 unliftedMustBeBang :: [LHsBind Name] -> SDoc
1228 unliftedMustBeBang binds
1229 = hang (text "Pattern bindings containing unlifted types should use an outermost bang pattern:")
1230 2 (pprBindList binds)
1232 strictBindErr :: String -> Bool -> [LHsBind Name] -> SDoc
1233 strictBindErr flavour unlifted binds
1234 = hang (text flavour <+> msg <+> ptext (sLit "aren't allowed:"))
1235 2 (pprBindList binds)
1237 msg | unlifted = ptext (sLit "bindings for unlifted types")
1238 | otherwise = ptext (sLit "bang-pattern bindings")
1240 pprBindList :: [LHsBind Name] -> SDoc
1241 pprBindList binds = vcat (map ppr binds)
1245 %************************************************************************
1247 \subsection[TcBinds-errors]{Error contexts and messages}
1249 %************************************************************************
1253 -- This one is called on LHS, when pat and grhss are both Name
1254 -- and on RHS, when pat is TcId and grhss is still Name
1255 patMonoBindsCtxt :: OutputableBndr id => LPat id -> GRHSs Name -> SDoc
1256 patMonoBindsCtxt pat grhss
1257 = hang (ptext (sLit "In a pattern binding:")) 2 (pprPatBind pat grhss)
1259 -----------------------------------------------
1260 sigContextsCtxt :: TcSigInfo -> TcSigInfo -> SDoc
1261 sigContextsCtxt sig1 sig2
1262 = vcat [ptext (sLit "When matching the contexts of the signatures for"),
1263 nest 2 (vcat [ppr id1 <+> dcolon <+> ppr (idType id1),
1264 ppr id2 <+> dcolon <+> ppr (idType id2)]),
1265 ptext (sLit "The signature contexts in a mutually recursive group should all be identical")]