[project @ 2003-02-18 15:54:19 by simonpj]
[ghc-hetmet.git] / ghc / compiler / typecheck / TcExpr.lhs
1 %
2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
3 %
4 \section[TcExpr]{Typecheck an expression}
5
6 \begin{code}
7 module TcExpr ( tcExpr, tcExpr_id, tcMonoExpr ) where
8
9 #include "HsVersions.h"
10
11 #ifdef GHCI     /* Only if bootstrapped */
12 import {-# SOURCE #-}   TcSplice( tcSpliceExpr, tcBracket )
13 import HsSyn            ( HsReify(..), ReifyFlavour(..) )
14 import TcType           ( isTauTy )
15 import TcEnv            ( bracketOK, tcMetaTy, checkWellStaged, metaLevel )
16 import TcSimplify       ( tcSimplifyBracket )
17 import Name             ( isExternalName )
18 import qualified DsMeta
19 #endif
20
21 import HsSyn            ( HsExpr(..), HsLit(..), ArithSeqInfo(..), recBindFields )
22 import RnHsSyn          ( RenamedHsExpr, RenamedRecordBinds )
23 import TcHsSyn          ( TcExpr, TcRecordBinds, hsLitType, mkHsDictApp, mkHsTyApp, mkHsLet )
24 import TcRnMonad
25 import TcUnify          ( tcSubExp, tcGen, (<$>),
26                           unifyTauTy, unifyFunTy, unifyListTy, unifyPArrTy,
27                           unifyTupleTy )
28 import BasicTypes       ( isMarkedStrict )
29 import Inst             ( InstOrigin(..), 
30                           newOverloadedLit, newMethodFromName, newIPDict,
31                           newDicts, newMethodWithGivenTy, 
32                           instToId, tcInstCall, tcInstDataCon
33                         )
34 import TcBinds          ( tcBindsAndThen )
35 import TcEnv            ( tcLookupClass, tcLookupGlobal_maybe, tcLookupIdLvl,
36                           tcLookupTyCon, tcLookupDataCon, tcLookupId
37                         )
38 import TcMatches        ( tcMatchesCase, tcMatchLambda, tcDoStmts )
39 import TcMonoType       ( tcHsSigType, UserTypeCtxt(..) )
40 import TcPat            ( badFieldCon )
41 import TcMType          ( tcInstTyVars, tcInstType, newHoleTyVarTy, zapToType,
42                           newTyVarTy, newTyVarTys, zonkTcType, readHoleResult )
43 import TcType           ( TcType, TcSigmaType, TcRhoType, TyVarDetails(VanillaTv),
44                           tcSplitFunTys, tcSplitTyConApp, mkTyVarTys,
45                           isSigmaTy, mkFunTy, mkFunTys,
46                           mkTyConApp, mkClassPred, tcFunArgTy,
47                           tyVarsOfTypes, isLinearPred,
48                           liftedTypeKind, openTypeKind, 
49                           tcSplitSigmaTy, tcTyConAppTyCon,
50                           tidyOpenType
51                         )
52 import FieldLabel       ( FieldLabel, fieldLabelName, fieldLabelType, fieldLabelTyCon )
53 import Id               ( Id, idType, recordSelectorFieldLabel, isRecordSelector )
54 import DataCon          ( DataCon, dataConFieldLabels, dataConSig, dataConStrictMarks, dataConWrapId )
55 import Name             ( Name )
56 import TyCon            ( TyCon, tyConTyVars, tyConTheta, isAlgTyCon, tyConDataCons, isClassTyCon )
57 import Subst            ( mkTopTyVarSubst, substTheta, substTy )
58 import VarSet           ( emptyVarSet, elemVarSet )
59 import TysWiredIn       ( boolTy )
60 import PrelNames        ( cCallableClassName, cReturnableClassName, 
61                           enumFromName, enumFromThenName, 
62                           enumFromToName, enumFromThenToName,
63                           enumFromToPName, enumFromThenToPName,
64                           ioTyConName
65                         )
66 import ListSetOps       ( minusList )
67 import CmdLineOpts
68 import HscTypes         ( TyThing(..) )
69
70 import Util
71 import Outputable
72 import FastString
73 \end{code}
74
75 %************************************************************************
76 %*                                                                      *
77 \subsection{Main wrappers}
78 %*                                                                      *
79 %************************************************************************
80
81 \begin{code}
82 tcExpr :: RenamedHsExpr         -- Expession to type check
83         -> TcSigmaType          -- Expected type (could be a polytpye)
84         -> TcM TcExpr           -- Generalised expr with expected type
85
86 tcExpr expr expected_ty 
87   = traceTc (text "tcExpr" <+> (ppr expected_ty $$ ppr expr)) `thenM_`
88     tc_expr' expr expected_ty
89
90 tc_expr' expr expected_ty
91   | not (isSigmaTy expected_ty)  -- Monomorphic case
92   = tcMonoExpr expr expected_ty
93
94   | otherwise
95   = tcGen expected_ty emptyVarSet (
96         tcMonoExpr expr
97     )                           `thenM` \ (gen_fn, expr') ->
98     returnM (gen_fn <$> expr')
99 \end{code}
100
101
102 %************************************************************************
103 %*                                                                      *
104 \subsection{The TAUT rules for variables}
105 %*                                                                      *
106 %************************************************************************
107
108 \begin{code}
109 tcMonoExpr :: RenamedHsExpr             -- Expession to type check
110            -> TcRhoType                 -- Expected type (could be a type variable)
111                                         -- Definitely no foralls at the top
112                                         -- Can be a 'hole'.
113            -> TcM TcExpr
114
115 tcMonoExpr (HsVar name) res_ty
116   = tcId name                   `thenM` \ (expr', id_ty) ->
117     tcSubExp res_ty id_ty       `thenM` \ co_fn ->
118     returnM (co_fn <$> expr')
119
120 tcMonoExpr (HsIPVar ip) res_ty
121   =     -- Implicit parameters must have a *tau-type* not a 
122         -- type scheme.  We enforce this by creating a fresh
123         -- type variable as its type.  (Because res_ty may not
124         -- be a tau-type.)
125     newTyVarTy openTypeKind             `thenM` \ ip_ty ->
126     newIPDict (IPOcc ip) ip ip_ty       `thenM` \ (ip', inst) ->
127     extendLIE inst                      `thenM_`
128     tcSubExp res_ty ip_ty               `thenM` \ co_fn ->
129     returnM (co_fn <$> HsIPVar ip')
130 \end{code}
131
132
133 %************************************************************************
134 %*                                                                      *
135 \subsection{Expressions type signatures}
136 %*                                                                      *
137 %************************************************************************
138
139 \begin{code}
140 tcMonoExpr in_expr@(ExprWithTySig expr poly_ty) res_ty
141  = addErrCtxt (exprSigCtxt in_expr)     $
142    tcHsSigType ExprSigCtxt poly_ty      `thenM` \ sig_tc_ty ->
143    tcExpr expr sig_tc_ty                `thenM` \ expr' ->
144
145         -- Must instantiate the outer for-alls of sig_tc_ty
146         -- else we risk instantiating a ? res_ty to a forall-type
147         -- which breaks the invariant that tcMonoExpr only returns phi-types
148    tcInstCall SignatureOrigin sig_tc_ty `thenM` \ (inst_fn, inst_sig_ty) ->
149    tcSubExp res_ty inst_sig_ty          `thenM` \ co_fn ->
150
151    returnM (co_fn <$> inst_fn expr')
152
153 tcMonoExpr (HsType ty) res_ty
154   = failWithTc (text "Can't handle type argument:" <+> ppr ty)
155         -- This is the syntax for type applications that I was planning
156         -- but there are difficulties (e.g. what order for type args)
157         -- so it's not enabled yet.
158         -- Can't eliminate it altogether from the parser, because the
159         -- same parser parses *patterns*.
160 \end{code}
161
162
163 %************************************************************************
164 %*                                                                      *
165 \subsection{Other expression forms}
166 %*                                                                      *
167 %************************************************************************
168
169 \begin{code}
170 tcMonoExpr (HsLit lit)     res_ty  = tcLit lit res_ty
171 tcMonoExpr (HsOverLit lit) res_ty  = newOverloadedLit (LiteralOrigin lit) lit res_ty
172 tcMonoExpr (HsPar expr)    res_ty  = tcMonoExpr expr res_ty     `thenM` \ expr' -> 
173                                      returnM (HsPar expr')
174 tcMonoExpr (HsSCC lbl expr) res_ty = tcMonoExpr expr res_ty     `thenM` \ expr' ->
175                                      returnM (HsSCC lbl expr')
176
177
178 tcMonoExpr (NegApp expr neg_name) res_ty
179   = tcMonoExpr (HsApp (HsVar neg_name) expr) res_ty
180         -- ToDo: use tcSyntaxName
181
182 tcMonoExpr (HsLam match) res_ty
183   = tcMatchLambda match res_ty          `thenM` \ match' ->
184     returnM (HsLam match')
185
186 tcMonoExpr (HsApp e1 e2) res_ty 
187   = tcApp e1 [e2] res_ty
188 \end{code}
189
190 Note that the operators in sections are expected to be binary, and
191 a type error will occur if they aren't.
192
193 \begin{code}
194 -- Left sections, equivalent to
195 --      \ x -> e op x,
196 -- or
197 --      \ x -> op e x,
198 -- or just
199 --      op e
200
201 tcMonoExpr in_expr@(SectionL arg1 op) res_ty
202   = tcExpr_id op                                `thenM` \ (op', op_ty) ->
203     split_fun_ty op_ty 2 {- two args -}         `thenM` \ ([arg1_ty, arg2_ty], op_res_ty) ->
204     tcArg op (arg1, arg1_ty, 1)                 `thenM` \ arg1' ->
205     addErrCtxt (exprCtxt in_expr)               $
206     tcSubExp res_ty (mkFunTy arg2_ty op_res_ty) `thenM` \ co_fn ->
207     returnM (co_fn <$> SectionL arg1' op')
208
209 -- Right sections, equivalent to \ x -> x op expr, or
210 --      \ x -> op x expr
211
212 tcMonoExpr in_expr@(SectionR op arg2) res_ty
213   = tcExpr_id op                                `thenM` \ (op', op_ty) ->
214     split_fun_ty op_ty 2 {- two args -}         `thenM` \ ([arg1_ty, arg2_ty], op_res_ty) ->
215     tcArg op (arg2, arg2_ty, 2)                 `thenM` \ arg2' ->
216     addErrCtxt (exprCtxt in_expr)               $
217     tcSubExp res_ty (mkFunTy arg1_ty op_res_ty) `thenM` \ co_fn ->
218     returnM (co_fn <$> SectionR op' arg2')
219
220 -- equivalent to (op e1) e2:
221
222 tcMonoExpr in_expr@(OpApp arg1 op fix arg2) res_ty
223   = tcExpr_id op                                `thenM` \ (op', op_ty) ->
224     split_fun_ty op_ty 2 {- two args -}         `thenM` \ ([arg1_ty, arg2_ty], op_res_ty) ->
225     tcArg op (arg1, arg1_ty, 1)                 `thenM` \ arg1' ->
226     tcArg op (arg2, arg2_ty, 2)                 `thenM` \ arg2' ->
227     addErrCtxt (exprCtxt in_expr)               $
228     tcSubExp res_ty op_res_ty                   `thenM` \ co_fn ->
229     returnM (OpApp arg1' op' fix arg2')
230 \end{code}
231
232 \begin{code}
233 tcMonoExpr (HsLet binds expr) res_ty
234   = tcBindsAndThen
235         HsLet
236         binds                   -- Bindings to check
237         (tcMonoExpr expr res_ty)
238
239 tcMonoExpr in_expr@(HsCase scrut matches src_loc) res_ty
240   = addSrcLoc src_loc                   $
241     addErrCtxt (caseCtxt in_expr)       $
242
243         -- Typecheck the case alternatives first.
244         -- The case patterns tend to give good type info to use
245         -- when typechecking the scrutinee.  For example
246         --      case (map f) of
247         --        (x:xs) -> ...
248         -- will report that map is applied to too few arguments
249         --
250         -- Not only that, but it's better to check the matches on their
251         -- own, so that we get the expected results for scoped type variables.
252         --      f x = case x of
253         --              (p::a, q::b) -> (q,p)
254         -- The above should work: the match (p,q) -> (q,p) is polymorphic as
255         -- claimed by the pattern signatures.  But if we typechecked the
256         -- match with x in scope and x's type as the expected type, we'd be hosed.
257
258     tcMatchesCase matches res_ty        `thenM`    \ (scrut_ty, matches') ->
259
260     addErrCtxt (caseScrutCtxt scrut)    (
261       tcMonoExpr scrut scrut_ty
262     )                                   `thenM`    \ scrut' ->
263
264     returnM (HsCase scrut' matches' src_loc)
265
266 tcMonoExpr (HsIf pred b1 b2 src_loc) res_ty
267   = addSrcLoc src_loc   $
268     addErrCtxt (predCtxt pred) (
269     tcMonoExpr pred boolTy      )       `thenM`    \ pred' ->
270
271     zapToType res_ty                    `thenM`    \ res_ty' ->
272         -- C.f. the call to zapToType in TcMatches.tcMatches
273
274     tcMonoExpr b1 res_ty'               `thenM`    \ b1' ->
275     tcMonoExpr b2 res_ty'               `thenM`    \ b2' ->
276     returnM (HsIf pred' b1' b2' src_loc)
277
278 tcMonoExpr (HsDo do_or_lc stmts method_names _ src_loc) res_ty
279   = addSrcLoc src_loc           $
280     tcDoStmts do_or_lc stmts method_names res_ty        `thenM` \ (binds, stmts', methods') ->
281     returnM (mkHsLet binds (HsDo do_or_lc stmts' methods' res_ty src_loc))
282
283 tcMonoExpr in_expr@(ExplicitList _ exprs) res_ty        -- Non-empty list
284   = unifyListTy res_ty                `thenM` \ elt_ty ->  
285     mappM (tc_elt elt_ty) exprs       `thenM` \ exprs' ->
286     returnM (ExplicitList elt_ty exprs')
287   where
288     tc_elt elt_ty expr
289       = addErrCtxt (listCtxt expr) $
290         tcMonoExpr expr elt_ty
291
292 tcMonoExpr in_expr@(ExplicitPArr _ exprs) res_ty        -- maybe empty
293   = unifyPArrTy res_ty                `thenM` \ elt_ty ->  
294     mappM (tc_elt elt_ty) exprs       `thenM` \ exprs' ->
295     returnM (ExplicitPArr elt_ty exprs')
296   where
297     tc_elt elt_ty expr
298       = addErrCtxt (parrCtxt expr) $
299         tcMonoExpr expr elt_ty
300
301 tcMonoExpr (ExplicitTuple exprs boxity) res_ty
302   = unifyTupleTy boxity (length exprs) res_ty   `thenM` \ arg_tys ->
303     tcMonoExprs exprs arg_tys                   `thenM` \ exprs' ->
304     returnM (ExplicitTuple exprs' boxity)
305 \end{code}
306
307
308 %************************************************************************
309 %*                                                                      *
310                 Foreign calls
311 %*                                                                      *
312 %************************************************************************
313
314 The interesting thing about @ccall@ is that it is just a template
315 which we instantiate by filling in details about the types of its
316 argument and result (ie minimal typechecking is performed).  So, the
317 basic story is that we allocate a load of type variables (to hold the
318 arg/result types); unify them with the args/result; and store them for
319 later use.
320
321 \begin{code}
322 tcMonoExpr e0@(HsCCall lbl args may_gc is_casm ignored_fake_result_ty) res_ty
323
324   = getDOpts                            `thenM` \ dflags ->
325
326     checkTc (not (is_casm && dopt_HscLang dflags /= HscC)) 
327         (vcat [text "_casm_ is only supported when compiling via C (-fvia-C).",
328                text "Either compile with -fvia-C, or, better, rewrite your code",
329                text "to use the foreign function interface.  _casm_s are deprecated",
330                text "and support for them may one day disappear."])
331                                         `thenM_`
332
333     -- Get the callable and returnable classes.
334     tcLookupClass cCallableClassName    `thenM` \ cCallableClass ->
335     tcLookupClass cReturnableClassName  `thenM` \ cReturnableClass ->
336     tcLookupTyCon ioTyConName           `thenM` \ ioTyCon ->
337     let
338         new_arg_dict (arg, arg_ty)
339           = newDicts (CCallOrigin (unpackFS lbl) (Just arg))
340                      [mkClassPred cCallableClass [arg_ty]]      `thenM` \ arg_dicts ->
341             returnM arg_dicts   -- Actually a singleton bag
342
343         result_origin = CCallOrigin (unpackFS lbl) Nothing {- Not an arg -}
344     in
345
346         -- Arguments
347     let tv_idxs | null args  = []
348                 | otherwise  = [1..length args]
349     in
350     newTyVarTys (length tv_idxs) openTypeKind           `thenM` \ arg_tys ->
351     tcMonoExprs args arg_tys                            `thenM` \ args' ->
352
353         -- The argument types can be unlifted or lifted; the result
354         -- type must, however, be lifted since it's an argument to the IO
355         -- type constructor.
356     newTyVarTy liftedTypeKind           `thenM` \ result_ty ->
357     let
358         io_result_ty = mkTyConApp ioTyCon [result_ty]
359     in
360     unifyTauTy res_ty io_result_ty              `thenM_`
361
362         -- Construct the extra insts, which encode the
363         -- constraints on the argument and result types.
364     mappM new_arg_dict (zipEqual "tcMonoExpr:CCall" args arg_tys)       `thenM` \ ccarg_dicts_s ->
365     newDicts result_origin [mkClassPred cReturnableClass [result_ty]]   `thenM` \ ccres_dict ->
366     extendLIEs (ccres_dict ++ concat ccarg_dicts_s)                     `thenM_`
367     returnM (HsCCall lbl args' may_gc is_casm io_result_ty)
368 \end{code}
369
370
371 %************************************************************************
372 %*                                                                      *
373                 Record construction and update
374 %*                                                                      *
375 %************************************************************************
376
377 \begin{code}
378 tcMonoExpr expr@(RecordCon con_name rbinds) res_ty
379   = addErrCtxt (recordConCtxt expr)             $
380     tcId con_name                       `thenM` \ (con_expr, con_tau) ->
381     let
382         (_, record_ty)   = tcSplitFunTys con_tau
383         (tycon, ty_args) = tcSplitTyConApp record_ty
384     in
385     ASSERT( isAlgTyCon tycon )
386     unifyTauTy res_ty record_ty          `thenM_`
387
388         -- Check that the record bindings match the constructor
389         -- con_name is syntactically constrained to be a data constructor
390     tcLookupDataCon con_name    `thenM` \ data_con ->
391     let
392         bad_fields = badFields rbinds data_con
393     in
394     if notNull bad_fields then
395         mappM (addErrTc . badFieldCon data_con) bad_fields      `thenM_`
396         failM   -- Fail now, because tcRecordBinds will crash on a bad field
397     else
398
399         -- Typecheck the record bindings
400     tcRecordBinds tycon ty_args rbinds          `thenM` \ rbinds' ->
401     
402         -- Check for missing fields
403     checkMissingFields data_con rbinds          `thenM_` 
404
405     returnM (RecordConOut data_con con_expr rbinds')
406
407 -- The main complication with RecordUpd is that we need to explicitly
408 -- handle the *non-updated* fields.  Consider:
409 --
410 --      data T a b = MkT1 { fa :: a, fb :: b }
411 --                 | MkT2 { fa :: a, fc :: Int -> Int }
412 --                 | MkT3 { fd :: a }
413 --      
414 --      upd :: T a b -> c -> T a c
415 --      upd t x = t { fb = x}
416 --
417 -- The type signature on upd is correct (i.e. the result should not be (T a b))
418 -- because upd should be equivalent to:
419 --
420 --      upd t x = case t of 
421 --                      MkT1 p q -> MkT1 p x
422 --                      MkT2 a b -> MkT2 p b
423 --                      MkT3 d   -> error ...
424 --
425 -- So we need to give a completely fresh type to the result record,
426 -- and then constrain it by the fields that are *not* updated ("p" above).
427 --
428 -- Note that because MkT3 doesn't contain all the fields being updated,
429 -- its RHS is simply an error, so it doesn't impose any type constraints
430 --
431 -- All this is done in STEP 4 below.
432
433 tcMonoExpr expr@(RecordUpd record_expr rbinds) res_ty
434   = addErrCtxt (recordUpdCtxt   expr)           $
435
436         -- STEP 0
437         -- Check that the field names are really field names
438     ASSERT( notNull rbinds )
439     let 
440         field_names = recBindFields rbinds
441     in
442     mappM tcLookupGlobal_maybe field_names              `thenM` \ maybe_sel_ids ->
443     let
444         bad_guys = [ addErrTc (notSelector field_name) 
445                    | (field_name, maybe_sel_id) <- field_names `zip` maybe_sel_ids,
446                      not (is_selector maybe_sel_id)
447                    ]
448         is_selector (Just (AnId sel_id))
449            = isRecordSelector sel_id &&         -- At the moment, class ops are
450                                                 -- treated as record selectors, but
451                                                 -- we want to exclude that case here
452              not (isClassTyCon (fieldLabelTyCon (recordSelectorFieldLabel sel_id)))
453         is_selector other = False
454     in
455     checkM (null bad_guys) (sequenceM bad_guys `thenM_` failM)  `thenM_`
456     
457         -- STEP 1
458         -- Figure out the tycon and data cons from the first field name
459     let
460                 -- It's OK to use the non-tc splitters here (for a selector)
461         (Just (AnId sel_id) : _) = maybe_sel_ids
462         field_lbl    = recordSelectorFieldLabel sel_id  -- We've failed already if
463         tycon        = fieldLabelTyCon field_lbl        -- it's not a field label
464         data_cons    = tyConDataCons tycon
465         tycon_tyvars = tyConTyVars tycon                -- The data cons use the same type vars
466     in
467     tcInstTyVars VanillaTv tycon_tyvars         `thenM` \ (_, result_inst_tys, inst_env) ->
468
469         -- STEP 2
470         -- Check that at least one constructor has all the named fields
471         -- i.e. has an empty set of bad fields returned by badFields
472     checkTc (any (null . badFields rbinds) data_cons)
473             (badFieldsUpd rbinds)               `thenM_`
474
475         -- STEP 3
476         -- Typecheck the update bindings.
477         -- (Do this after checking for bad fields in case there's a field that
478         --  doesn't match the constructor.)
479     let
480         result_record_ty = mkTyConApp tycon result_inst_tys
481     in
482     unifyTauTy res_ty result_record_ty          `thenM_`
483     tcRecordBinds tycon result_inst_tys rbinds  `thenM` \ rbinds' ->
484
485         -- STEP 4
486         -- Use the un-updated fields to find a vector of booleans saying
487         -- which type arguments must be the same in updatee and result.
488         --
489         -- WARNING: this code assumes that all data_cons in a common tycon
490         -- have FieldLabels abstracted over the same tyvars.
491     let
492         upd_field_lbls      = map recordSelectorFieldLabel (recBindFields rbinds')
493         con_field_lbls_s    = map dataConFieldLabels data_cons
494
495                 -- A constructor is only relevant to this process if
496                 -- it contains all the fields that are being updated
497         relevant_field_lbls_s      = filter is_relevant con_field_lbls_s
498         is_relevant con_field_lbls = all (`elem` con_field_lbls) upd_field_lbls
499
500         non_upd_field_lbls  = concat relevant_field_lbls_s `minusList` upd_field_lbls
501         common_tyvars       = tyVarsOfTypes (map fieldLabelType non_upd_field_lbls)
502
503         mk_inst_ty (tyvar, result_inst_ty) 
504           | tyvar `elemVarSet` common_tyvars = returnM result_inst_ty   -- Same as result type
505           | otherwise                        = newTyVarTy liftedTypeKind        -- Fresh type
506     in
507     mappM mk_inst_ty (zip tycon_tyvars result_inst_tys) `thenM` \ inst_tys ->
508
509         -- STEP 5
510         -- Typecheck the expression to be updated
511     let
512         record_ty = mkTyConApp tycon inst_tys
513     in
514     tcMonoExpr record_expr record_ty            `thenM` \ record_expr' ->
515
516         -- STEP 6
517         -- Figure out the LIE we need.  We have to generate some 
518         -- dictionaries for the data type context, since we are going to
519         -- do pattern matching over the data cons.
520         --
521         -- What dictionaries do we need?  
522         -- We just take the context of the type constructor
523     let
524         theta' = substTheta inst_env (tyConTheta tycon)
525     in
526     newDicts RecordUpdOrigin theta'     `thenM` \ dicts ->
527     extendLIEs dicts                    `thenM_`
528
529         -- Phew!
530     returnM (RecordUpdOut record_expr' record_ty result_record_ty rbinds') 
531 \end{code}
532
533
534 %************************************************************************
535 %*                                                                      *
536         Arithmetic sequences                    e.g. [a,b..]
537         and their parallel-array counterparts   e.g. [: a,b.. :]
538                 
539 %*                                                                      *
540 %************************************************************************
541
542 \begin{code}
543 tcMonoExpr (ArithSeqIn seq@(From expr)) res_ty
544   = unifyListTy res_ty                          `thenM` \ elt_ty ->  
545     tcMonoExpr expr elt_ty                      `thenM` \ expr' ->
546
547     newMethodFromName (ArithSeqOrigin seq) 
548                       elt_ty enumFromName       `thenM` \ enum_from ->
549
550     returnM (ArithSeqOut (HsVar enum_from) (From expr'))
551
552 tcMonoExpr in_expr@(ArithSeqIn seq@(FromThen expr1 expr2)) res_ty
553   = addErrCtxt (arithSeqCtxt in_expr) $ 
554     unifyListTy  res_ty                                 `thenM`    \ elt_ty ->  
555     tcMonoExpr expr1 elt_ty                             `thenM`    \ expr1' ->
556     tcMonoExpr expr2 elt_ty                             `thenM`    \ expr2' ->
557     newMethodFromName (ArithSeqOrigin seq) 
558                       elt_ty enumFromThenName           `thenM` \ enum_from_then ->
559
560     returnM (ArithSeqOut (HsVar enum_from_then) (FromThen expr1' expr2'))
561
562
563 tcMonoExpr in_expr@(ArithSeqIn seq@(FromTo expr1 expr2)) res_ty
564   = addErrCtxt (arithSeqCtxt in_expr) $
565     unifyListTy  res_ty                                 `thenM`    \ elt_ty ->  
566     tcMonoExpr expr1 elt_ty                             `thenM`    \ expr1' ->
567     tcMonoExpr expr2 elt_ty                             `thenM`    \ expr2' ->
568     newMethodFromName (ArithSeqOrigin seq) 
569                       elt_ty enumFromToName             `thenM` \ enum_from_to ->
570
571     returnM (ArithSeqOut (HsVar enum_from_to) (FromTo expr1' expr2'))
572
573 tcMonoExpr in_expr@(ArithSeqIn seq@(FromThenTo expr1 expr2 expr3)) res_ty
574   = addErrCtxt  (arithSeqCtxt in_expr) $
575     unifyListTy  res_ty                                 `thenM`    \ elt_ty ->  
576     tcMonoExpr expr1 elt_ty                             `thenM`    \ expr1' ->
577     tcMonoExpr expr2 elt_ty                             `thenM`    \ expr2' ->
578     tcMonoExpr expr3 elt_ty                             `thenM`    \ expr3' ->
579     newMethodFromName (ArithSeqOrigin seq) 
580                       elt_ty enumFromThenToName         `thenM` \ eft ->
581
582     returnM (ArithSeqOut (HsVar eft) (FromThenTo expr1' expr2' expr3'))
583
584 tcMonoExpr in_expr@(PArrSeqIn seq@(FromTo expr1 expr2)) res_ty
585   = addErrCtxt (parrSeqCtxt in_expr) $
586     unifyPArrTy  res_ty                                 `thenM`    \ elt_ty ->  
587     tcMonoExpr expr1 elt_ty                             `thenM`    \ expr1' ->
588     tcMonoExpr expr2 elt_ty                             `thenM`    \ expr2' ->
589     newMethodFromName (PArrSeqOrigin seq) 
590                       elt_ty enumFromToPName            `thenM` \ enum_from_to ->
591
592     returnM (PArrSeqOut (HsVar enum_from_to) (FromTo expr1' expr2'))
593
594 tcMonoExpr in_expr@(PArrSeqIn seq@(FromThenTo expr1 expr2 expr3)) res_ty
595   = addErrCtxt  (parrSeqCtxt in_expr) $
596     unifyPArrTy  res_ty                                 `thenM`    \ elt_ty ->  
597     tcMonoExpr expr1 elt_ty                             `thenM`    \ expr1' ->
598     tcMonoExpr expr2 elt_ty                             `thenM`    \ expr2' ->
599     tcMonoExpr expr3 elt_ty                             `thenM`    \ expr3' ->
600     newMethodFromName (PArrSeqOrigin seq)
601                       elt_ty enumFromThenToPName        `thenM` \ eft ->
602
603     returnM (PArrSeqOut (HsVar eft) (FromThenTo expr1' expr2' expr3'))
604
605 tcMonoExpr (PArrSeqIn _) _ 
606   = panic "TcExpr.tcMonoExpr: Infinite parallel array!"
607     -- the parser shouldn't have generated it and the renamer shouldn't have
608     -- let it through
609 \end{code}
610
611
612 %************************************************************************
613 %*                                                                      *
614                 Template Haskell
615 %*                                                                      *
616 %************************************************************************
617
618 \begin{code}
619 #ifdef GHCI     /* Only if bootstrapped */
620         -- Rename excludes these cases otherwise
621
622 tcMonoExpr (HsSplice n expr loc) res_ty = addSrcLoc loc (tcSpliceExpr n expr res_ty)
623   
624 tcMonoExpr (HsBracket brack loc) res_ty
625   = addSrcLoc loc                       $
626     getStage                            `thenM` \ level ->
627     case bracketOK level of {
628         Nothing         -> failWithTc (illegalBracket level) ;
629         Just next_level ->
630
631         -- Typecheck expr to make sure it is valid,
632         -- but throw away the results.  We'll type check
633         -- it again when we actually use it.
634     newMutVar []                        `thenM` \ pending_splices ->
635     getLIEVar                           `thenM` \ lie_var ->
636
637     setStage (Brack next_level pending_splices lie_var) (
638         getLIE (tcBracket brack)
639     )                                   `thenM` \ (meta_ty, lie) ->
640     tcSimplifyBracket lie               `thenM_`  
641
642     unifyTauTy res_ty meta_ty           `thenM_`
643
644         -- Return the original expression, not the type-decorated one
645     readMutVar pending_splices          `thenM` \ pendings ->
646     returnM (HsBracketOut brack pendings)
647     }
648
649 tcMonoExpr (HsReify (Reify flavour name)) res_ty
650   = addErrCtxt (ptext SLIT("At the reification of") <+> ppr name)       $
651     tcMetaTy  tycon_name        `thenM` \ reify_ty ->
652     unifyTauTy res_ty reify_ty  `thenM_`
653     returnM (HsReify (ReifyOut flavour name))
654   where
655     tycon_name = case flavour of
656                    ReifyDecl -> DsMeta.declTyConName
657                    ReifyType -> DsMeta.typeTyConName
658                    ReifyFixity -> pprPanic "tcMonoExpr: cant do reifyFixity yet" (ppr name)
659 #endif GHCI
660 \end{code}
661
662
663 %************************************************************************
664 %*                                                                      *
665                 Catch-all
666 %*                                                                      *
667 %************************************************************************
668
669 \begin{code}
670 tcMonoExpr other _ = pprPanic "tcMonoExpr" (ppr other)
671 \end{code}
672
673
674 %************************************************************************
675 %*                                                                      *
676 \subsection{@tcApp@ typchecks an application}
677 %*                                                                      *
678 %************************************************************************
679
680 \begin{code}
681
682 tcApp :: RenamedHsExpr -> [RenamedHsExpr]       -- Function and args
683       -> TcType                                 -- Expected result type of application
684       -> TcM TcExpr                             -- Translated fun and args
685
686 tcApp (HsApp e1 e2) args res_ty 
687   = tcApp e1 (e2:args) res_ty           -- Accumulate the arguments
688
689 tcApp fun args res_ty
690   =     -- First type-check the function
691     tcExpr_id fun                               `thenM` \ (fun', fun_ty) ->
692
693     addErrCtxt (wrongArgsCtxt "too many" fun args) (
694         traceTc (text "tcApp" <+> (ppr fun $$ ppr fun_ty))      `thenM_`
695         split_fun_ty fun_ty (length args)
696     )                                           `thenM` \ (expected_arg_tys, actual_result_ty) ->
697
698         -- Now typecheck the args
699     mappM (tcArg fun)
700           (zip3 args expected_arg_tys [1..])    `thenM` \ args' ->
701
702         -- Unify with expected result after type-checking the args
703         -- so that the info from args percolates to actual_result_ty.
704         -- This is when we might detect a too-few args situation.
705         -- (One can think of cases when the opposite order would give
706         -- a better error message.)
707     addErrCtxtM (checkArgsCtxt fun args res_ty actual_result_ty)
708                   (tcSubExp res_ty actual_result_ty)    `thenM` \ co_fn ->
709
710     returnM (co_fn <$> foldl HsApp fun' args') 
711
712
713 -- If an error happens we try to figure out whether the
714 -- function has been given too many or too few arguments,
715 -- and say so
716 checkArgsCtxt fun args expected_res_ty actual_res_ty tidy_env
717   = zonkTcType expected_res_ty    `thenM` \ exp_ty' ->
718     zonkTcType actual_res_ty      `thenM` \ act_ty' ->
719     let
720       (env1, exp_ty'') = tidyOpenType tidy_env exp_ty'
721       (env2, act_ty'') = tidyOpenType env1     act_ty'
722       (exp_args, _)    = tcSplitFunTys exp_ty''
723       (act_args, _)    = tcSplitFunTys act_ty''
724
725       len_act_args     = length act_args
726       len_exp_args     = length exp_args
727
728       message | len_exp_args < len_act_args = wrongArgsCtxt "too few" fun args
729               | len_exp_args > len_act_args = wrongArgsCtxt "too many" fun args
730               | otherwise                   = appCtxt fun args
731     in
732     returnM (env2, message)
733
734
735 split_fun_ty :: TcType          -- The type of the function
736              -> Int             -- Number of arguments
737              -> TcM ([TcType],  -- Function argument types
738                      TcType)    -- Function result types
739
740 split_fun_ty fun_ty 0 
741   = returnM ([], fun_ty)
742
743 split_fun_ty fun_ty n
744   =     -- Expect the function to have type A->B
745     unifyFunTy fun_ty           `thenM` \ (arg_ty, res_ty) ->
746     split_fun_ty res_ty (n-1)   `thenM` \ (arg_tys, final_res_ty) ->
747     returnM (arg_ty:arg_tys, final_res_ty)
748 \end{code}
749
750 \begin{code}
751 tcArg :: RenamedHsExpr                          -- The function (for error messages)
752       -> (RenamedHsExpr, TcSigmaType, Int)      -- Actual argument and expected arg type
753       -> TcM TcExpr                             -- Resulting argument and LIE
754
755 tcArg the_fun (arg, expected_arg_ty, arg_no)
756   = addErrCtxt (funAppCtxt the_fun arg arg_no) $
757     tcExpr arg expected_arg_ty
758 \end{code}
759
760
761 %************************************************************************
762 %*                                                                      *
763 \subsection{@tcId@ typchecks an identifier occurrence}
764 %*                                                                      *
765 %************************************************************************
766
767 tcId instantiates an occurrence of an Id.
768 The instantiate_it loop runs round instantiating the Id.
769 It has to be a loop because we are now prepared to entertain
770 types like
771         f:: forall a. Eq a => forall b. Baz b => tau
772 We want to instantiate this to
773         f2::tau         {f2 = f1 b (Baz b), f1 = f a (Eq a)}
774
775 The -fno-method-sharing flag controls what happens so far as the LIE
776 is concerned.  The default case is that for an overloaded function we 
777 generate a "method" Id, and add the Method Inst to the LIE.  So you get
778 something like
779         f :: Num a => a -> a
780         f = /\a (d:Num a) -> let m = (+) a d in \ (x:a) -> m x x
781 If you specify -fno-method-sharing, the dictionary application 
782 isn't shared, so we get
783         f :: Num a => a -> a
784         f = /\a (d:Num a) (x:a) -> (+) a d x x
785 This gets a bit less sharing, but
786         a) it's better for RULEs involving overloaded functions
787         b) perhaps fewer separated lambdas
788
789 \begin{code}
790 tcId :: Name -> TcM (TcExpr, TcType)
791 tcId name       -- Look up the Id and instantiate its type
792   =     -- First check whether it's a DataCon
793         -- Reason: we must not forget to chuck in the
794         --         constraints from their "silly context"
795     tcLookupGlobal_maybe name           `thenM` \ maybe_thing ->
796     case maybe_thing of {
797         Just (ADataCon data_con) -> inst_data_con data_con ;
798         other                    ->
799
800         -- OK, so now look for ordinary Ids
801     tcLookupIdLvl name                  `thenM` \ (id, bind_lvl) ->
802
803 #ifndef GHCI
804     loop (HsVar id) (idType id)         -- Non-TH case
805
806 #else /* GHCI is on */
807         -- Check for cross-stage lifting
808     getStage                            `thenM` \ use_stage -> 
809     case use_stage of
810       Brack use_lvl ps_var lie_var
811         | use_lvl > bind_lvl && not (isExternalName name)
812         ->      -- E.g. \x -> [| h x |]
813                 -- We must behave as if the reference to x was
814                 --      h $(lift x)     
815                 -- We use 'x' itself as the splice proxy, used by 
816                 -- the desugarer to stitch it all back together.
817                 -- If 'x' occurs many times we may get many identical
818                 -- bindings of the same splice proxy, but that doesn't
819                 -- matter, although it's a mite untidy.
820                 --
821                 -- NB: During type-checking, isExernalName is true of 
822                 -- top level things, and false of nested bindings
823                 -- Top-level things don't need lifting.
824         
825         let
826             id_ty = idType id
827         in
828         checkTc (isTauTy id_ty) (polySpliceErr id)      `thenM_` 
829                     -- If x is polymorphic, its occurrence sites might
830                     -- have different instantiations, so we can't use plain
831                     -- 'x' as the splice proxy name.  I don't know how to 
832                     -- solve this, and it's probably unimportant, so I'm
833                     -- just going to flag an error for now
834
835         setLIEVar lie_var       (
836         newMethodFromName orig id_ty DsMeta.liftName    `thenM` \ lift ->
837                 -- Put the 'lift' constraint into the right LIE
838         
839         -- Update the pending splices
840         readMutVar ps_var                       `thenM` \ ps ->
841         writeMutVar ps_var ((name, HsApp (HsVar lift) (HsVar id)) : ps) `thenM_`
842
843         returnM (HsVar id, id_ty))
844
845       other -> 
846         checkWellStaged (quotes (ppr id)) bind_lvl use_stage    `thenM_`
847         loop (HsVar id) (idType id)
848 #endif
849     }
850
851   where
852     orig = OccurrenceOf name
853
854     loop (HsVar fun_id) fun_ty
855         | want_method_inst fun_ty
856         = tcInstType VanillaTv fun_ty           `thenM` \ (tyvars, theta, tau) ->
857           newMethodWithGivenTy orig fun_id 
858                 (mkTyVarTys tyvars) theta tau   `thenM` \ meth_id ->
859           loop (HsVar meth_id) tau
860
861     loop fun fun_ty 
862         | isSigmaTy fun_ty
863         = tcInstCall orig fun_ty        `thenM` \ (inst_fn, tau) ->
864           loop (inst_fn fun) tau
865
866         | otherwise
867         = returnM (fun, fun_ty)
868
869         --      Hack Alert (want_method_inst)!
870         -- If   f :: (%x :: T) => Int -> Int
871         -- Then if we have two separate calls, (f 3, f 4), we cannot
872         -- make a method constraint that then gets shared, thus:
873         --      let m = f %x in (m 3, m 4)
874         -- because that loses the linearity of the constraint.
875         -- The simplest thing to do is never to construct a method constraint
876         -- in the first place that has a linear implicit parameter in it.
877     want_method_inst fun_ty 
878         | opt_NoMethodSharing = False   
879         | otherwise           = case tcSplitSigmaTy fun_ty of
880                                   (_,[],_)    -> False  -- Not overloaded
881                                   (_,theta,_) -> not (any isLinearPred theta)
882
883
884         -- We treat data constructors differently, because we have to generate
885         -- constraints for their silly theta, which no longer appears in
886         -- the type of dataConWrapId.  It's dual to TcPat.tcConstructor
887     inst_data_con data_con
888       = tcInstDataCon orig data_con     `thenM` \ (ty_args, ex_dicts, arg_tys, result_ty, _) ->
889         extendLIEs ex_dicts             `thenM_`
890         returnM (mkHsDictApp (mkHsTyApp (HsVar (dataConWrapId data_con)) ty_args) 
891                              (map instToId ex_dicts), 
892                  mkFunTys arg_tys result_ty)
893 \end{code}
894
895 Typecheck expression which in most cases will be an Id.
896 The expression can return a higher-ranked type, such as
897         (forall a. a->a) -> Int
898 so we must create a HoleTyVarTy to pass in as the expected tyvar.
899
900 \begin{code}
901 tcExpr_id :: RenamedHsExpr -> TcM (TcExpr, TcType)
902 tcExpr_id (HsVar name) = tcId name
903 tcExpr_id expr         = newHoleTyVarTy                 `thenM` \ id_ty ->
904                          tcMonoExpr expr id_ty          `thenM` \ expr' ->
905                          readHoleResult id_ty           `thenM` \ id_ty' ->
906                          returnM (expr', id_ty') 
907 \end{code}
908
909
910 %************************************************************************
911 %*                                                                      *
912 \subsection{Record bindings}
913 %*                                                                      *
914 %************************************************************************
915
916 Game plan for record bindings
917 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
918 1. Find the TyCon for the bindings, from the first field label.
919
920 2. Instantiate its tyvars and unify (T a1 .. an) with expected_ty.
921
922 For each binding field = value
923
924 3. Instantiate the field type (from the field label) using the type
925    envt from step 2.
926
927 4  Type check the value using tcArg, passing the field type as 
928    the expected argument type.
929
930 This extends OK when the field types are universally quantified.
931
932         
933 \begin{code}
934 tcRecordBinds
935         :: TyCon                -- Type constructor for the record
936         -> [TcType]             -- Args of this type constructor
937         -> RenamedRecordBinds
938         -> TcM TcRecordBinds
939
940 tcRecordBinds tycon ty_args rbinds
941   = mappM do_bind rbinds
942   where
943     tenv = mkTopTyVarSubst (tyConTyVars tycon) ty_args
944
945     do_bind (field_lbl_name, rhs)
946       = addErrCtxt (fieldCtxt field_lbl_name)   $
947            tcLookupId field_lbl_name            `thenM` \ sel_id ->
948         let
949             field_lbl = recordSelectorFieldLabel sel_id
950             field_ty  = substTy tenv (fieldLabelType field_lbl)
951         in
952         ASSERT( isRecordSelector sel_id )
953                 -- This lookup and assertion will surely succeed, because
954                 -- we check that the fields are indeed record selectors
955                 -- before calling tcRecordBinds
956         ASSERT2( fieldLabelTyCon field_lbl == tycon, ppr field_lbl )
957                 -- The caller of tcRecordBinds has already checked
958                 -- that all the fields come from the same type
959
960         tcExpr rhs field_ty                     `thenM` \ rhs' ->
961
962         returnM (sel_id, rhs')
963
964 badFields rbinds data_con
965   = filter (not . (`elem` field_names)) (recBindFields rbinds)
966   where
967     field_names = map fieldLabelName (dataConFieldLabels data_con)
968
969 checkMissingFields :: DataCon -> RenamedRecordBinds -> TcM ()
970 checkMissingFields data_con rbinds
971   | null field_labels   -- Not declared as a record;
972                         -- But C{} is still valid if no strict fields
973   = if any isMarkedStrict field_strs then
974         -- Illegal if any arg is strict
975         addErrTc (missingStrictFields data_con [])
976     else
977         returnM ()
978                         
979   | otherwise           -- A record
980   = checkM (null missing_s_fields)
981            (addErrTc (missingStrictFields data_con missing_s_fields))   `thenM_`
982
983     doptM Opt_WarnMissingFields         `thenM` \ warn ->
984     checkM (not (warn && notNull missing_ns_fields))
985            (warnTc True (missingFields data_con missing_ns_fields))
986
987   where
988     missing_s_fields
989         = [ fl | (fl, str) <- field_info,
990                  isMarkedStrict str,
991                  not (fieldLabelName fl `elem` field_names_used)
992           ]
993     missing_ns_fields
994         = [ fl | (fl, str) <- field_info,
995                  not (isMarkedStrict str),
996                  not (fieldLabelName fl `elem` field_names_used)
997           ]
998
999     field_names_used = recBindFields rbinds
1000     field_labels     = dataConFieldLabels data_con
1001
1002     field_info = zipEqual "missingFields"
1003                           field_labels
1004                           field_strs
1005
1006     field_strs = dropList ex_theta (dataConStrictMarks data_con)
1007         -- The 'drop' is because dataConStrictMarks
1008         -- includes the existential dictionaries
1009     (_, _, _, ex_theta, _, _) = dataConSig data_con
1010 \end{code}
1011
1012 %************************************************************************
1013 %*                                                                      *
1014 \subsection{@tcMonoExprs@ typechecks a {\em list} of expressions}
1015 %*                                                                      *
1016 %************************************************************************
1017
1018 \begin{code}
1019 tcMonoExprs :: [RenamedHsExpr] -> [TcType] -> TcM [TcExpr]
1020
1021 tcMonoExprs [] [] = returnM []
1022 tcMonoExprs (expr:exprs) (ty:tys)
1023  = tcMonoExpr  expr  ty         `thenM` \ expr' ->
1024    tcMonoExprs exprs tys        `thenM` \ exprs' ->
1025    returnM (expr':exprs')
1026 \end{code}
1027
1028
1029 %************************************************************************
1030 %*                                                                      *
1031 \subsection{Literals}
1032 %*                                                                      *
1033 %************************************************************************
1034
1035 Overloaded literals.
1036
1037 \begin{code}
1038 tcLit :: HsLit -> TcType -> TcM TcExpr
1039 tcLit (HsLitLit s _) res_ty
1040   = tcLookupClass cCallableClassName                    `thenM` \ cCallableClass ->
1041     newDicts (LitLitOrigin (unpackFS s))
1042              [mkClassPred cCallableClass [res_ty]]      `thenM` \ dicts ->
1043     extendLIEs dicts                                    `thenM_`
1044     returnM (HsLit (HsLitLit s res_ty))
1045
1046 tcLit lit res_ty 
1047   = unifyTauTy res_ty (hsLitType lit)           `thenM_`
1048     returnM (HsLit lit)
1049 \end{code}
1050
1051
1052 %************************************************************************
1053 %*                                                                      *
1054 \subsection{Errors and contexts}
1055 %*                                                                      *
1056 %************************************************************************
1057
1058 Boring and alphabetical:
1059 \begin{code}
1060 arithSeqCtxt expr
1061   = hang (ptext SLIT("In an arithmetic sequence:")) 4 (ppr expr)
1062
1063 parrSeqCtxt expr
1064   = hang (ptext SLIT("In a parallel array sequence:")) 4 (ppr expr)
1065
1066 caseCtxt expr
1067   = hang (ptext SLIT("In the case expression:")) 4 (ppr expr)
1068
1069 caseScrutCtxt expr
1070   = hang (ptext SLIT("In the scrutinee of a case expression:")) 4 (ppr expr)
1071
1072 exprSigCtxt expr
1073   = hang (ptext SLIT("When checking the type signature of the expression:"))
1074          4 (ppr expr)
1075
1076 exprCtxt expr
1077   = hang (ptext SLIT("In the expression:")) 4 (ppr expr)
1078
1079 fieldCtxt field_name
1080   = ptext SLIT("In the") <+> quotes (ppr field_name) <+> ptext SLIT("field of a record")
1081
1082 funAppCtxt fun arg arg_no
1083   = hang (hsep [ ptext SLIT("In the"), speakNth arg_no, ptext SLIT("argument of"), 
1084                     quotes (ppr fun) <> text ", namely"])
1085          4 (quotes (ppr arg))
1086
1087 listCtxt expr
1088   = hang (ptext SLIT("In the list element:")) 4 (ppr expr)
1089
1090 parrCtxt expr
1091   = hang (ptext SLIT("In the parallel array element:")) 4 (ppr expr)
1092
1093 predCtxt expr
1094   = hang (ptext SLIT("In the predicate expression:")) 4 (ppr expr)
1095
1096 illegalBracket level
1097   = ptext SLIT("Illegal bracket at level") <+> ppr level
1098
1099 appCtxt fun args
1100   = ptext SLIT("In the application") <+> quotes (ppr the_app)
1101   where
1102     the_app = foldl HsApp fun args      -- Used in error messages
1103
1104 lurkingRank2Err fun fun_ty
1105   = hang (hsep [ptext SLIT("Illegal use of"), quotes (ppr fun)])
1106          4 (vcat [ptext SLIT("It is applied to too few arguments"),  
1107                   ptext SLIT("so that the result type has for-alls in it:") <+> ppr fun_ty])
1108
1109 badFieldsUpd rbinds
1110   = hang (ptext SLIT("No constructor has all these fields:"))
1111          4 (pprQuotedList (recBindFields rbinds))
1112
1113 recordUpdCtxt expr = ptext SLIT("In the record update:") <+> ppr expr
1114 recordConCtxt expr = ptext SLIT("In the record construction:") <+> ppr expr
1115
1116 notSelector field
1117   = hsep [quotes (ppr field), ptext SLIT("is not a record selector")]
1118
1119 missingStrictFields :: DataCon -> [FieldLabel] -> SDoc
1120 missingStrictFields con fields
1121   = header <> rest
1122   where
1123     rest | null fields = empty  -- Happens for non-record constructors 
1124                                 -- with strict fields
1125          | otherwise   = colon <+> pprWithCommas ppr fields
1126
1127     header = ptext SLIT("Constructor") <+> quotes (ppr con) <+> 
1128              ptext SLIT("does not have the required strict field(s)") 
1129           
1130 missingFields :: DataCon -> [FieldLabel] -> SDoc
1131 missingFields con fields
1132   = ptext SLIT("Fields of") <+> quotes (ppr con) <+> ptext SLIT("not initialised:") 
1133         <+> pprWithCommas ppr fields
1134
1135 polySpliceErr :: Id -> SDoc
1136 polySpliceErr id
1137   = ptext SLIT("Can't splice the polymorphic local variable") <+> quotes (ppr id)
1138
1139 wrongArgsCtxt too_many_or_few fun args
1140   = hang (ptext SLIT("Probable cause:") <+> quotes (ppr fun)
1141                     <+> ptext SLIT("is applied to") <+> text too_many_or_few 
1142                     <+> ptext SLIT("arguments in the call"))
1143          4 (parens (ppr the_app))
1144   where
1145     the_app = foldl HsApp fun args      -- Used in error messages
1146 \end{code}