Fix haddock markup
[ghc-hetmet.git] / compiler / typecheck / TcBinds.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5 \section[TcBinds]{TcBinds}
6
7 \begin{code}
8 module TcBinds ( tcLocalBinds, tcTopBinds, 
9                  tcHsBootSigs, tcPolyBinds,
10                  PragFun, tcSpecPrags, mkPragFun, 
11                  TcSigInfo(..), SigFun, mkSigFun,
12                  badBootDeclErr ) where
13
14 import {-# SOURCE #-} TcMatches ( tcGRHSsPat, tcMatchesFun )
15 import {-# SOURCE #-} TcExpr  ( tcMonoExpr )
16
17 import DynFlags
18 import HsSyn
19
20 import TcRnMonad
21 import TcEnv
22 import TcUnify
23 import TcSimplify
24 import TcHsType
25 import TcPat
26 import TcMType
27 import TcType
28 import RnBinds( misplacedSigErr )
29 import Coercion
30 import TysPrim
31 import Id
32 import Var
33 import Name
34 import NameSet
35 import NameEnv
36 import VarSet
37 import SrcLoc
38 import Bag
39 import ErrUtils
40 import Digraph
41 import Maybes
42 import Util
43 import BasicTypes
44 import Outputable
45 import FastString
46
47 import Data.List( partition )
48 import Control.Monad
49
50 #include "HsVersions.h"
51 \end{code}
52
53
54 %************************************************************************
55 %*                                                                      *
56 \subsection{Type-checking bindings}
57 %*                                                                      *
58 %************************************************************************
59
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.
67
68 @tcBindsAndThen@ also takes a "combiner" which glues together the
69 bindings and the "thing" to make a new "thing".
70
71 The real work is done by @tcBindWithSigsAndThen@.
72
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.
76
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.
81
82 At the top-level the LIE is sure to contain nothing but constant
83 dictionaries, which we resolve at the module level.
84
85 \begin{code}
86 tcTopBinds :: HsValBinds Name 
87            -> TcM ( LHsBinds TcId       -- Typechecked bindings
88                   , [LTcSpecPrag]       -- SPECIALISE prags for imported Ids
89                   , TcLclEnv)           -- Augmented environment
90
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
94 tcTopBinds binds
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
101
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) }
108   where
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)
115
116 badBootDeclErr :: Message
117 badBootDeclErr = ptext (sLit "Illegal declarations in an hs-boot file")
118
119 ------------------------
120 tcLocalBinds :: HsLocalBinds Name -> TcM thing
121              -> TcM (HsLocalBinds TcId, thing)
122
123 tcLocalBinds EmptyLocalBinds thing_inside 
124   = do  { thing <- thing_inside
125         ; return (EmptyLocalBinds, thing) }
126
127 tcLocalBinds (HsValBinds binds) thing_inside
128   = do  { (binds', thing) <- tcValBinds NotTopLevel binds thing_inside
129         ; return (HsValBinds binds', thing) }
130
131 tcLocalBinds (HsIPBinds (IPBinds ip_binds _)) thing_inside
132   = do  { (given_ips, ip_binds') <- mapAndUnzipM (wrapLocSndM tc_ip_bind) ip_binds
133         ; let ip_tvs = foldr (unionVarSet . tyVarsOfType . idType) emptyVarSet given_ips
134
135         -- If the binding binds ?x = E, we  must now 
136         -- discharge any ?x constraints in expr_lie
137         ; (ev_binds, result) <- checkConstraints (IPSkol ips) 
138                                   ip_tvs  -- See Note [Implicit parameter untouchables]
139                                   [] given_ips $
140                                 thing_inside
141
142         ; return (HsIPBinds (IPBinds ip_binds' ev_binds), result) }
143   where
144     ips = [ip | L _ (IPBind ip _) <- ip_binds]
145
146         -- I wonder if we should do these one at at time
147         -- Consider     ?x = 4
148         --              ?y = ?x + 1
149     tc_ip_bind (IPBind ip expr) 
150        = do { ty <- newFlexiTyVarTy argTypeKind
151             ; ip_id <- newIP ip ty
152             ; expr' <- tcMonoExpr expr ty
153             ; return (ip_id, (IPBind (IPName ip_id) expr')) }
154 \end{code}
155
156 Note [Implicit parameter untouchables]
157 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
158 We add the type variables in the types of the implicit parameters
159 as untouchables, not so much because we really must not unify them,
160 but rather because we otherwise end up with constraints like this
161     Num alpha, Implic { wanted = alpha ~ Int }
162 The constraint solver solves alpha~Int by unification, but then
163 doesn't float that solved constraint out (it's not an unsolved 
164 wanted.  Result disaster: the (Num alpha) is again solved, this
165 time by defaulting.  No no no.
166
167 \begin{code}
168 tcValBinds :: TopLevelFlag 
169            -> HsValBinds Name -> TcM thing
170            -> TcM (HsValBinds TcId, thing) 
171
172 tcValBinds _ (ValBindsIn binds _) _
173   = pprPanic "tcValBinds" (ppr binds)
174
175 tcValBinds top_lvl (ValBindsOut binds sigs) thing_inside
176   = do  {       -- Typecheck the signature
177         ; let { prag_fn = mkPragFun sigs (foldr (unionBags . snd) emptyBag binds)
178               ; ty_sigs = filter isTypeLSig sigs
179               ; sig_fn  = mkSigFun ty_sigs }
180
181         ; poly_ids <- checkNoErrs (mapAndRecoverM tcTySig ty_sigs)
182                 -- No recovery from bad signatures, because the type sigs
183                 -- may bind type variables, so proceeding without them
184                 -- can lead to a cascade of errors
185                 -- ToDo: this means we fall over immediately if any type sig
186                 -- is wrong, which is over-conservative, see Trac bug #745
187
188                 -- Extend the envt right away with all 
189                 -- the Ids declared with type signatures
190         ; (binds', thing) <- tcExtendIdEnv poly_ids $
191                              tcBindGroups top_lvl sig_fn prag_fn 
192                                           binds thing_inside
193
194         ; return (ValBindsOut binds' sigs, thing) }
195
196 ------------------------
197 tcBindGroups :: TopLevelFlag -> SigFun -> PragFun
198              -> [(RecFlag, LHsBinds Name)] -> TcM thing
199              -> TcM ([(RecFlag, LHsBinds TcId)], thing)
200 -- Typecheck a whole lot of value bindings,
201 -- one strongly-connected component at a time
202 -- Here a "strongly connected component" has the strightforward
203 -- meaning of a group of bindings that mention each other, 
204 -- ignoring type signatures (that part comes later)
205
206 tcBindGroups _ _ _ [] thing_inside
207   = do  { thing <- thing_inside
208         ; return ([], thing) }
209
210 tcBindGroups top_lvl sig_fn prag_fn (group : groups) thing_inside
211   = do  { (group', (groups', thing))
212                 <- tc_group top_lvl sig_fn prag_fn group $ 
213                    tcBindGroups top_lvl sig_fn prag_fn groups thing_inside
214         ; return (group' ++ groups', thing) }
215
216 ------------------------
217 tc_group :: forall thing. 
218             TopLevelFlag -> SigFun -> PragFun
219          -> (RecFlag, LHsBinds Name) -> TcM thing
220          -> TcM ([(RecFlag, LHsBinds TcId)], thing)
221
222 -- Typecheck one strongly-connected component of the original program.
223 -- We get a list of groups back, because there may 
224 -- be specialisations etc as well
225
226 tc_group top_lvl sig_fn prag_fn (NonRecursive, binds) thing_inside
227         -- A single non-recursive binding
228         -- We want to keep non-recursive things non-recursive
229         -- so that we desugar unlifted bindings correctly
230  =  do { (binds1, ids) <- tcPolyBinds top_lvl sig_fn prag_fn NonRecursive NonRecursive
231                                       (bagToList binds)
232        ; thing <- tcExtendIdEnv ids thing_inside
233        ; return ( [(NonRecursive, binds1)], thing) }
234
235 tc_group top_lvl sig_fn prag_fn (Recursive, binds) thing_inside
236   =     -- To maximise polymorphism (assumes -XRelaxedPolyRec), we do a new 
237         -- strongly-connected-component analysis, this time omitting 
238         -- any references to variables with type signatures.
239     do  { traceTc "tc_group rec" (pprLHsBinds binds)
240         ; (binds1, _ids, thing) <- go sccs
241              -- Here is where we should do bindInstsOfLocalFuns
242              -- if we start having Methods again
243         ; return ([(Recursive, binds1)], thing) }
244                 -- Rec them all together
245   where
246     sccs :: [SCC (LHsBind Name)]
247     sccs = stronglyConnCompFromEdgedVertices (mkEdges sig_fn binds)
248
249     go :: [SCC (LHsBind Name)] -> TcM (LHsBinds TcId, [TcId], thing)
250     go (scc:sccs) = do  { (binds1, ids1)        <- tc_scc scc
251                         ; (binds2, ids2, thing) <- tcExtendIdEnv ids1 $ go sccs
252                         ; return (binds1 `unionBags` binds2, ids1 ++ ids2, thing) }
253     go []         = do  { thing <- thing_inside; return (emptyBag, [], thing) }
254
255     tc_scc (AcyclicSCC bind) = tc_sub_group NonRecursive [bind]
256     tc_scc (CyclicSCC binds) = tc_sub_group Recursive    binds
257
258     tc_sub_group = tcPolyBinds top_lvl sig_fn prag_fn Recursive
259
260
261 ------------------------
262 {-
263 bindLocalInsts :: TopLevelFlag
264                -> TcM (LHsBinds TcId, [TcId],    a)
265                -> TcM (LHsBinds TcId, TcEvBinds, a)
266 bindLocalInsts top_lvl thing_inside
267   | isTopLevel top_lvl
268   = do { (binds, _, thing) <- thing_inside; return (binds, emptyBag, thing) }
269         -- For the top level don't bother with all this bindInstsOfLocalFuns stuff. 
270         -- All the top level things are rec'd together anyway, so it's fine to
271         -- leave them to the tcSimplifyTop, and quite a bit faster too
272
273   | otherwise   -- Nested case
274   = do  { ((binds, ids, thing), lie) <- captureConstraints thing_inside
275         ; lie_binds <- bindLocalMethods lie ids
276         ; return (binds, lie_binds, thing) }
277 -}
278
279 ------------------------
280 mkEdges :: SigFun -> LHsBinds Name
281         -> [(LHsBind Name, BKey, [BKey])]
282
283 type BKey  = Int -- Just number off the bindings
284
285 mkEdges sig_fn binds
286   = [ (bind, key, [key | n <- nameSetToList (bind_fvs (unLoc bind)),
287                          Just key <- [lookupNameEnv key_map n], no_sig n ])
288     | (bind, key) <- keyd_binds
289     ]
290   where
291     no_sig :: Name -> Bool
292     no_sig n = isNothing (sig_fn n)
293
294     keyd_binds = bagToList binds `zip` [0::BKey ..]
295
296     key_map :: NameEnv BKey     -- Which binding it comes from
297     key_map = mkNameEnv [(bndr, key) | (L _ bind, key) <- keyd_binds
298                                      , bndr <- bindersOfHsBind bind ]
299
300 bindersOfHsBind :: HsBind Name -> [Name]
301 bindersOfHsBind (PatBind { pat_lhs = pat })  = collectPatBinders pat
302 bindersOfHsBind (FunBind { fun_id = L _ f }) = [f]
303 bindersOfHsBind (AbsBinds {})                = panic "bindersOfHsBind AbsBinds"
304 bindersOfHsBind (VarBind {})                 = panic "bindersOfHsBind VarBind"
305
306 ------------------------
307 tcPolyBinds :: TopLevelFlag -> SigFun -> PragFun
308             -> RecFlag       -- Whether the group is really recursive
309             -> RecFlag       -- Whether it's recursive after breaking
310                              -- dependencies based on type signatures
311             -> [LHsBind Name]
312             -> TcM (LHsBinds TcId, [TcId])
313
314 -- Typechecks a single bunch of bindings all together, 
315 -- and generalises them.  The bunch may be only part of a recursive
316 -- group, because we use type signatures to maximise polymorphism
317 --
318 -- Returns a list because the input may be a single non-recursive binding,
319 -- in which case the dependency order of the resulting bindings is
320 -- important.  
321 -- 
322 -- Knows nothing about the scope of the bindings
323
324 tcPolyBinds top_lvl sig_fn prag_fn rec_group rec_tc bind_list
325   = setSrcSpan loc                              $
326     recoverM (recoveryCode binder_names sig_fn) $ do 
327         -- Set up main recoer; take advantage of any type sigs
328
329     { traceTc "------------------------------------------------" empty
330     ; traceTc "Bindings for" (ppr binder_names)
331
332     ; tc_sig_fn <- tcInstSigs sig_fn binder_names
333
334     ; dflags <- getDOpts
335     ; let plan = decideGeneralisationPlan dflags top_lvl binder_names bind_list tc_sig_fn
336     ; traceTc "Generalisation plan" (ppr plan)
337     ; (binds, poly_ids) <- case plan of
338          NoGen         -> tcPolyNoGen tc_sig_fn prag_fn rec_tc bind_list
339          InferGen mono -> tcPolyInfer top_lvl mono tc_sig_fn prag_fn rec_tc bind_list
340          CheckGen sig  -> tcPolyCheck sig prag_fn rec_tc bind_list
341
342         -- Check whether strict bindings are ok
343         -- These must be non-recursive etc, and are not generalised
344         -- They desugar to a case expression in the end
345     ; checkStrictBinds top_lvl rec_group bind_list poly_ids
346
347     ; return (binds, poly_ids) }
348   where
349     binder_names = collectHsBindListBinders bind_list
350     loc = getLoc (head bind_list)
351          -- TODO: location a bit awkward, but the mbinds have been
352          --       dependency analysed and may no longer be adjacent
353
354 ------------------
355 tcPolyNoGen 
356   :: TcSigFun -> PragFun
357   -> RecFlag       -- Whether it's recursive after breaking
358                    -- dependencies based on type signatures
359   -> [LHsBind Name]
360   -> TcM (LHsBinds TcId, [TcId])
361 -- No generalisation whatsoever
362
363 tcPolyNoGen tc_sig_fn prag_fn rec_tc bind_list
364   = do { (binds', mono_infos) <- tcMonoBinds tc_sig_fn (LetGblBndr prag_fn) 
365                                              rec_tc bind_list
366        ; mono_ids' <- mapM tc_mono_info mono_infos
367        ; return (binds', mono_ids') }
368   where
369     tc_mono_info (name, _, mono_id)
370       = do { mono_ty' <- zonkTcTypeCarefully (idType mono_id)
371              -- Zonk, mainly to expose unboxed types to checkStrictBinds
372            ; let mono_id' = setIdType mono_id mono_ty'
373            ; _specs <- tcSpecPrags mono_id' (prag_fn name)
374            ; return mono_id' }
375            -- NB: tcPrags generates error messages for
376            --     specialisation pragmas for non-overloaded sigs
377            -- Indeed that is why we call it here!
378            -- So we can safely ignore _specs
379
380 ------------------
381 tcPolyCheck :: TcSigInfo -> PragFun
382             -> RecFlag       -- Whether it's recursive after breaking
383                              -- dependencies based on type signatures
384             -> [LHsBind Name]
385             -> TcM (LHsBinds TcId, [TcId])
386 -- There is just one binding, 
387 --   it binds a single variable,
388 --   it has a signature,
389 tcPolyCheck sig@(TcSigInfo { sig_id = id, sig_tvs = tvs, sig_scoped = scoped
390                            , sig_theta = theta, sig_loc = loc })
391     prag_fn rec_tc bind_list
392   = do { ev_vars <- newEvVars theta
393
394        ; let skol_info = SigSkol (FunSigCtxt (idName id))
395        ; (ev_binds, (binds', [mono_info])) 
396             <- checkConstraints skol_info emptyVarSet tvs ev_vars $
397                tcExtendTyVarEnv2 (scoped `zip` mkTyVarTys tvs)    $
398                tcMonoBinds (\_ -> Just sig) LetLclBndr rec_tc bind_list
399
400        ; export <- mkExport prag_fn tvs theta mono_info
401
402        ; let (_, poly_id, _, _) = export
403              abs_bind = L loc $ AbsBinds 
404                         { abs_tvs = tvs
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]) }
408
409 ------------------
410 tcPolyInfer 
411   :: TopLevelFlag 
412   -> Bool         -- True <=> apply the monomorphism restriction
413   -> TcSigFun -> PragFun
414   -> RecFlag       -- Whether it's recursive after breaking
415                    -- dependencies based on type signatures
416   -> [LHsBind Name]
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
422
423        ; unifyCtxts [sig | (_, Just sig, _) <- mono_infos] 
424
425        ; let get_tvs | isTopLevel top_lvl = tyVarsOfType  
426                      | otherwise          = exactTyVarsOfType
427                      -- See Note [Silly type synonym] in TcType
428              tau_tvs = foldr (unionVarSet . get_tvs . getMonoType) emptyVarSet mono_infos
429
430        ; (qtvs, givens, ev_binds) <- simplifyInfer mono tau_tvs wanted
431
432        ; exports <- mapM (mkExport prag_fn qtvs (map evVarPred givens))
433                     mono_infos
434
435        ; let poly_ids = [poly_id | (_, poly_id, _, _) <- exports]
436        ; traceTc "Binding:" (ppr (poly_ids `zip` map idType poly_ids))
437
438        ; loc <- getSrcSpanM
439        ; let abs_bind = L loc $ AbsBinds { abs_tvs = qtvs
440                                          , abs_ev_vars = givens, abs_ev_binds = ev_binds
441                                          , abs_exports = exports, abs_binds = binds' }
442
443        ; return (unitBag abs_bind, poly_ids)   -- poly_ids are guaranteed zonked by mkExport
444   }
445
446
447 --------------
448 mkExport :: PragFun -> [TyVar] -> TcThetaType
449          -> MonoBindInfo
450          -> TcM ([TyVar], Id, Id, TcSpecPrags)
451 -- mkExport generates exports with 
452 --      zonked type variables, 
453 --      zonked poly_ids
454 -- The former is just because no further unifications will change
455 -- the quantified type variables, so we can fix their final form
456 -- right now.
457 -- The latter is needed because the poly_ids are used to extend the
458 -- type environment; see the invariant on TcEnv.tcExtendIdEnv 
459
460 -- Pre-condition: the inferred_tvs are already zonked
461
462 mkExport prag_fn inferred_tvs theta
463          (poly_name, mb_sig, mono_id)
464   = do  { (tvs, poly_id) <- mk_poly_id mb_sig
465                 -- poly_id has a zonked type
466
467         ; poly_id' <- addInlinePrags poly_id prag_sigs
468
469         ; spec_prags <- tcSpecPrags poly_id prag_sigs
470                 -- tcPrags requires a zonked poly_id
471
472         ; return (tvs, poly_id', mono_id, SpecPrags spec_prags) }
473   where
474     prag_sigs = prag_fn poly_name
475     poly_ty = mkSigmaTy inferred_tvs theta (idType mono_id)
476
477     mk_poly_id Nothing    = do { poly_ty' <- zonkTcTypeCarefully poly_ty
478                                ; return (inferred_tvs, mkLocalId poly_name poly_ty') }
479     mk_poly_id (Just sig) = do { tvs <- mapM zonk_tv (sig_tvs sig)
480                                ; return (tvs,  sig_id sig) }
481
482     zonk_tv tv = do { ty <- zonkTcTyVar tv; return (tcGetTyVar "mkExport" ty) }
483
484 ------------------------
485 type PragFun = Name -> [LSig Name]
486
487 mkPragFun :: [LSig Name] -> LHsBinds Name -> PragFun
488 mkPragFun sigs binds = \n -> lookupNameEnv prag_env n `orElse` []
489   where
490     prs = mapCatMaybes get_sig sigs
491
492     get_sig :: LSig Name -> Maybe (Located Name, LSig Name)
493     get_sig (L l (SpecSig nm ty inl)) = Just (nm, L l $ SpecSig  nm ty (add_arity nm inl))
494     get_sig (L l (InlineSig nm inl))  = Just (nm, L l $ InlineSig nm   (add_arity nm inl))
495     get_sig _                         = Nothing
496
497     add_arity (L _ n) inl_prag   -- Adjust inl_sat field to match visible arity of function
498       | Just ar <- lookupNameEnv ar_env n,
499         Inline <- inl_inline inl_prag     = inl_prag { inl_sat = Just ar }
500         -- add arity only for real INLINE pragmas, not INLINABLE
501       | otherwise                         = inl_prag
502
503     prag_env :: NameEnv [LSig Name]
504     prag_env = foldl add emptyNameEnv prs
505     add env (L _ n,p) = extendNameEnv_Acc (:) singleton env n p
506
507     -- ar_env maps a local to the arity of its definition
508     ar_env :: NameEnv Arity
509     ar_env = foldrBag lhsBindArity emptyNameEnv binds
510
511 lhsBindArity :: LHsBind Name -> NameEnv Arity -> NameEnv Arity
512 lhsBindArity (L _ (FunBind { fun_id = id, fun_matches = ms })) env
513   = extendNameEnv env (unLoc id) (matchGroupArity ms)
514 lhsBindArity _ env = env        -- PatBind/VarBind
515
516 ------------------
517 tcSpecPrags :: Id -> [LSig Name]
518             -> TcM [LTcSpecPrag]
519 -- Add INLINE and SPECIALSE pragmas
520 --    INLINE prags are added to the (polymorphic) Id directly
521 --    SPECIALISE prags are passed to the desugarer via TcSpecPrags
522 -- Pre-condition: the poly_id is zonked
523 -- Reason: required by tcSubExp
524 tcSpecPrags poly_id prag_sigs
525   = do { unless (null bad_sigs) warn_discarded_sigs
526        ; mapAndRecoverM (wrapLocM (tcSpec poly_id)) spec_sigs }
527   where
528     spec_sigs = filter isSpecLSig prag_sigs
529     bad_sigs  = filter is_bad_sig prag_sigs
530     is_bad_sig s = not (isSpecLSig s || isInlineLSig s)
531
532     warn_discarded_sigs = warnPrags poly_id bad_sigs $
533                           ptext (sLit "Discarding unexpected pragmas for")
534
535
536 --------------
537 tcSpec :: TcId -> Sig Name -> TcM TcSpecPrag
538 tcSpec poly_id prag@(SpecSig _ hs_ty inl) 
539   -- The Name in the SpecSig may not be the same as that of the poly_id
540   -- Example: SPECIALISE for a class method: the Name in the SpecSig is
541   --          for the selector Id, but the poly_id is something like $cop
542   = addErrCtxt (spec_ctxt prag) $
543     do  { spec_ty <- tcHsSigType sig_ctxt hs_ty
544         ; checkTc (isOverloadedTy poly_ty)
545                   (ptext (sLit "Discarding pragma for non-overloaded function") <+> quotes (ppr poly_id))
546         ; wrap <- tcSubType origin skol_info (idType poly_id) spec_ty
547         ; return (SpecPrag poly_id wrap inl) }
548   where
549     name      = idName poly_id
550     poly_ty   = idType poly_id
551     origin    = SpecPragOrigin name
552     sig_ctxt  = FunSigCtxt name
553     skol_info = SigSkol sig_ctxt
554     spec_ctxt prag = hang (ptext (sLit "In the SPECIALISE pragma")) 2 (ppr prag)
555
556 tcSpec _ prag = pprPanic "tcSpec" (ppr prag)
557
558 --------------
559 tcImpPrags :: [LSig Name] -> TcM [LTcSpecPrag]
560 tcImpPrags prags
561   = do { this_mod <- getModule
562        ; let is_imp prag 
563                = case sigName prag of
564                    Nothing   -> False
565                    Just name -> not (nameIsLocalOrFrom this_mod name)
566              (spec_prags, others) = partition isSpecLSig $
567                                     filter is_imp prags
568        ; mapM_ misplacedSigErr others 
569        -- Messy that this misplaced-sig error comes here
570        -- but the others come from the renamer
571        ; mapAndRecoverM (wrapLocM tcImpSpec) spec_prags }
572
573 tcImpSpec :: Sig Name -> TcM TcSpecPrag
574 tcImpSpec prag@(SpecSig (L _ name) _ _)
575  = do { id <- tcLookupId name
576       ; checkTc (isInlinePragma (idInlinePragma id))
577                 (impSpecErr name)
578       ; tcSpec id prag }
579 tcImpSpec p = pprPanic "tcImpSpec" (ppr p)
580
581 impSpecErr :: Name -> SDoc
582 impSpecErr name
583   = hang (ptext (sLit "You cannot SPECIALISE") <+> quotes (ppr name))
584        2 (ptext (sLit "because its definition has no INLINE/INLINABLE pragma"))
585
586 --------------
587 -- If typechecking the binds fails, then return with each
588 -- signature-less binder given type (forall a.a), to minimise 
589 -- subsequent error messages
590 recoveryCode :: [Name] -> SigFun -> TcM (LHsBinds TcId, [Id])
591 recoveryCode binder_names sig_fn
592   = do  { traceTc "tcBindsWithSigs: error recovery" (ppr binder_names)
593         ; poly_ids <- mapM mk_dummy binder_names
594         ; return (emptyBag, poly_ids) }
595   where
596     mk_dummy name 
597         | isJust (sig_fn name) = tcLookupId name        -- Had signature; look it up
598         | otherwise            = return (mkLocalId name forall_a_a)    -- No signature
599
600 forall_a_a :: TcType
601 forall_a_a = mkForAllTy openAlphaTyVar (mkTyVarTy openAlphaTyVar)
602 \end{code}
603
604
605 %************************************************************************
606 %*                                                                      *
607 \subsection{tcMonoBind}
608 %*                                                                      *
609 %************************************************************************
610
611 @tcMonoBinds@ deals with a perhaps-recursive group of HsBinds.
612 The signatures have been dealt with already.
613
614 \begin{code}
615 tcMonoBinds :: TcSigFun -> LetBndrSpec 
616             -> RecFlag  -- Whether the binding is recursive for typechecking purposes
617                         -- i.e. the binders are mentioned in their RHSs, and
618                         --      we are not resuced by a type signature
619             -> [LHsBind Name]
620             -> TcM (LHsBinds TcId, [MonoBindInfo])
621
622 tcMonoBinds sig_fn no_gen is_rec
623            [ L b_loc (FunBind { fun_id = L nm_loc name, fun_infix = inf, 
624                                 fun_matches = matches, bind_fvs = fvs })]
625                              -- Single function binding, 
626   | NonRecursive <- is_rec   -- ...binder isn't mentioned in RHS
627   , Nothing <- sig_fn name   -- ...with no type signature
628   =     -- In this very special case we infer the type of the
629         -- right hand side first (it may have a higher-rank type)
630         -- and *then* make the monomorphic Id for the LHS
631         -- e.g.         f = \(x::forall a. a->a) -> <body>
632         --      We want to infer a higher-rank type for f
633     setSrcSpan b_loc    $
634     do  { ((co_fn, matches'), rhs_ty) <- tcInfer (tcMatchesFun name inf matches)
635
636         ; mono_id <- newNoSigLetBndr no_gen name rhs_ty
637         ; return (unitBag (L b_loc (FunBind { fun_id = L nm_loc mono_id, fun_infix = inf,
638                                               fun_matches = matches', bind_fvs = fvs,
639                                               fun_co_fn = co_fn, fun_tick = Nothing })),
640                   [(name, Nothing, mono_id)]) }
641
642 tcMonoBinds sig_fn no_gen _ binds
643   = do  { tc_binds <- mapM (wrapLocM (tcLhs sig_fn no_gen)) binds
644
645         -- Bring the monomorphic Ids, into scope for the RHSs
646         ; let mono_info  = getMonoBindInfo tc_binds
647               rhs_id_env = [(name,mono_id) | (name, Nothing, mono_id) <- mono_info]
648                     -- A monomorphic binding for each term variable that lacks 
649                     -- a type sig.  (Ones with a sig are already in scope.)
650
651         ; binds' <- tcExtendIdEnv2 rhs_id_env $ do
652                     traceTc "tcMonoBinds" $  vcat [ ppr n <+> ppr id <+> ppr (idType id) 
653                                                   | (n,id) <- rhs_id_env]
654                     mapM (wrapLocM tcRhs) tc_binds
655         ; return (listToBag binds', mono_info) }
656
657 ------------------------
658 -- tcLhs typechecks the LHS of the bindings, to construct the environment in which
659 -- we typecheck the RHSs.  Basically what we are doing is this: for each binder:
660 --      if there's a signature for it, use the instantiated signature type
661 --      otherwise invent a type variable
662 -- You see that quite directly in the FunBind case.
663 -- 
664 -- But there's a complication for pattern bindings:
665 --      data T = MkT (forall a. a->a)
666 --      MkT f = e
667 -- Here we can guess a type variable for the entire LHS (which will be refined to T)
668 -- but we want to get (f::forall a. a->a) as the RHS environment.
669 -- The simplest way to do this is to typecheck the pattern, and then look up the
670 -- bound mono-ids.  Then we want to retain the typechecked pattern to avoid re-doing
671 -- it; hence the TcMonoBind data type in which the LHS is done but the RHS isn't
672
673 data TcMonoBind         -- Half completed; LHS done, RHS not done
674   = TcFunBind  MonoBindInfo  SrcSpan Bool (MatchGroup Name) 
675   | TcPatBind [MonoBindInfo] (LPat TcId) (GRHSs Name) TcSigmaType
676
677 type MonoBindInfo = (Name, Maybe TcSigInfo, TcId)
678         -- Type signature (if any), and
679         -- the monomorphic bound things
680
681 getMonoType :: MonoBindInfo -> TcTauType
682 getMonoType (_,_,mono_id) = idType mono_id
683
684 tcLhs :: TcSigFun -> LetBndrSpec -> HsBind Name -> TcM TcMonoBind
685 tcLhs sig_fn no_gen (FunBind { fun_id = L nm_loc name, fun_infix = inf, fun_matches = matches })
686   | Just sig <- sig_fn name
687   = do  { mono_id <- newSigLetBndr no_gen name sig
688         ; return (TcFunBind (name, Just sig, mono_id) nm_loc inf matches) }
689   | otherwise
690   = do  { mono_ty <- newFlexiTyVarTy argTypeKind
691         ; mono_id <- newNoSigLetBndr no_gen name mono_ty
692         ; return (TcFunBind (name, Nothing, mono_id) nm_loc inf matches) }
693
694 tcLhs sig_fn no_gen (PatBind { pat_lhs = pat, pat_rhs = grhss })
695   = do  { let tc_pat exp_ty = tcLetPat sig_fn no_gen pat exp_ty $
696                               mapM lookup_info (collectPatBinders pat)
697
698                 -- After typechecking the pattern, look up the binder
699                 -- names, which the pattern has brought into scope.
700               lookup_info :: Name -> TcM MonoBindInfo
701               lookup_info name = do { mono_id <- tcLookupId name
702                                     ; return (name, sig_fn name, mono_id) }
703
704         ; ((pat', infos), pat_ty) <- addErrCtxt (patMonoBindsCtxt pat grhss) $
705                                      tcInfer tc_pat
706
707         ; return (TcPatBind infos pat' grhss pat_ty) }
708
709 tcLhs _ _ other_bind = pprPanic "tcLhs" (ppr other_bind)
710         -- AbsBind, VarBind impossible
711
712 -------------------
713 tcRhs :: TcMonoBind -> TcM (HsBind TcId)
714 -- When we are doing pattern bindings, or multiple function bindings at a time
715 -- we *don't* bring any scoped type variables into scope
716 -- Wny not?  They are not completely rigid.
717 -- That's why we have the special case for a single FunBind in tcMonoBinds
718 tcRhs (TcFunBind (_,_,mono_id) loc inf matches)
719   = do  { (co_fn, matches') <- tcMatchesFun (idName mono_id) inf 
720                                             matches (idType mono_id)
721         ; return (FunBind { fun_id = L loc mono_id, fun_infix = inf
722                           , fun_matches = matches'
723                           , fun_co_fn = co_fn 
724                           , bind_fvs = placeHolderNames, fun_tick = Nothing }) }
725
726 tcRhs (TcPatBind _ pat' grhss pat_ty)
727   = do  { grhss' <- addErrCtxt (patMonoBindsCtxt pat' grhss) $
728                     tcGRHSsPat grhss pat_ty
729         ; return (PatBind { pat_lhs = pat', pat_rhs = grhss', pat_rhs_ty = pat_ty 
730                           , bind_fvs = placeHolderNames }) }
731
732
733 ---------------------
734 getMonoBindInfo :: [Located TcMonoBind] -> [MonoBindInfo]
735 getMonoBindInfo tc_binds
736   = foldr (get_info . unLoc) [] tc_binds
737   where
738     get_info (TcFunBind info _ _ _)  rest = info : rest
739     get_info (TcPatBind infos _ _ _) rest = infos ++ rest
740 \end{code}
741
742
743 %************************************************************************
744 %*                                                                      *
745                 Generalisation
746 %*                                                                      *
747 %************************************************************************
748
749 unifyCtxts checks that all the signature contexts are the same
750 The type signatures on a mutually-recursive group of definitions
751 must all have the same context (or none).
752
753 The trick here is that all the signatures should have the same
754 context, and we want to share type variables for that context, so that
755 all the right hand sides agree a common vocabulary for their type
756 constraints
757
758 We unify them because, with polymorphic recursion, their types
759 might not otherwise be related.  This is a rather subtle issue.
760
761 \begin{code}
762 unifyCtxts :: [TcSigInfo] -> TcM ()
763 -- Post-condition: the returned Insts are full zonked
764 unifyCtxts [] = return ()
765 unifyCtxts (sig1 : sigs)
766   = do  { traceTc "unifyCtxts" (ppr (sig1 : sigs))
767         ; mapM_ unify_ctxt sigs }
768   where
769     theta1 = sig_theta sig1
770     unify_ctxt :: TcSigInfo -> TcM ()
771     unify_ctxt sig@(TcSigInfo { sig_theta = theta })
772         = setSrcSpan (sig_loc sig)                      $
773           addErrCtxt (sigContextsCtxt sig1 sig)         $
774           do { cois <- unifyTheta theta1 theta
775              ; -- Check whether all coercions are identity coercions
776                -- That can happen if we have, say
777                --         f :: C [a]   => ...
778                --         g :: C (F a) => ...
779                -- where F is a type function and (F a ~ [a])
780                -- Then unification might succeed with a coercion.  But it's much
781                -- much simpler to require that such signatures have identical contexts
782                checkTc (all isIdentityCoI cois)
783                        (ptext (sLit "Mutually dependent functions have syntactically distinct contexts"))
784              }
785 \end{code}
786
787
788 @getTyVarsToGen@ decides what type variables to generalise over.
789
790 For a "restricted group" -- see the monomorphism restriction
791 for a definition -- we bind no dictionaries, and
792 remove from tyvars_to_gen any constrained type variables
793
794 *Don't* simplify dicts at this point, because we aren't going
795 to generalise over these dicts.  By the time we do simplify them
796 we may well know more.  For example (this actually came up)
797         f :: Array Int Int
798         f x = array ... xs where xs = [1,2,3,4,5]
799 We don't want to generate lots of (fromInt Int 1), (fromInt Int 2)
800 stuff.  If we simplify only at the f-binding (not the xs-binding)
801 we'll know that the literals are all Ints, and we can just produce
802 Int literals!
803
804 Find all the type variables involved in overloading, the
805 "constrained_tyvars".  These are the ones we *aren't* going to
806 generalise.  We must be careful about doing this:
807
808  (a) If we fail to generalise a tyvar which is not actually
809         constrained, then it will never, ever get bound, and lands
810         up printed out in interface files!  Notorious example:
811                 instance Eq a => Eq (Foo a b) where ..
812         Here, b is not constrained, even though it looks as if it is.
813         Another, more common, example is when there's a Method inst in
814         the LIE, whose type might very well involve non-overloaded
815         type variables.
816   [NOTE: Jan 2001: I don't understand the problem here so I'm doing 
817         the simple thing instead]
818
819  (b) On the other hand, we mustn't generalise tyvars which are constrained,
820         because we are going to pass on out the unmodified LIE, with those
821         tyvars in it.  They won't be in scope if we've generalised them.
822
823 So we are careful, and do a complete simplification just to find the
824 constrained tyvars. We don't use any of the results, except to
825 find which tyvars are constrained.
826
827 Note [Polymorphic recursion]
828 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
829 The game plan for polymorphic recursion in the code above is 
830
831         * Bind any variable for which we have a type signature
832           to an Id with a polymorphic type.  Then when type-checking 
833           the RHSs we'll make a full polymorphic call.
834
835 This fine, but if you aren't a bit careful you end up with a horrendous
836 amount of partial application and (worse) a huge space leak. For example:
837
838         f :: Eq a => [a] -> [a]
839         f xs = ...f...
840
841 If we don't take care, after typechecking we get
842
843         f = /\a -> \d::Eq a -> let f' = f a d
844                                in
845                                \ys:[a] -> ...f'...
846
847 Notice the the stupid construction of (f a d), which is of course
848 identical to the function we're executing.  In this case, the
849 polymorphic recursion isn't being used (but that's a very common case).
850 This can lead to a massive space leak, from the following top-level defn
851 (post-typechecking)
852
853         ff :: [Int] -> [Int]
854         ff = f Int dEqInt
855
856 Now (f dEqInt) evaluates to a lambda that has f' as a free variable; but
857 f' is another thunk which evaluates to the same thing... and you end
858 up with a chain of identical values all hung onto by the CAF ff.
859
860         ff = f Int dEqInt
861
862            = let f' = f Int dEqInt in \ys. ...f'...
863
864            = let f' = let f' = f Int dEqInt in \ys. ...f'...
865                       in \ys. ...f'...
866
867 Etc.
868
869 NOTE: a bit of arity anaysis would push the (f a d) inside the (\ys...),
870 which would make the space leak go away in this case
871
872 Solution: when typechecking the RHSs we always have in hand the
873 *monomorphic* Ids for each binding.  So we just need to make sure that
874 if (Method f a d) shows up in the constraints emerging from (...f...)
875 we just use the monomorphic Id.  We achieve this by adding monomorphic Ids
876 to the "givens" when simplifying constraints.  That's what the "lies_avail"
877 is doing.
878
879 Then we get
880
881         f = /\a -> \d::Eq a -> letrec
882                                  fm = \ys:[a] -> ...fm...
883                                in
884                                fm
885
886 %************************************************************************
887 %*                                                                      *
888                 Signatures
889 %*                                                                      *
890 %************************************************************************
891
892 Type signatures are tricky.  See Note [Signature skolems] in TcType
893
894 @tcSigs@ checks the signatures for validity, and returns a list of
895 {\em freshly-instantiated} signatures.  That is, the types are already
896 split up, and have fresh type variables installed.  All non-type-signature
897 "RenamedSigs" are ignored.
898
899 The @TcSigInfo@ contains @TcTypes@ because they are unified with
900 the variable's type, and after that checked to see whether they've
901 been instantiated.
902
903 Note [Scoped tyvars]
904 ~~~~~~~~~~~~~~~~~~~~
905 The -XScopedTypeVariables flag brings lexically-scoped type variables
906 into scope for any explicitly forall-quantified type variables:
907         f :: forall a. a -> a
908         f x = e
909 Then 'a' is in scope inside 'e'.
910
911 However, we do *not* support this 
912   - For pattern bindings e.g
913         f :: forall a. a->a
914         (f,g) = e
915
916   - For multiple function bindings, unless Opt_RelaxedPolyRec is on
917         f :: forall a. a -> a
918         f = g
919         g :: forall b. b -> b
920         g = ...f...
921     Reason: we use mutable variables for 'a' and 'b', since they may
922     unify to each other, and that means the scoped type variable would
923     not stand for a completely rigid variable.
924
925     Currently, we simply make Opt_ScopedTypeVariables imply Opt_RelaxedPolyRec
926
927
928 Note [More instantiated than scoped]
929 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
930 There may be more instantiated type variables than lexically-scoped 
931 ones.  For example:
932         type T a = forall b. b -> (a,b)
933         f :: forall c. T c
934 Here, the signature for f will have one scoped type variable, c,
935 but two instantiated type variables, c' and b'.  
936
937 We assume that the scoped ones are at the *front* of sig_tvs,
938 and remember the names from the original HsForAllTy in the TcSigFun.
939
940 Note [Signature skolems]
941 ~~~~~~~~~~~~~~~~~~~~~~~~
942 When instantiating a type signature, we do so with either skolems or
943 SigTv meta-type variables depending on the use_skols boolean.  This
944 variable is set True when we are typechecking a single function
945 binding; and False for pattern bindings and a group of several
946 function bindings.
947
948 Reason: in the latter cases, the "skolems" can be unified together, 
949         so they aren't properly rigid in the type-refinement sense.
950 NB: unless we are doing H98, each function with a sig will be done
951     separately, even if it's mutually recursive, so use_skols will be True
952
953
954 Note [Only scoped tyvars are in the TyVarEnv]
955 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
956 We are careful to keep only the *lexically scoped* type variables in
957 the type environment.  Why?  After all, the renamer has ensured
958 that only legal occurrences occur, so we could put all type variables
959 into the type env.
960
961 But we want to check that two distinct lexically scoped type variables
962 do not map to the same internal type variable.  So we need to know which
963 the lexically-scoped ones are... and at the moment we do that by putting
964 only the lexically scoped ones into the environment.
965
966 Note [Instantiate sig with fresh variables]
967 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
968 It's vital to instantiate a type signature with fresh variables.
969 For example:
970       type T = forall a. [a] -> [a]
971       f :: T; 
972       f = g where { g :: T; g = <rhs> }
973
974  We must not use the same 'a' from the defn of T at both places!!
975 (Instantiation is only necessary because of type synonyms.  Otherwise,
976 it's all cool; each signature has distinct type variables from the renamer.)
977
978 \begin{code}
979 type SigFun = Name -> Maybe ([Name], SrcSpan)
980          -- Maps a let-binder to the list of
981          -- type variables brought into scope
982          -- by its type signature, plus location
983          -- Nothing => no type signature
984
985 mkSigFun :: [LSig Name] -> SigFun
986 -- Search for a particular type signature
987 -- Precondition: the sigs are all type sigs
988 -- Precondition: no duplicates
989 mkSigFun sigs = lookupNameEnv env
990   where
991     env = mkNameEnv (mapCatMaybes mk_pair sigs)
992     mk_pair (L loc (TypeSig (L _ name) lhs_ty)) = Just (name, (hsExplicitTvs lhs_ty, loc))
993     mk_pair (L loc (IdSig id))                  = Just (idName id, ([], loc))
994     mk_pair _                                   = Nothing    
995         -- The scoped names are the ones explicitly mentioned
996         -- in the HsForAll.  (There may be more in sigma_ty, because
997         -- of nested type synonyms.  See Note [More instantiated than scoped].)
998         -- See Note [Only scoped tyvars are in the TyVarEnv]
999 \end{code}
1000
1001 \begin{code}
1002 tcTySig :: LSig Name -> TcM TcId
1003 tcTySig (L span (TypeSig (L _ name) ty))
1004   = setSrcSpan span             $
1005     do  { sigma_ty <- tcHsSigType (FunSigCtxt name) ty
1006         ; return (mkLocalId name sigma_ty) }
1007 tcTySig (L _ (IdSig id))
1008   = return id
1009 tcTySig s = pprPanic "tcTySig" (ppr s)
1010
1011 -------------------
1012 tcInstSigs :: SigFun -> [Name] -> TcM TcSigFun
1013 tcInstSigs sig_fn bndrs
1014   = do { prs <- mapMaybeM (tcInstSig sig_fn use_skols) bndrs
1015        ; return (lookupNameEnv (mkNameEnv prs)) }
1016   where
1017     use_skols = isSingleton bndrs       -- See Note [Signature skolems]
1018
1019 tcInstSig :: SigFun -> Bool -> Name -> TcM (Maybe (Name, TcSigInfo))
1020 -- For use_skols :: Bool see Note [Signature skolems]
1021 --
1022 -- We must instantiate with fresh uniques, 
1023 -- (see Note [Instantiate sig with fresh variables])
1024 -- although we keep the same print-name.
1025
1026 tcInstSig sig_fn use_skols name
1027   | Just (scoped_tvs, loc) <- sig_fn name
1028   = do  { poly_id <- tcLookupId name    -- Cannot fail; the poly ids are put into 
1029                                         -- scope when starting the binding group
1030         ; (tvs, theta, tau) <- tcInstSigType use_skols name (idType poly_id)
1031         ; let sig = TcSigInfo { sig_id = poly_id
1032                               , sig_scoped = scoped_tvs
1033                               , sig_tvs = tvs, sig_theta = theta, sig_tau = tau
1034                               , sig_loc = loc }
1035         ; return (Just (name, sig)) } 
1036   | otherwise
1037   = return Nothing
1038
1039 -------------------------------
1040 data GeneralisationPlan 
1041   = NoGen               -- No generalisation, no AbsBinds
1042   | InferGen Bool       -- Implicit generalisation; there is an AbsBinds
1043                         --   True <=> apply the MR; generalise only unconstrained type vars
1044   | CheckGen TcSigInfo  -- Explicit generalisation; there is an AbsBinds
1045
1046 -- A consequence of the no-AbsBinds choice (NoGen) is that there is
1047 -- no "polymorphic Id" and "monmomorphic Id"; there is just the one
1048
1049 instance Outputable GeneralisationPlan where
1050   ppr NoGen        = ptext (sLit "NoGen")
1051   ppr (InferGen b) = ptext (sLit "InferGen") <+> ppr b
1052   ppr (CheckGen s) = ptext (sLit "CheckGen") <+> ppr s
1053
1054 decideGeneralisationPlan 
1055    :: DynFlags -> TopLevelFlag -> [Name] -> [LHsBind Name] -> TcSigFun -> GeneralisationPlan
1056 decideGeneralisationPlan dflags top_lvl _bndrs binds sig_fn
1057   | mono_pat_binds                         = NoGen
1058   | Just sig <- one_funbind_with_sig binds = if null (sig_tvs sig) && null (sig_theta sig)
1059                                              then NoGen       -- Optimise common case
1060                                              else CheckGen sig
1061   | (xopt Opt_MonoLocalBinds dflags 
1062       && isNotTopLevel top_lvl)            = NoGen
1063   | otherwise                              = InferGen mono_restriction
1064
1065   where
1066     mono_pat_binds = xopt Opt_MonoPatBinds dflags 
1067                   && any (is_pat_bind . unLoc) binds
1068
1069     mono_restriction = xopt Opt_MonomorphismRestriction dflags 
1070                     && any (restricted . unLoc) binds
1071
1072     no_sig n = isNothing (sig_fn n)
1073
1074     -- With OutsideIn, all nested bindings are monomorphic
1075     -- except a single function binding with a signature
1076     one_funbind_with_sig [L _ FunBind { fun_id = v }] = sig_fn (unLoc v)
1077     one_funbind_with_sig _                            = Nothing
1078
1079     -- The Haskell 98 monomorphism resetriction
1080     restricted (PatBind {})                              = True
1081     restricted (VarBind { var_id = v })                  = no_sig v
1082     restricted (FunBind { fun_id = v, fun_matches = m }) = restricted_match m
1083                                                            && no_sig (unLoc v)
1084     restricted (AbsBinds {}) = panic "isRestrictedGroup/unrestricted AbsBinds"
1085
1086     restricted_match (MatchGroup (L _ (Match [] _ _) : _) _) = True
1087     restricted_match _                                       = False
1088         -- No args => like a pattern binding
1089         -- Some args => a function binding
1090
1091     is_pat_bind (PatBind {}) = True
1092     is_pat_bind _            = False
1093
1094 -------------------
1095 checkStrictBinds :: TopLevelFlag -> RecFlag
1096                  -> [LHsBind Name] -> [Id]
1097                  -> TcM ()
1098 -- Check that non-overloaded unlifted bindings are
1099 --      a) non-recursive,
1100 --      b) not top level, 
1101 --      c) not a multiple-binding group (more or less implied by (a))
1102
1103 checkStrictBinds top_lvl rec_group binds poly_ids
1104   | unlifted || bang_pat
1105   = do  { checkTc (isNotTopLevel top_lvl)
1106                   (strictBindErr "Top-level" unlifted binds)
1107         ; checkTc (isNonRec rec_group)
1108                   (strictBindErr "Recursive" unlifted binds)
1109         ; checkTc (isSingleton binds)
1110                   (strictBindErr "Multiple" unlifted binds) 
1111         -- This should be a checkTc, not a warnTc, but as of GHC 6.11
1112         -- the versions of alex and happy available have non-conforming
1113         -- templates, so the GHC build fails if it's an error:
1114         ; warnUnlifted <- doptM Opt_WarnLazyUnliftedBindings
1115         ; warnTc (warnUnlifted && not bang_pat)
1116                  (unliftedMustBeBang binds) }
1117   | otherwise
1118   = return ()
1119   where
1120     unlifted = any is_unlifted poly_ids
1121     bang_pat = any (isBangHsBind . unLoc) binds
1122     is_unlifted id = case tcSplitForAllTys (idType id) of
1123                        (_, rho) -> isUnLiftedType rho
1124
1125 unliftedMustBeBang :: [LHsBind Name] -> SDoc
1126 unliftedMustBeBang binds
1127   = hang (text "Bindings containing unlifted types should use an outermost bang pattern:")
1128        2 (pprBindList binds)
1129
1130 strictBindErr :: String -> Bool -> [LHsBind Name] -> SDoc
1131 strictBindErr flavour unlifted binds
1132   = hang (text flavour <+> msg <+> ptext (sLit "aren't allowed:")) 
1133        2 (pprBindList binds)
1134   where
1135     msg | unlifted  = ptext (sLit "bindings for unlifted types")
1136         | otherwise = ptext (sLit "bang-pattern bindings")
1137
1138 pprBindList :: [LHsBind Name] -> SDoc
1139 pprBindList binds = vcat (map ppr binds)
1140 \end{code}
1141
1142
1143 %************************************************************************
1144 %*                                                                      *
1145 \subsection[TcBinds-errors]{Error contexts and messages}
1146 %*                                                                      *
1147 %************************************************************************
1148
1149
1150 \begin{code}
1151 -- This one is called on LHS, when pat and grhss are both Name 
1152 -- and on RHS, when pat is TcId and grhss is still Name
1153 patMonoBindsCtxt :: OutputableBndr id => LPat id -> GRHSs Name -> SDoc
1154 patMonoBindsCtxt pat grhss
1155   = hang (ptext (sLit "In a pattern binding:")) 2 (pprPatBind pat grhss)
1156
1157 -----------------------------------------------
1158 sigContextsCtxt :: TcSigInfo -> TcSigInfo -> SDoc
1159 sigContextsCtxt sig1 sig2
1160   = vcat [ptext (sLit "When matching the contexts of the signatures for"), 
1161           nest 2 (vcat [ppr id1 <+> dcolon <+> ppr (idType id1),
1162                         ppr id2 <+> dcolon <+> ppr (idType id2)]),
1163           ptext (sLit "The signature contexts in a mutually recursive group should all be identical")]
1164   where
1165     id1 = sig_id sig1
1166     id2 = sig_id sig2
1167 \end{code}