0a6b2c0fc6a3ad220f8a30c4ccbdcf5244646c15
[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 ( tcApp, tcExpr, tcPolyExpr, tcId ) where
8
9 #include "HsVersions.h"
10
11 import HsSyn            ( HsExpr(..), HsLit(..), ArithSeqInfo(..), 
12                           HsBinds(..), Stmt(..), StmtCtxt(..)
13                         )
14 import RnHsSyn          ( RenamedHsExpr, RenamedRecordBinds )
15 import TcHsSyn          ( TcExpr, TcRecordBinds,
16                           mkHsTyApp, mkHsLet, maybeBoxedPrimType
17                         )
18
19 import TcMonad
20 import BasicTypes       ( RecFlag(..) )
21
22 import Inst             ( Inst, InstOrigin(..), OverloadedLit(..),
23                           LIE, emptyLIE, unitLIE, plusLIE, plusLIEs, newOverloadedLit,
24                           newMethod, instOverloadedFun, newDicts, instToId )
25 import TcBinds          ( tcBindsAndThen )
26 import TcEnv            ( tcInstId,
27                           tcLookupValue, tcLookupClassByKey,
28                           tcLookupValueByKey,
29                           tcExtendGlobalTyVars, tcLookupValueMaybe,
30                           tcLookupTyCon, tcLookupDataCon
31                         )
32 import TcMatches        ( tcMatchesCase, tcMatchLambda, tcStmts )
33 import TcMonoType       ( tcHsType, checkSigTyVars, sigCtxt )
34 import TcPat            ( badFieldCon )
35 import TcSimplify       ( tcSimplifyAndCheck )
36 import TcType           ( TcType, TcTauType,
37                           tcInstTyVars,
38                           tcInstTcType, tcSplitRhoTy,
39                           newTyVarTy, newTyVarTy_OpenKind, zonkTcType )
40
41 import Class            ( Class )
42 import FieldLabel       ( FieldLabel, fieldLabelName, fieldLabelType
43                         )
44 import Id               ( idType, recordSelectorFieldLabel,
45                           isRecordSelector,
46                           Id
47                         )
48 import DataCon          ( dataConFieldLabels, dataConSig, dataConId,
49                           dataConStrictMarks, StrictnessMark(..)
50                         )
51 import Name             ( Name )
52 import Type             ( mkFunTy, mkAppTy, mkTyVarTy, mkTyVarTys,
53                           splitFunTy_maybe, splitFunTys, isNotUsgTy,
54                           mkTyConApp,
55                           splitForAllTys, splitRhoTy,
56                           isTauTy, tyVarsOfType, tyVarsOfTypes, 
57                           isForAllTy, splitAlgTyConApp, splitAlgTyConApp_maybe,
58                           boxedTypeKind, mkArrowKind,
59                           tidyOpenType
60                         )
61 import Subst            ( mkTopTyVarSubst, substTheta )
62 import UsageSPUtils     ( unannotTy )
63 import VarSet           ( elemVarSet, mkVarSet )
64 import TyCon            ( tyConDataCons )
65 import TysPrim          ( intPrimTy, charPrimTy, doublePrimTy,
66                           floatPrimTy, addrPrimTy
67                         )
68 import TysWiredIn       ( boolTy, charTy, stringTy )
69 import PrelInfo         ( ioTyCon_NAME )
70 import TcUnify          ( unifyTauTy, unifyFunTy, unifyListTy, unifyTupleTy,
71                           unifyUnboxedTupleTy )
72 import Unique           ( cCallableClassKey, cReturnableClassKey, 
73                           enumFromClassOpKey, enumFromThenClassOpKey,
74                           enumFromToClassOpKey, enumFromThenToClassOpKey,
75                           thenMClassOpKey, failMClassOpKey, returnMClassOpKey
76                         )
77 import Outputable
78 import Maybes           ( maybeToBool, mapMaybe )
79 import ListSetOps       ( minusList )
80 import Util
81 import CmdLineOpts      ( opt_WarnMissingFields )
82
83 \end{code}
84
85 %************************************************************************
86 %*                                                                      *
87 \subsection{Main wrappers}
88 %*                                                                      *
89 %************************************************************************
90
91 \begin{code}
92 tcExpr :: RenamedHsExpr                 -- Expession to type check
93         -> TcType                       -- Expected type (could be a polytpye)
94         -> TcM s (TcExpr, LIE)
95
96 tcExpr expr ty | isForAllTy ty = -- Polymorphic case
97                                  tcPolyExpr expr ty     `thenTc` \ (expr', lie, _, _, _) ->
98                                  returnTc (expr', lie)
99
100                | otherwise     = -- Monomorphic case
101                                  tcMonoExpr expr ty
102 \end{code}
103
104
105 %************************************************************************
106 %*                                                                      *
107 \subsection{@tcPolyExpr@ typchecks an application}
108 %*                                                                      *
109 %************************************************************************
110
111 \begin{code}
112 -- tcPolyExpr is like tcMonoExpr, except that the expected type
113 -- can be a polymorphic one.
114 tcPolyExpr :: RenamedHsExpr
115            -> TcType                            -- Expected type
116            -> TcM s (TcExpr, LIE,               -- Generalised expr with expected type, and LIE
117                      TcExpr, TcTauType, LIE)    -- Same thing, but instantiated; tau-type returned
118
119 tcPolyExpr arg expected_arg_ty
120   =     -- Ha!  The argument type of the function is a for-all type,
121         -- An example of rank-2 polymorphism.
122
123         -- To ensure that the forall'd type variables don't get unified with each
124         -- other or any other types, we make fresh copy of the alleged type
125     tcInstTcType expected_arg_ty        `thenNF_Tc` \ (sig_tyvars, sig_rho) ->
126     let
127         (sig_theta, sig_tau) = splitRhoTy sig_rho
128     in
129         -- Type-check the arg and unify with expected type
130     tcMonoExpr arg sig_tau                              `thenTc` \ (arg', lie_arg) ->
131
132         -- Check that the sig_tyvars havn't been constrained
133         -- The interesting bit here is that we must include the free variables
134         -- of the expected arg ty.  Here's an example:
135         --       runST (newVar True)
136         -- Here, if we don't make a check, we'll get a type (ST s (MutVar s Bool))
137         -- for (newVar True), with s fresh.  Then we unify with the runST's arg type
138         -- forall s'. ST s' a. That unifies s' with s, and a with MutVar s Bool.
139         -- So now s' isn't unconstrained because it's linked to a.
140         -- Conclusion: include the free vars of the expected arg type in the
141         -- list of "free vars" for the signature check.
142
143     tcExtendGlobalTyVars (tyVarsOfType expected_arg_ty)         $
144     tcAddErrCtxtM (sigCtxt sig_msg expected_arg_ty)             $
145
146     checkSigTyVars sig_tyvars                   `thenTc` \ zonked_sig_tyvars ->
147
148     newDicts SignatureOrigin sig_theta          `thenNF_Tc` \ (sig_dicts, dict_ids) ->
149         -- ToDo: better origin
150     tcSimplifyAndCheck 
151         (text "the type signature of an expression")
152         (mkVarSet zonked_sig_tyvars)
153         sig_dicts lie_arg                       `thenTc` \ (free_insts, inst_binds) ->
154
155     let
156             -- This HsLet binds any Insts which came out of the simplification.
157             -- It's a bit out of place here, but using AbsBind involves inventing
158             -- a couple of new names which seems worse.
159         generalised_arg = TyLam zonked_sig_tyvars $
160                           DictLam dict_ids $
161                           mkHsLet inst_binds $ 
162                           arg' 
163     in
164     returnTc ( generalised_arg, free_insts,
165                arg', sig_tau, lie_arg )
166   where
167     sig_msg ty = sep [ptext SLIT("In an expression with expected type:"),
168                       nest 4 (ppr ty)]
169 \end{code}
170
171 %************************************************************************
172 %*                                                                      *
173 \subsection{The TAUT rules for variables}
174 %*                                                                      *
175 %************************************************************************
176
177 \begin{code}
178 tcMonoExpr :: RenamedHsExpr             -- Expession to type check
179            -> TcTauType                         -- Expected type (could be a type variable)
180            -> TcM s (TcExpr, LIE)
181
182 tcMonoExpr (HsVar name) res_ty
183   = tcId name                   `thenNF_Tc` \ (expr', lie, id_ty) ->
184     unifyTauTy res_ty id_ty     `thenTc_`
185
186     -- Check that the result type doesn't have any nested for-alls.
187     -- For example, a "build" on its own is no good; it must be
188     -- applied to something.
189     checkTc (isTauTy id_ty)
190             (lurkingRank2Err name id_ty) `thenTc_`
191
192     returnTc (expr', lie)
193 \end{code}
194
195 %************************************************************************
196 %*                                                                      *
197 \subsection{Literals}
198 %*                                                                      *
199 %************************************************************************
200
201 Overloaded literals.
202
203 \begin{code}
204 tcMonoExpr (HsLit (HsInt i)) res_ty
205   = newOverloadedLit (LiteralOrigin (HsInt i))
206                      (OverloadedIntegral i)
207                      res_ty  `thenNF_Tc` \ stuff ->
208     returnTc stuff
209
210 tcMonoExpr (HsLit (HsFrac f)) res_ty
211   = newOverloadedLit (LiteralOrigin (HsFrac f))
212                      (OverloadedFractional f)
213                      res_ty  `thenNF_Tc` \ stuff ->
214     returnTc stuff
215
216
217 tcMonoExpr (HsLit lit@(HsLitLit s)) res_ty
218   = tcLookupClassByKey cCallableClassKey                `thenNF_Tc` \ cCallableClass ->
219     newDicts (LitLitOrigin (_UNPK_ s))
220              [(cCallableClass, [res_ty])]               `thenNF_Tc` \ (dicts, _) ->
221     returnTc (HsLitOut lit res_ty, dicts)
222 \end{code}
223
224 Primitive literals:
225
226 \begin{code}
227 tcMonoExpr (HsLit lit@(HsCharPrim c)) res_ty
228   = unifyTauTy res_ty charPrimTy                `thenTc_`
229     returnTc (HsLitOut lit charPrimTy, emptyLIE)
230
231 tcMonoExpr (HsLit lit@(HsStringPrim s)) res_ty
232   = unifyTauTy res_ty addrPrimTy                `thenTc_`
233     returnTc (HsLitOut lit addrPrimTy, emptyLIE)
234
235 tcMonoExpr (HsLit lit@(HsIntPrim i)) res_ty
236   = unifyTauTy res_ty intPrimTy         `thenTc_`
237     returnTc (HsLitOut lit intPrimTy, emptyLIE)
238
239 tcMonoExpr (HsLit lit@(HsFloatPrim f)) res_ty
240   = unifyTauTy res_ty floatPrimTy               `thenTc_`
241     returnTc (HsLitOut lit floatPrimTy, emptyLIE)
242
243 tcMonoExpr (HsLit lit@(HsDoublePrim d)) res_ty
244   = unifyTauTy res_ty doublePrimTy              `thenTc_`
245     returnTc (HsLitOut lit doublePrimTy, emptyLIE)
246 \end{code}
247
248 Unoverloaded literals:
249
250 \begin{code}
251 tcMonoExpr (HsLit lit@(HsChar c)) res_ty
252   = unifyTauTy res_ty charTy            `thenTc_`
253     returnTc (HsLitOut lit charTy, emptyLIE)
254
255 tcMonoExpr (HsLit lit@(HsString str)) res_ty
256   = unifyTauTy res_ty stringTy          `thenTc_`
257     returnTc (HsLitOut lit stringTy, emptyLIE)
258 \end{code}
259
260 %************************************************************************
261 %*                                                                      *
262 \subsection{Other expression forms}
263 %*                                                                      *
264 %************************************************************************
265
266 \begin{code}
267 tcMonoExpr (HsPar expr) res_ty -- preserve parens so printing needn't guess where they go
268   = tcMonoExpr expr res_ty
269
270 -- perform the negate *before* overloading the integer, since the case
271 -- of minBound on Ints fails otherwise.  Could be done elsewhere, but
272 -- convenient to do it here.
273
274 tcMonoExpr (NegApp (HsLit (HsInt i)) neg) res_ty
275   = tcMonoExpr (HsLit (HsInt (-i))) res_ty
276
277 tcMonoExpr (NegApp expr neg) res_ty 
278   = tcMonoExpr (HsApp neg expr) res_ty
279
280 tcMonoExpr (HsLam match) res_ty
281   = tcMatchLambda match res_ty          `thenTc` \ (match',lie) ->
282     returnTc (HsLam match', lie)
283
284 tcMonoExpr (HsApp e1 e2) res_ty = accum e1 [e2]
285   where
286     accum (HsApp e1 e2) args = accum e1 (e2:args)
287     accum fun args
288       = tcApp fun args res_ty   `thenTc` \ (fun', args', lie) ->
289         returnTc (foldl HsApp fun' args', lie)
290
291 -- equivalent to (op e1) e2:
292 tcMonoExpr (OpApp arg1 op fix arg2) res_ty
293   = tcApp op [arg1,arg2] res_ty `thenTc` \ (op', [arg1', arg2'], lie) ->
294     returnTc (OpApp arg1' op' fix arg2', lie)
295 \end{code}
296
297 Note that the operators in sections are expected to be binary, and
298 a type error will occur if they aren't.
299
300 \begin{code}
301 -- Left sections, equivalent to
302 --      \ x -> e op x,
303 -- or
304 --      \ x -> op e x,
305 -- or just
306 --      op e
307
308 tcMonoExpr in_expr@(SectionL arg op) res_ty
309   = tcApp op [arg] res_ty               `thenTc` \ (op', [arg'], lie) ->
310
311         -- Check that res_ty is a function type
312         -- Without this check we barf in the desugarer on
313         --      f op = (3 `op`)
314         -- because it tries to desugar to
315         --      f op = \r -> 3 op r
316         -- so (3 `op`) had better be a function!
317     tcAddErrCtxt (sectionLAppCtxt in_expr) $
318     unifyFunTy res_ty                   `thenTc_`
319
320     returnTc (SectionL arg' op', lie)
321
322 -- Right sections, equivalent to \ x -> x op expr, or
323 --      \ x -> op x expr
324
325 tcMonoExpr in_expr@(SectionR op expr) res_ty
326   = tcExpr_id op                `thenTc`    \ (op', lie1, op_ty) ->
327     tcAddErrCtxt (sectionRAppCtxt in_expr) $
328     split_fun_ty op_ty 2 {- two args -}                 `thenTc` \ ([arg1_ty, arg2_ty], op_res_ty) ->
329     tcMonoExpr expr arg2_ty                             `thenTc` \ (expr',lie2) ->
330     unifyTauTy res_ty (mkFunTy arg1_ty op_res_ty)       `thenTc_`
331     returnTc (SectionR op' expr', lie1 `plusLIE` lie2)
332 \end{code}
333
334 The interesting thing about @ccall@ is that it is just a template
335 which we instantiate by filling in details about the types of its
336 argument and result (ie minimal typechecking is performed).  So, the
337 basic story is that we allocate a load of type variables (to hold the
338 arg/result types); unify them with the args/result; and store them for
339 later use.
340
341 \begin{code}
342 tcMonoExpr (CCall lbl args may_gc is_asm ignored_fake_result_ty) res_ty
343   =     -- Get the callable and returnable classes.
344     tcLookupClassByKey cCallableClassKey        `thenNF_Tc` \ cCallableClass ->
345     tcLookupClassByKey cReturnableClassKey      `thenNF_Tc` \ cReturnableClass ->
346     tcLookupTyCon ioTyCon_NAME                  `thenNF_Tc` \ ioTyCon ->
347     let
348         new_arg_dict (arg, arg_ty)
349           = newDicts (CCallOrigin (_UNPK_ lbl) (Just arg))
350                      [(cCallableClass, [arg_ty])]       `thenNF_Tc` \ (arg_dicts, _) ->
351             returnNF_Tc arg_dicts       -- Actually a singleton bag
352
353         result_origin = CCallOrigin (_UNPK_ lbl) Nothing {- Not an arg -}
354     in
355
356         -- Arguments
357     let n_args = length args
358         tv_idxs | n_args == 0 = []
359                 | otherwise   = [1..n_args]
360     in
361     mapNF_Tc (\ _ -> newTyVarTy_OpenKind) tv_idxs       `thenNF_Tc` \ arg_tys ->
362     tcMonoExprs args arg_tys                            `thenTc`    \ (args', args_lie) ->
363
364         -- The argument types can be unboxed or boxed; the result
365         -- type must, however, be boxed since it's an argument to the IO
366         -- type constructor.
367     newTyVarTy boxedTypeKind            `thenNF_Tc` \ result_ty ->
368     let
369         io_result_ty = mkTyConApp ioTyCon [result_ty]
370         [ioDataCon]  = tyConDataCons ioTyCon
371     in
372     unifyTauTy res_ty io_result_ty              `thenTc_`
373
374         -- Construct the extra insts, which encode the
375         -- constraints on the argument and result types.
376     mapNF_Tc new_arg_dict (zipEqual "tcMonoExpr:CCall" args arg_tys)    `thenNF_Tc` \ ccarg_dicts_s ->
377     newDicts result_origin [(cReturnableClass, [result_ty])]            `thenNF_Tc` \ (ccres_dict, _) ->
378     returnTc (HsApp (HsVar (dataConId ioDataCon) `TyApp` [result_ty])
379                     (CCall lbl args' may_gc is_asm result_ty),
380                       -- do the wrapping in the newtype constructor here
381               foldr plusLIE ccres_dict ccarg_dicts_s `plusLIE` args_lie)
382 \end{code}
383
384 \begin{code}
385 tcMonoExpr (HsSCC lbl expr) res_ty
386   = tcMonoExpr expr res_ty              `thenTc` \ (expr', lie) ->
387     returnTc (HsSCC lbl expr', lie)
388
389 tcMonoExpr (HsLet binds expr) res_ty
390   = tcBindsAndThen
391         combiner
392         binds                   -- Bindings to check
393         tc_expr         `thenTc` \ (expr', lie) ->
394     returnTc (expr', lie)
395   where
396     tc_expr = tcMonoExpr expr res_ty `thenTc` \ (expr', lie) ->
397               returnTc (expr', lie)
398     combiner is_rec bind expr = HsLet (MonoBind bind [] is_rec) expr
399
400 tcMonoExpr in_expr@(HsCase scrut matches src_loc) res_ty
401   = tcAddSrcLoc src_loc                 $
402     tcAddErrCtxt (caseCtxt in_expr)     $
403
404         -- Typecheck the case alternatives first.
405         -- The case patterns tend to give good type info to use
406         -- when typechecking the scrutinee.  For example
407         --      case (map f) of
408         --        (x:xs) -> ...
409         -- will report that map is applied to too few arguments
410         --
411         -- Not only that, but it's better to check the matches on their
412         -- own, so that we get the expected results for scoped type variables.
413         --      f x = case x of
414         --              (p::a, q::b) -> (q,p)
415         -- The above should work: the match (p,q) -> (q,p) is polymorphic as
416         -- claimed by the pattern signatures.  But if we typechecked the
417         -- match with x in scope and x's type as the expected type, we'd be hosed.
418
419     tcMatchesCase matches res_ty        `thenTc`    \ (scrut_ty, matches', lie2) ->
420
421     tcAddErrCtxt (caseScrutCtxt scrut)  (
422       tcMonoExpr scrut scrut_ty
423     )                                   `thenTc`    \ (scrut',lie1) ->
424
425     returnTc (HsCase scrut' matches' src_loc, plusLIE lie1 lie2)
426
427 tcMonoExpr (HsIf pred b1 b2 src_loc) res_ty
428   = tcAddSrcLoc src_loc $
429     tcAddErrCtxt (predCtxt pred) (
430     tcMonoExpr pred boolTy      )       `thenTc`    \ (pred',lie1) ->
431
432     tcMonoExpr b1 res_ty                `thenTc`    \ (b1',lie2) ->
433     tcMonoExpr b2 res_ty                `thenTc`    \ (b2',lie3) ->
434     returnTc (HsIf pred' b1' b2' src_loc, plusLIE lie1 (plusLIE lie2 lie3))
435 \end{code}
436
437 \begin{code}
438 tcMonoExpr expr@(HsDo do_or_lc stmts src_loc) res_ty
439   = tcDoStmts do_or_lc stmts src_loc res_ty
440 \end{code}
441
442 \begin{code}
443 tcMonoExpr in_expr@(ExplicitList exprs) res_ty  -- Non-empty list
444   = unifyListTy res_ty                        `thenTc` \ elt_ty ->  
445     mapAndUnzipTc (tc_elt elt_ty) exprs       `thenTc` \ (exprs', lies) ->
446     returnTc (ExplicitListOut elt_ty exprs', plusLIEs lies)
447   where
448     tc_elt elt_ty expr
449       = tcAddErrCtxt (listCtxt expr) $
450         tcMonoExpr expr elt_ty
451
452 tcMonoExpr (ExplicitTuple exprs boxed) res_ty
453   = (if boxed
454         then unifyTupleTy (length exprs) res_ty
455         else unifyUnboxedTupleTy (length exprs) res_ty
456                                                 ) `thenTc` \ arg_tys ->
457     mapAndUnzipTc (\ (expr, arg_ty) -> tcMonoExpr expr arg_ty)
458                (exprs `zip` arg_tys) -- we know they're of equal length.
459                                                 `thenTc` \ (exprs', lies) ->
460     returnTc (ExplicitTuple exprs' boxed, plusLIEs lies)
461
462 tcMonoExpr expr@(RecordCon con_name rbinds) res_ty
463   = tcAddErrCtxt (recordConCtxt expr)           $
464     tcId con_name                       `thenNF_Tc` \ (con_expr, con_lie, con_tau) ->
465     let
466         (_, record_ty) = splitFunTys con_tau
467     in
468         -- Con is syntactically constrained to be a data constructor
469     ASSERT( maybeToBool (splitAlgTyConApp_maybe record_ty ) )
470     unifyTauTy res_ty record_ty          `thenTc_`
471
472         -- Check that the record bindings match the constructor
473     tcLookupDataCon con_name    `thenTc` \ (data_con, _, _) ->
474     let
475         bad_fields = badFields rbinds data_con
476     in
477     if not (null bad_fields) then
478         mapNF_Tc (addErrTc . badFieldCon con_name) bad_fields   `thenNF_Tc_`
479         failTc  -- Fail now, because tcRecordBinds will crash on a bad field
480     else
481
482         -- Typecheck the record bindings
483     tcRecordBinds record_ty rbinds              `thenTc` \ (rbinds', rbinds_lie) ->
484     
485     let
486       missing_s_fields = missingStrictFields rbinds data_con
487     in
488     checkTcM (null missing_s_fields)
489         (mapNF_Tc (addErrTc . missingStrictFieldCon con_name) missing_s_fields `thenNF_Tc_`
490          returnNF_Tc ())  `thenNF_Tc_`
491     let
492       missing_fields = missingFields rbinds data_con
493     in
494     checkTcM (not (opt_WarnMissingFields && not (null missing_fields)))
495         (mapNF_Tc ((warnTc True) . missingFieldCon con_name) missing_fields `thenNF_Tc_`
496          returnNF_Tc ())  `thenNF_Tc_`
497
498     returnTc (RecordConOut data_con con_expr rbinds', con_lie `plusLIE` rbinds_lie)
499
500 -- The main complication with RecordUpd is that we need to explicitly
501 -- handle the *non-updated* fields.  Consider:
502 --
503 --      data T a b = MkT1 { fa :: a, fb :: b }
504 --                 | MkT2 { fa :: a, fc :: Int -> Int }
505 --                 | MkT3 { fd :: a }
506 --      
507 --      upd :: T a b -> c -> T a c
508 --      upd t x = t { fb = x}
509 --
510 -- The type signature on upd is correct (i.e. the result should not be (T a b))
511 -- because upd should be equivalent to:
512 --
513 --      upd t x = case t of 
514 --                      MkT1 p q -> MkT1 p x
515 --                      MkT2 a b -> MkT2 p b
516 --                      MkT3 d   -> error ...
517 --
518 -- So we need to give a completely fresh type to the result record,
519 -- and then constrain it by the fields that are *not* updated ("p" above).
520 --
521 -- Note that because MkT3 doesn't contain all the fields being updated,
522 -- its RHS is simply an error, so it doesn't impose any type constraints
523 --
524 -- All this is done in STEP 4 below.
525
526 tcMonoExpr expr@(RecordUpd record_expr rbinds) res_ty
527   = tcAddErrCtxt (recordUpdCtxt expr)           $
528
529         -- STEP 0
530         -- Check that the field names are really field names
531     ASSERT( not (null rbinds) )
532     let 
533         field_names = [field_name | (field_name, _, _) <- rbinds]
534     in
535     mapNF_Tc tcLookupValueMaybe field_names             `thenNF_Tc` \ maybe_sel_ids ->
536     let
537         bad_guys = [field_name | (field_name, maybe_sel_id) <- field_names `zip` maybe_sel_ids,
538                                  case maybe_sel_id of
539                                         Nothing -> True
540                                         Just sel_id -> not (isRecordSelector sel_id)
541                    ]
542     in
543     mapNF_Tc (addErrTc . notSelector) bad_guys  `thenTc_`
544     if not (null bad_guys) then
545         failTc
546     else
547     
548         -- STEP 1
549         -- Figure out the tycon and data cons from the first field name
550     let
551         (Just sel_id : _)         = maybe_sel_ids
552         (_, tau)                  = ASSERT( isNotUsgTy (idType sel_id) )
553                                     splitForAllTys (idType sel_id)
554         Just (data_ty, _)         = splitFunTy_maybe tau        -- Must succeed since sel_id is a selector
555         (tycon, _, data_cons)     = splitAlgTyConApp data_ty
556         (con_tyvars, theta, _, _, _, _) = dataConSig (head data_cons)
557     in
558     tcInstTyVars con_tyvars                     `thenNF_Tc` \ (_, result_inst_tys, _) ->
559
560         -- STEP 2
561         -- Check that at least one constructor has all the named fields
562         -- i.e. has an empty set of bad fields returned by badFields
563     checkTc (any (null . badFields rbinds) data_cons)
564             (badFieldsUpd rbinds)               `thenTc_`
565
566         -- STEP 3
567         -- Typecheck the update bindings.
568         -- (Do this after checking for bad fields in case there's a field that
569         --  doesn't match the constructor.)
570     let
571         result_record_ty = mkTyConApp tycon result_inst_tys
572     in
573     unifyTauTy res_ty result_record_ty          `thenTc_`
574     tcRecordBinds result_record_ty rbinds       `thenTc` \ (rbinds', rbinds_lie) ->
575
576         -- STEP 4
577         -- Use the un-updated fields to find a vector of booleans saying
578         -- which type arguments must be the same in updatee and result.
579         --
580         -- WARNING: this code assumes that all data_cons in a common tycon
581         -- have FieldLabels abstracted over the same tyvars.
582     let
583         upd_field_lbls      = [recordSelectorFieldLabel sel_id | (sel_id, _, _) <- rbinds']
584         con_field_lbls_s    = map dataConFieldLabels data_cons
585
586                 -- A constructor is only relevant to this process if
587                 -- it contains all the fields that are being updated
588         relevant_field_lbls_s      = filter is_relevant con_field_lbls_s
589         is_relevant con_field_lbls = all (`elem` con_field_lbls) upd_field_lbls
590
591         non_upd_field_lbls  = concat relevant_field_lbls_s `minusList` upd_field_lbls
592         common_tyvars       = tyVarsOfTypes (map fieldLabelType non_upd_field_lbls)
593
594         mk_inst_ty (tyvar, result_inst_ty) 
595           | tyvar `elemVarSet` common_tyvars = returnNF_Tc result_inst_ty       -- Same as result type
596           | otherwise                               = newTyVarTy boxedTypeKind  -- Fresh type
597     in
598     mapNF_Tc mk_inst_ty (zip con_tyvars result_inst_tys)        `thenNF_Tc` \ inst_tys ->
599
600         -- STEP 5
601         -- Typecheck the expression to be updated
602     let
603         record_ty = mkTyConApp tycon inst_tys
604     in
605     tcMonoExpr record_expr record_ty                    `thenTc`    \ (record_expr', record_lie) ->
606
607         -- STEP 6
608         -- Figure out the LIE we need.  We have to generate some 
609         -- dictionaries for the data type context, since we are going to
610         -- do some construction.
611         --
612         -- What dictionaries do we need?  For the moment we assume that all
613         -- data constructors have the same context, and grab it from the first
614         -- constructor.  If they have varying contexts then we'd have to 
615         -- union the ones that could participate in the update.
616     let
617         (tyvars, theta, _, _, _, _) = dataConSig (head data_cons)
618         inst_env = mkTopTyVarSubst tyvars result_inst_tys
619         theta'   = substTheta inst_env theta
620     in
621     newDicts RecordUpdOrigin theta'             `thenNF_Tc` \ (con_lie, dicts) ->
622
623         -- Phew!
624     returnTc (RecordUpdOut record_expr' result_record_ty dicts rbinds', 
625               con_lie `plusLIE` record_lie `plusLIE` rbinds_lie)
626
627 tcMonoExpr (ArithSeqIn seq@(From expr)) res_ty
628   = unifyListTy res_ty                          `thenTc` \ elt_ty ->  
629     tcMonoExpr expr elt_ty                      `thenTc` \ (expr', lie1) ->
630
631     tcLookupValueByKey enumFromClassOpKey       `thenNF_Tc` \ sel_id ->
632     newMethod (ArithSeqOrigin seq)
633               sel_id [elt_ty]                   `thenNF_Tc` \ (lie2, enum_from_id) ->
634
635     returnTc (ArithSeqOut (HsVar enum_from_id) (From expr'),
636               lie1 `plusLIE` lie2)
637
638 tcMonoExpr in_expr@(ArithSeqIn seq@(FromThen expr1 expr2)) res_ty
639   = tcAddErrCtxt (arithSeqCtxt in_expr) $ 
640     unifyListTy  res_ty         `thenTc`    \ elt_ty ->  
641     tcMonoExpr expr1 elt_ty     `thenTc`    \ (expr1',lie1) ->
642     tcMonoExpr expr2 elt_ty     `thenTc`    \ (expr2',lie2) ->
643     tcLookupValueByKey enumFromThenClassOpKey           `thenNF_Tc` \ sel_id ->
644     newMethod (ArithSeqOrigin seq)
645               sel_id [elt_ty]                           `thenNF_Tc` \ (lie3, enum_from_then_id) ->
646
647     returnTc (ArithSeqOut (HsVar enum_from_then_id)
648                            (FromThen expr1' expr2'),
649               lie1 `plusLIE` lie2 `plusLIE` lie3)
650
651 tcMonoExpr in_expr@(ArithSeqIn seq@(FromTo expr1 expr2)) res_ty
652   = tcAddErrCtxt (arithSeqCtxt in_expr) $
653     unifyListTy  res_ty         `thenTc`    \ elt_ty ->  
654     tcMonoExpr expr1 elt_ty     `thenTc`    \ (expr1',lie1) ->
655     tcMonoExpr expr2 elt_ty     `thenTc`    \ (expr2',lie2) ->
656     tcLookupValueByKey enumFromToClassOpKey     `thenNF_Tc` \ sel_id ->
657     newMethod (ArithSeqOrigin seq)
658               sel_id [elt_ty]                           `thenNF_Tc` \ (lie3, enum_from_to_id) ->
659
660     returnTc (ArithSeqOut (HsVar enum_from_to_id)
661                           (FromTo expr1' expr2'),
662               lie1 `plusLIE` lie2 `plusLIE` lie3)
663
664 tcMonoExpr in_expr@(ArithSeqIn seq@(FromThenTo expr1 expr2 expr3)) res_ty
665   = tcAddErrCtxt  (arithSeqCtxt in_expr) $
666     unifyListTy  res_ty         `thenTc`    \ elt_ty ->  
667     tcMonoExpr expr1 elt_ty     `thenTc`    \ (expr1',lie1) ->
668     tcMonoExpr expr2 elt_ty     `thenTc`    \ (expr2',lie2) ->
669     tcMonoExpr expr3 elt_ty     `thenTc`    \ (expr3',lie3) ->
670     tcLookupValueByKey enumFromThenToClassOpKey `thenNF_Tc` \ sel_id ->
671     newMethod (ArithSeqOrigin seq)
672               sel_id [elt_ty]                           `thenNF_Tc` \ (lie4, eft_id) ->
673
674     returnTc (ArithSeqOut (HsVar eft_id)
675                            (FromThenTo expr1' expr2' expr3'),
676               lie1 `plusLIE` lie2 `plusLIE` lie3 `plusLIE` lie4)
677 \end{code}
678
679 %************************************************************************
680 %*                                                                      *
681 \subsection{Expressions type signatures}
682 %*                                                                      *
683 %************************************************************************
684
685 \begin{code}
686 tcMonoExpr in_expr@(ExprWithTySig expr poly_ty) res_ty
687  = tcSetErrCtxt (exprSigCtxt in_expr)   $
688    tcHsType  poly_ty            `thenTc` \ sig_tc_ty ->
689
690    if not (isForAllTy sig_tc_ty) then
691         -- Easy case
692         unifyTauTy sig_tc_ty res_ty     `thenTc_`
693         tcMonoExpr expr sig_tc_ty
694
695    else -- Signature is polymorphic
696         tcPolyExpr expr sig_tc_ty               `thenTc` \ (_, _, expr, expr_ty, lie) ->
697
698             -- Now match the signature type with res_ty.
699             -- We must not do this earlier, because res_ty might well
700             -- mention variables free in the environment, and we'd get
701             -- bogus complaints about not being able to for-all the
702             -- sig_tyvars
703         unifyTauTy res_ty expr_ty                       `thenTc_`
704
705             -- If everything is ok, return the stuff unchanged, except for
706             -- the effect of any substutions etc.  We simply discard the
707             -- result of the tcSimplifyAndCheck (inside tcPolyExpr), except for any default
708             -- resolution it may have done, which is recorded in the
709             -- substitution.
710         returnTc (expr, lie)
711 \end{code}
712
713 Typecheck expression which in most cases will be an Id.
714
715 \begin{code}
716 tcExpr_id :: RenamedHsExpr
717            -> TcM s (TcExpr,
718                      LIE,
719                      TcType)
720 tcExpr_id id_expr
721  = case id_expr of
722         HsVar name -> tcId name                 `thenNF_Tc` \ stuff -> 
723                       returnTc stuff
724         other      -> newTyVarTy_OpenKind       `thenNF_Tc` \ id_ty ->
725                       tcMonoExpr id_expr id_ty  `thenTc`    \ (id_expr', lie_id) ->
726                       returnTc (id_expr', lie_id, id_ty) 
727 \end{code}
728
729 %************************************************************************
730 %*                                                                      *
731 \subsection{@tcApp@ typchecks an application}
732 %*                                                                      *
733 %************************************************************************
734
735 \begin{code}
736
737 tcApp :: RenamedHsExpr -> [RenamedHsExpr]       -- Function and args
738       -> TcType                                 -- Expected result type of application
739       -> TcM s (TcExpr, [TcExpr],               -- Translated fun and args
740                 LIE)
741
742 tcApp fun args res_ty
743   =     -- First type-check the function
744     tcExpr_id fun                               `thenTc` \ (fun', lie_fun, fun_ty) ->
745
746     tcAddErrCtxt (wrongArgsCtxt "too many" fun args) (
747         split_fun_ty fun_ty (length args)
748     )                                           `thenTc` \ (expected_arg_tys, actual_result_ty) ->
749
750         -- Unify with expected result before type-checking the args
751         -- This is when we might detect a too-few args situation
752     tcAddErrCtxtM (checkArgsCtxt fun args res_ty actual_result_ty) (
753        unifyTauTy res_ty actual_result_ty
754     )                                                   `thenTc_`
755
756         -- Now typecheck the args
757     mapAndUnzipTc (tcArg fun)
758           (zip3 args expected_arg_tys [1..])    `thenTc` \ (args', lie_args_s) ->
759
760     -- Check that the result type doesn't have any nested for-alls.
761     -- For example, a "build" on its own is no good; it must be applied to something.
762     checkTc (isTauTy actual_result_ty)
763             (lurkingRank2Err fun fun_ty)        `thenTc_`
764
765     returnTc (fun', args', lie_fun `plusLIE` plusLIEs lie_args_s)
766
767
768 -- If an error happens we try to figure out whether the
769 -- function has been given too many or too few arguments,
770 -- and say so
771 checkArgsCtxt fun args expected_res_ty actual_res_ty tidy_env
772   = zonkTcType expected_res_ty    `thenNF_Tc` \ exp_ty' ->
773     zonkTcType actual_res_ty      `thenNF_Tc` \ act_ty' ->
774     let
775       (env1, exp_ty'') = tidyOpenType tidy_env exp_ty'
776       (env2, act_ty'') = tidyOpenType env1     act_ty'
777       (exp_args, _) = splitFunTys exp_ty''
778       (act_args, _) = splitFunTys act_ty''
779
780       message | length exp_args < length act_args = wrongArgsCtxt "too few" fun args
781               | length exp_args > length act_args = wrongArgsCtxt "too many" fun args
782               | otherwise                         = appCtxt fun args
783     in
784     returnNF_Tc (env2, message)
785
786
787 split_fun_ty :: TcType          -- The type of the function
788              -> Int                     -- Number of arguments
789              -> TcM s ([TcType],        -- Function argument types
790                        TcType)  -- Function result types
791
792 split_fun_ty fun_ty 0 
793   = returnTc ([], fun_ty)
794
795 split_fun_ty fun_ty n
796   =     -- Expect the function to have type A->B
797     unifyFunTy fun_ty           `thenTc` \ (arg_ty, res_ty) ->
798     split_fun_ty res_ty (n-1)   `thenTc` \ (arg_tys, final_res_ty) ->
799     returnTc (arg_ty:arg_tys, final_res_ty)
800 \end{code}
801
802 \begin{code}
803 tcArg :: RenamedHsExpr                  -- The function (for error messages)
804       -> (RenamedHsExpr, TcType, Int)   -- Actual argument and expected arg type
805       -> TcM s (TcExpr, LIE)    -- Resulting argument and LIE
806
807 tcArg the_fun (arg, expected_arg_ty, arg_no)
808   = tcAddErrCtxt (funAppCtxt the_fun arg arg_no) $
809     tcExpr arg expected_arg_ty
810 \end{code}
811
812
813 %************************************************************************
814 %*                                                                      *
815 \subsection{@tcId@ typchecks an identifier occurrence}
816 %*                                                                      *
817 %************************************************************************
818
819 Between the renamer and the first invocation of the UsageSP inference,
820 identifiers read from interface files will have usage information in
821 their types, whereas other identifiers will not.  The unannotTy here
822 in @tcId@ prevents this information from pointlessly propagating
823 further prior to the first usage inference.
824
825 \begin{code}
826 tcId :: Name -> NF_TcM s (TcExpr, LIE, TcType)
827
828 tcId name
829   =     -- Look up the Id and instantiate its type
830     tcLookupValueMaybe name     `thenNF_Tc` \ maybe_local ->
831
832     case maybe_local of
833       Just tc_id -> instantiate_it (OccurrenceOf tc_id) (HsVar tc_id) (unannotTy (idType tc_id))
834
835       Nothing ->    tcLookupValue name          `thenNF_Tc` \ id ->
836                     tcInstId id                 `thenNF_Tc` \ (tyvars, theta, tau) ->
837                     instantiate_it2 (OccurrenceOf id) (HsVar id) tyvars theta tau
838
839   where
840         -- The instantiate_it loop runs round instantiating the Id.
841         -- It has to be a loop because we are now prepared to entertain
842         -- types like
843         --              f:: forall a. Eq a => forall b. Baz b => tau
844         -- We want to instantiate this to
845         --              f2::tau         {f2 = f1 b (Baz b), f1 = f a (Eq a)}
846     instantiate_it orig fun ty
847       = tcInstTcType ty         `thenNF_Tc` \ (tyvars, rho) ->
848         tcSplitRhoTy rho        `thenNF_Tc` \ (theta, tau) ->
849         instantiate_it2 orig fun tyvars theta tau
850
851     instantiate_it2 orig fun tyvars theta tau
852       = if null theta then      -- Is it overloaded?
853                 returnNF_Tc (mkHsTyApp fun arg_tys, emptyLIE, tau)
854         else
855                 -- Yes, it's overloaded
856         instOverloadedFun orig fun arg_tys theta tau    `thenNF_Tc` \ (fun', lie1) ->
857         instantiate_it orig fun' tau                    `thenNF_Tc` \ (expr, lie2, final_tau) ->
858         returnNF_Tc (expr, lie1 `plusLIE` lie2, final_tau)
859
860       where
861         arg_tys = mkTyVarTys tyvars
862 \end{code}
863
864 %************************************************************************
865 %*                                                                      *
866 \subsection{@tcDoStmts@ typechecks a {\em list} of do statements}
867 %*                                                                      *
868 %************************************************************************
869
870 \begin{code}
871 tcDoStmts do_or_lc stmts src_loc res_ty
872   =     -- get the Monad and MonadZero classes
873         -- create type consisting of a fresh monad tyvar
874     ASSERT( not (null stmts) )
875     tcAddSrcLoc src_loc $
876
877     newTyVarTy (mkArrowKind boxedTypeKind boxedTypeKind)        `thenNF_Tc` \ m ->
878     newTyVarTy boxedTypeKind                                    `thenNF_Tc` \ elt_ty ->
879     unifyTauTy res_ty (mkAppTy m elt_ty)                        `thenTc_`
880
881         -- If it's a comprehension we're dealing with, 
882         -- force it to be a list comprehension.
883         -- (as of Haskell 98, monad comprehensions are no more.)
884     (case do_or_lc of
885        ListComp -> unifyListTy res_ty `thenTc_` returnTc ()
886        _        -> returnTc ())                                 `thenTc_`
887
888     tcStmts do_or_lc (mkAppTy m) stmts elt_ty   `thenTc`   \ (stmts', stmts_lie) ->
889
890         -- Build the then and zero methods in case we need them
891         -- It's important that "then" and "return" appear just once in the final LIE,
892         -- not only for typechecker efficiency, but also because otherwise during
893         -- simplification we end up with silly stuff like
894         --      then = case d of (t,r) -> t
895         --      then = then
896         -- where the second "then" sees that it already exists in the "available" stuff.
897         --
898     tcLookupValueByKey returnMClassOpKey        `thenNF_Tc` \ return_sel_id ->
899     tcLookupValueByKey thenMClassOpKey          `thenNF_Tc` \ then_sel_id ->
900     tcLookupValueByKey failMClassOpKey          `thenNF_Tc` \ fail_sel_id ->
901     newMethod DoOrigin return_sel_id [m]        `thenNF_Tc` \ (return_lie, return_id) ->
902     newMethod DoOrigin then_sel_id [m]          `thenNF_Tc` \ (then_lie, then_id) ->
903     newMethod DoOrigin fail_sel_id [m]          `thenNF_Tc` \ (fail_lie, fail_id) ->
904     let
905       monad_lie = then_lie `plusLIE` return_lie `plusLIE` fail_lie
906     in
907     returnTc (HsDoOut do_or_lc stmts' return_id then_id fail_id res_ty src_loc,
908               stmts_lie `plusLIE` monad_lie)
909 \end{code}
910
911
912 %************************************************************************
913 %*                                                                      *
914 \subsection{Record bindings}
915 %*                                                                      *
916 %************************************************************************
917
918 Game plan for record bindings
919 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
920 For each binding 
921         field = value
922 1. look up "field", to find its selector Id, which must have type
923         forall a1..an. T a1 .. an -> tau
924    where tau is the type of the field.  
925
926 2. Instantiate this type
927
928 3. Unify the (T a1 .. an) part with the "expected result type", which
929    is passed in.  This checks that all the field labels come from the
930    same type.
931
932 4. Type check the value using tcArg, passing tau as the expected
933    argument type.
934
935 This extends OK when the field types are universally quantified.
936
937 Actually, to save excessive creation of fresh type variables,
938 we 
939         
940 \begin{code}
941 tcRecordBinds
942         :: TcType               -- Expected type of whole record
943         -> RenamedRecordBinds
944         -> TcM s (TcRecordBinds, LIE)
945
946 tcRecordBinds expected_record_ty rbinds
947   = mapAndUnzipTc do_bind rbinds        `thenTc` \ (rbinds', lies) ->
948     returnTc (rbinds', plusLIEs lies)
949   where
950     do_bind (field_label, rhs, pun_flag)
951       = tcLookupValue field_label       `thenNF_Tc` \ sel_id ->
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
957         tcInstId sel_id                 `thenNF_Tc` \ (_, _, tau) ->
958
959                 -- Record selectors all have type
960                 --      forall a1..an.  T a1 .. an -> tau
961         ASSERT( maybeToBool (splitFunTy_maybe tau) )
962         let
963                 -- Selector must have type RecordType -> FieldType
964           Just (record_ty, field_ty) = splitFunTy_maybe tau
965         in
966         unifyTauTy expected_record_ty record_ty         `thenTc_`
967         tcPolyExpr rhs field_ty                         `thenTc` \ (rhs', lie, _, _, _) ->
968         returnTc ((sel_id, rhs', pun_flag), lie)
969
970 badFields rbinds data_con
971   = [field_name | (field_name, _, _) <- rbinds,
972                   not (field_name `elem` field_names)
973     ]
974   where
975     field_names = map fieldLabelName (dataConFieldLabels data_con)
976
977 missingStrictFields rbinds data_con
978   = [ fn | fn <- strict_field_names,
979                  not (fn `elem` field_names_used)
980     ]
981   where
982     field_names_used = [ field_name | (field_name, _, _) <- rbinds ]
983     strict_field_names = mapMaybe isStrict field_info
984
985     isStrict (fl, MarkedStrict) = Just (fieldLabelName fl)
986     isStrict _                  = Nothing
987
988     field_info = zip (dataConFieldLabels data_con)
989                      (dataConStrictMarks data_con)
990
991 missingFields rbinds data_con
992   = [ fn | fn <- non_strict_field_names, not (fn `elem` field_names_used) ]
993   where
994     field_names_used = [ field_name | (field_name, _, _) <- rbinds ]
995
996      -- missing strict fields have already been flagged as 
997      -- being so, so leave them out here.
998     non_strict_field_names = mapMaybe isn'tStrict field_info
999
1000     isn'tStrict (fl, MarkedStrict) = Nothing
1001     isn'tStrict (fl, _)            = Just (fieldLabelName fl)
1002
1003     field_info = zip (dataConFieldLabels data_con)
1004                      (dataConStrictMarks data_con)
1005
1006 \end{code}
1007
1008 %************************************************************************
1009 %*                                                                      *
1010 \subsection{@tcMonoExprs@ typechecks a {\em list} of expressions}
1011 %*                                                                      *
1012 %************************************************************************
1013
1014 \begin{code}
1015 tcMonoExprs :: [RenamedHsExpr] -> [TcType] -> TcM s ([TcExpr], LIE)
1016
1017 tcMonoExprs [] [] = returnTc ([], emptyLIE)
1018 tcMonoExprs (expr:exprs) (ty:tys)
1019  = tcMonoExpr  expr  ty         `thenTc` \ (expr',  lie1) ->
1020    tcMonoExprs exprs tys                `thenTc` \ (exprs', lie2) ->
1021    returnTc (expr':exprs', lie1 `plusLIE` lie2)
1022 \end{code}
1023
1024
1025 % =================================================
1026
1027 Errors and contexts
1028 ~~~~~~~~~~~~~~~~~~~
1029
1030 Mini-utils:
1031 \begin{code}
1032 pp_nest_hang :: String -> SDoc -> SDoc
1033 pp_nest_hang lbl stuff = nest 2 (hang (text lbl) 4 stuff)
1034 \end{code}
1035
1036 Boring and alphabetical:
1037 \begin{code}
1038 arithSeqCtxt expr
1039   = hang (ptext SLIT("In an arithmetic sequence:")) 4 (ppr expr)
1040
1041 caseCtxt expr
1042   = hang (ptext SLIT("In the case expression:")) 4 (ppr expr)
1043
1044 caseScrutCtxt expr
1045   = hang (ptext SLIT("In the scrutinee of a case expression:")) 4 (ppr expr)
1046
1047 exprSigCtxt expr
1048   = hang (ptext SLIT("In an expression with a type signature:"))
1049          4 (ppr expr)
1050
1051 listCtxt expr
1052   = hang (ptext SLIT("In the list element:")) 4 (ppr expr)
1053
1054 predCtxt expr
1055   = hang (ptext SLIT("In the predicate expression:")) 4 (ppr expr)
1056
1057 sectionRAppCtxt expr
1058   = hang (ptext SLIT("In the right section:")) 4 (ppr expr)
1059
1060 sectionLAppCtxt expr
1061   = hang (ptext SLIT("In the left section:")) 4 (ppr expr)
1062
1063 funAppCtxt fun arg arg_no
1064   = hang (hsep [ ptext SLIT("In the"), speakNth arg_no, ptext SLIT("argument of"), 
1065                     quotes (ppr fun) <> text ", namely"])
1066          4 (quotes (ppr arg))
1067
1068 wrongArgsCtxt too_many_or_few fun args
1069   = hang (ptext SLIT("Probable cause:") <+> quotes (ppr fun)
1070                     <+> ptext SLIT("is applied to") <+> text too_many_or_few 
1071                     <+> ptext SLIT("arguments in the call"))
1072          4 (parens (ppr the_app))
1073   where
1074     the_app = foldl HsApp fun args      -- Used in error messages
1075
1076 appCtxt fun args
1077   = ptext SLIT("In the application") <+> quotes (ppr the_app)
1078   where
1079     the_app = foldl HsApp fun args      -- Used in error messages
1080
1081 lurkingRank2Err fun fun_ty
1082   = hang (hsep [ptext SLIT("Illegal use of"), quotes (ppr fun)])
1083          4 (vcat [ptext SLIT("It is applied to too few arguments"),  
1084                   ptext SLIT("so that the result type has for-alls in it")])
1085
1086 rank2ArgCtxt arg expected_arg_ty
1087   = ptext SLIT("In a polymorphic function argument:") <+> ppr arg
1088
1089 badFieldsUpd rbinds
1090   = hang (ptext SLIT("No constructor has all these fields:"))
1091          4 (pprQuotedList fields)
1092   where
1093     fields = [field | (field, _, _) <- rbinds]
1094
1095 recordUpdCtxt expr = ptext SLIT("In the record update:") <+> ppr expr
1096 recordConCtxt expr = ptext SLIT("In the record construction:") <+> ppr expr
1097
1098 notSelector field
1099   = hsep [quotes (ppr field), ptext SLIT("is not a record selector")]
1100
1101 illegalCcallTyErr isArg ty
1102   = hang (hsep [ptext SLIT("Unacceptable"), arg_or_res, ptext SLIT("type in _ccall_ or _casm_:")])
1103          4 (hsep [ppr ty])
1104   where
1105    arg_or_res
1106     | isArg     = ptext SLIT("argument")
1107     | otherwise = ptext SLIT("result")
1108
1109
1110 missingStrictFieldCon :: Name -> Name -> SDoc
1111 missingStrictFieldCon con field
1112   = hsep [ptext SLIT("Constructor") <+> quotes (ppr con),
1113           ptext SLIT("does not have the required strict field"), quotes (ppr field)]
1114
1115 missingFieldCon :: Name -> Name -> SDoc
1116 missingFieldCon con field
1117   = hsep [ptext SLIT("Field") <+> quotes (ppr field),
1118           ptext SLIT("is not initialised")]
1119 \end{code}