2 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1996
4 \section[TcExpr]{Typecheck an expression}
7 module TcExpr ( tcExpr, tcStmt, tcId ) where
9 #include "HsVersions.h"
11 import HsSyn ( HsExpr(..), HsLit(..), ArithSeqInfo(..),
12 HsBinds(..), Stmt(..), DoOrListComp(..),
13 pprParendExpr, failureFreePat, collectPatBinders
15 import RnHsSyn ( RenamedHsExpr,
16 RenamedStmt, RenamedRecordBinds
18 import TcHsSyn ( TcExpr, TcStmt,
24 import BasicTypes ( RecFlag(..) )
26 import Inst ( Inst, InstOrigin(..), OverloadedLit(..),
27 LIE, emptyLIE, plusLIE, plusLIEs, newOverloadedLit,
28 newMethod, newMethodWithGivenTy, newDicts )
29 import TcBinds ( tcBindsAndThen, checkSigTyVars, sigThetaCtxt )
30 import TcEnv ( TcIdOcc(..), tcInstId,
31 tcLookupLocalValue, tcLookupGlobalValue, tcLookupClassByKey,
32 tcLookupGlobalValueByKey, newMonoIds, tcGetGlobalTyVars,
33 tcExtendGlobalTyVars, tcLookupGlobalValueMaybe,
36 import TcMatches ( tcMatchesCase, tcMatchExpected )
37 import TcMonoType ( tcHsType )
38 import TcPat ( tcPat )
39 import TcSimplify ( tcSimplifyAndCheck )
40 import TcType ( TcType, TcMaybe(..),
41 tcInstType, tcInstSigTcType, tcInstTyVars,
42 tcInstSigType, tcInstTcType, tcInstTheta, tcSplitRhoTy,
43 newTyVarTy, newTyVarTys, zonkTcTyVars, zonkTcType )
44 import TcKind ( TcKind )
46 import Class ( Class )
47 import FieldLabel ( FieldLabel, fieldLabelName, fieldLabelType )
48 import Id ( idType, dataConFieldLabels, dataConSig, recordSelectorFieldLabel,
52 import Kind ( Kind, mkBoxedTypeKind, mkTypeKind, mkArrowKind )
53 import Name ( Name{-instance Eq-} )
54 import Type ( mkFunTy, mkAppTy, mkTyVarTy, mkTyVarTys, mkRhoTy,
55 splitFunTy_maybe, splitFunTys,
57 splitForAllTys, splitRhoTy, splitSigmaTy,
58 isTauTy, mkFunTys, tyVarsOfType, tyVarsOfTypes,
59 splitForAllTy_maybe, splitAlgTyConApp, splitAlgTyConApp_maybe
61 import TyVar ( TyVarSet, emptyTyVarEnv, zipTyVarEnv,
62 unionTyVarSets, elementOfTyVarSet, mkTyVarSet, tyVarSetToList
64 import TyCon ( tyConDataCons )
65 import TysPrim ( intPrimTy, charPrimTy, doublePrimTy,
66 floatPrimTy, addrPrimTy, realWorldTy
68 import TysWiredIn ( addrTy, mkTupleTy,
69 boolTy, charTy, stringTy, mkListTy
71 import PrelInfo ( ioTyCon_NAME )
72 import Unify ( unifyTauTy, unifyTauTyList, unifyTauTyLists,
73 unifyFunTy, unifyListTy, unifyTupleTy
75 import Unique ( Unique, cCallableClassKey, cReturnableClassKey,
76 enumFromClassOpKey, enumFromThenClassOpKey,
77 enumFromToClassOpKey, enumFromThenToClassOpKey,
78 thenMClassOpKey, zeroClassOpKey, returnMClassOpKey
81 import PprType ( GenType, GenTyVar ) -- Instances
82 import Maybes ( maybeToBool )
83 import ListSetOps ( minusList )
88 tcExpr :: RenamedHsExpr -- Expession to type check
89 -> TcType s -- Expected type (could be a type variable)
90 -> TcM s (TcExpr s, LIE s)
93 %************************************************************************
95 \subsection{The TAUT rules for variables}
97 %************************************************************************
100 tcExpr (HsVar name) res_ty
101 = tcId name `thenNF_Tc` \ (expr', lie, id_ty) ->
102 unifyTauTy id_ty res_ty `thenTc_`
104 -- Check that the result type doesn't have any nested for-alls.
105 -- For example, a "build" on its own is no good; it must be
106 -- applied to something.
107 checkTc (isTauTy id_ty)
108 (lurkingRank2Err name id_ty) `thenTc_`
110 returnTc (expr', lie)
113 %************************************************************************
115 \subsection{Literals}
117 %************************************************************************
122 tcExpr (HsLit (HsInt i)) res_ty
123 = newOverloadedLit (LiteralOrigin (HsInt i))
124 (OverloadedIntegral i)
125 res_ty `thenNF_Tc` \ stuff ->
128 tcExpr (HsLit (HsFrac f)) res_ty
129 = newOverloadedLit (LiteralOrigin (HsFrac f))
130 (OverloadedFractional f)
131 res_ty `thenNF_Tc` \ stuff ->
135 tcExpr (HsLit lit@(HsLitLit s)) res_ty
136 = tcLookupClassByKey cCallableClassKey `thenNF_Tc` \ cCallableClass ->
137 newDicts (LitLitOrigin (_UNPK_ s))
138 [(cCallableClass, [res_ty])] `thenNF_Tc` \ (dicts, _) ->
139 returnTc (HsLitOut lit res_ty, dicts)
145 tcExpr (HsLit lit@(HsCharPrim c)) res_ty
146 = unifyTauTy charPrimTy res_ty `thenTc_`
147 returnTc (HsLitOut lit charPrimTy, emptyLIE)
149 tcExpr (HsLit lit@(HsStringPrim s)) res_ty
150 = unifyTauTy addrPrimTy res_ty `thenTc_`
151 returnTc (HsLitOut lit addrPrimTy, emptyLIE)
153 tcExpr (HsLit lit@(HsIntPrim i)) res_ty
154 = unifyTauTy intPrimTy res_ty `thenTc_`
155 returnTc (HsLitOut lit intPrimTy, emptyLIE)
157 tcExpr (HsLit lit@(HsFloatPrim f)) res_ty
158 = unifyTauTy floatPrimTy res_ty `thenTc_`
159 returnTc (HsLitOut lit floatPrimTy, emptyLIE)
161 tcExpr (HsLit lit@(HsDoublePrim d)) res_ty
162 = unifyTauTy doublePrimTy res_ty `thenTc_`
163 returnTc (HsLitOut lit doublePrimTy, emptyLIE)
166 Unoverloaded literals:
169 tcExpr (HsLit lit@(HsChar c)) res_ty
170 = unifyTauTy charTy res_ty `thenTc_`
171 returnTc (HsLitOut lit charTy, emptyLIE)
173 tcExpr (HsLit lit@(HsString str)) res_ty
174 = unifyTauTy stringTy res_ty `thenTc_`
175 returnTc (HsLitOut lit stringTy, emptyLIE)
178 %************************************************************************
180 \subsection{Other expression forms}
182 %************************************************************************
185 tcExpr (HsPar expr) res_ty -- preserve parens so printing needn't guess where they go
188 tcExpr (NegApp expr neg) res_ty = tcExpr (HsApp neg expr) res_ty
190 tcExpr (HsLam match) res_ty
191 = tcMatchExpected [] res_ty match `thenTc` \ (match',lie) ->
192 returnTc (HsLam match', lie)
194 tcExpr (HsApp e1 e2) res_ty = accum e1 [e2]
196 accum (HsApp e1 e2) args = accum e1 (e2:args)
198 = tcApp fun args res_ty `thenTc` \ (fun', args', lie) ->
199 returnTc (foldl HsApp fun' args', lie)
201 -- equivalent to (op e1) e2:
202 tcExpr (OpApp arg1 op fix arg2) res_ty
203 = tcApp op [arg1,arg2] res_ty `thenTc` \ (op', [arg1', arg2'], lie) ->
204 returnTc (OpApp arg1' op' fix arg2', lie)
207 Note that the operators in sections are expected to be binary, and
208 a type error will occur if they aren't.
211 -- Left sections, equivalent to
218 tcExpr in_expr@(SectionL arg op) res_ty
219 = tcApp op [arg] res_ty `thenTc` \ (op', [arg'], lie) ->
221 -- Check that res_ty is a function type
222 -- Without this check we barf in the desugarer on
224 -- because it tries to desugar to
225 -- f op = \r -> 3 op r
226 -- so (3 `op`) had better be a function!
227 tcAddErrCtxt (sectionLAppCtxt in_expr) $
228 unifyFunTy res_ty `thenTc_`
230 returnTc (SectionL arg' op', lie)
232 -- Right sections, equivalent to \ x -> x op expr, or
235 tcExpr in_expr@(SectionR op expr) res_ty
236 = tcExpr_id op `thenTc` \ (op', lie1, op_ty) ->
237 tcAddErrCtxt (sectionRAppCtxt in_expr) $
238 split_fun_ty op_ty 2 {- two args -} `thenTc` \ ([arg1_ty, arg2_ty], op_res_ty) ->
239 tcExpr expr arg2_ty `thenTc` \ (expr',lie2) ->
240 unifyTauTy (mkFunTy arg1_ty op_res_ty) res_ty `thenTc_`
241 returnTc (SectionR op' expr', lie1 `plusLIE` lie2)
244 The interesting thing about @ccall@ is that it is just a template
245 which we instantiate by filling in details about the types of its
246 argument and result (ie minimal typechecking is performed). So, the
247 basic story is that we allocate a load of type variables (to hold the
248 arg/result types); unify them with the args/result; and store them for
252 tcExpr (CCall lbl args may_gc is_asm ignored_fake_result_ty) res_ty
253 = -- Get the callable and returnable classes.
254 tcLookupClassByKey cCallableClassKey `thenNF_Tc` \ cCallableClass ->
255 tcLookupClassByKey cReturnableClassKey `thenNF_Tc` \ cReturnableClass ->
256 tcLookupTyCon ioTyCon_NAME `thenTc` \ (_,_,ioTyCon) ->
259 new_arg_dict (arg, arg_ty)
260 = newDicts (CCallOrigin (_UNPK_ lbl) (Just arg))
261 [(cCallableClass, [arg_ty])] `thenNF_Tc` \ (arg_dicts, _) ->
262 returnNF_Tc arg_dicts -- Actually a singleton bag
264 result_origin = CCallOrigin (_UNPK_ lbl) Nothing {- Not an arg -}
268 mapNF_Tc (\ _ -> newTyVarTy mkTypeKind) [1..(length args)] `thenNF_Tc` \ ty_vars ->
269 tcExprs args ty_vars `thenTc` \ (args', args_lie) ->
271 -- The argument types can be unboxed or boxed; the result
272 -- type must, however, be boxed since it's an argument to the IO
274 newTyVarTy mkBoxedTypeKind `thenNF_Tc` \ result_ty ->
276 io_result_ty = mkTyConApp ioTyCon [result_ty]
278 case tyConDataCons ioTyCon of { [ioDataCon] ->
279 unifyTauTy io_result_ty res_ty `thenTc_`
281 -- Construct the extra insts, which encode the
282 -- constraints on the argument and result types.
283 mapNF_Tc new_arg_dict (zipEqual "tcExpr:CCall" args ty_vars) `thenNF_Tc` \ ccarg_dicts_s ->
284 newDicts result_origin [(cReturnableClass, [result_ty])] `thenNF_Tc` \ (ccres_dict, _) ->
286 returnTc (HsApp (HsVar (RealId ioDataCon) `TyApp` [result_ty])
287 (CCall lbl args' may_gc is_asm io_result_ty),
288 -- do the wrapping in the newtype constructor here
289 foldr plusLIE ccres_dict ccarg_dicts_s `plusLIE` args_lie)
294 tcExpr (HsSCC label expr) res_ty
295 = tcExpr expr res_ty `thenTc` \ (expr', lie) ->
296 returnTc (HsSCC label expr', lie)
298 tcExpr (HsLet binds expr) res_ty
301 binds -- Bindings to check
302 (tc_expr) `thenTc` \ (expr', lie) ->
303 returnTc (expr', lie)
305 tc_expr = tcExpr expr res_ty `thenTc` \ (expr', lie) ->
306 returnTc (expr', lie)
307 combiner is_rec bind expr = HsLet (MonoBind bind [] is_rec) expr
309 tcExpr in_expr@(HsCase expr matches src_loc) res_ty
310 = tcAddSrcLoc src_loc $
311 newTyVarTy mkTypeKind `thenNF_Tc` \ expr_ty ->
312 tcExpr expr expr_ty `thenTc` \ (expr',lie1) ->
314 tcAddErrCtxt (caseCtxt in_expr) $
315 tcMatchesCase (mkFunTy expr_ty res_ty) matches
316 `thenTc` \ (matches',lie2) ->
318 returnTc (HsCase expr' matches' src_loc, plusLIE lie1 lie2)
320 tcExpr (HsIf pred b1 b2 src_loc) res_ty
321 = tcAddSrcLoc src_loc $
322 tcAddErrCtxt (predCtxt pred) (
323 tcExpr pred boolTy ) `thenTc` \ (pred',lie1) ->
325 tcExpr b1 res_ty `thenTc` \ (b1',lie2) ->
326 tcExpr b2 res_ty `thenTc` \ (b2',lie3) ->
327 returnTc (HsIf pred' b1' b2' src_loc, plusLIE lie1 (plusLIE lie2 lie3))
331 tcExpr expr@(HsDo do_or_lc stmts src_loc) res_ty
332 = tcDoStmts do_or_lc stmts src_loc res_ty
336 tcExpr in_expr@(ExplicitList exprs) res_ty -- Non-empty list
337 = unifyListTy res_ty `thenTc` \ elt_ty ->
338 mapAndUnzipTc (tc_elt elt_ty) exprs `thenTc` \ (exprs', lies) ->
339 returnTc (ExplicitListOut elt_ty exprs', plusLIEs lies)
342 = tcAddErrCtxt (listCtxt expr) $
345 tcExpr (ExplicitTuple exprs) res_ty
346 = unifyTupleTy (length exprs) res_ty `thenTc` \ arg_tys ->
347 mapAndUnzipTc (\ (expr, arg_ty) -> tcExpr expr arg_ty)
348 (exprs `zip` arg_tys) -- we know they're of equal length.
349 `thenTc` \ (exprs', lies) ->
350 returnTc (ExplicitTuple exprs', plusLIEs lies)
352 tcExpr (RecordCon con_name _ rbinds) res_ty
353 = tcLookupGlobalValue con_name `thenNF_Tc` \ con_id ->
354 tcId con_name `thenNF_Tc` \ (con_expr, con_lie, con_tau) ->
356 (_, record_ty) = splitFunTys con_tau
358 -- Con is syntactically constrained to be a data constructor
359 ASSERT( maybeToBool (splitAlgTyConApp_maybe record_ty ) )
360 unifyTauTy record_ty res_ty `thenTc_`
362 -- Check that the record bindings match the constructor
364 bad_fields = badFields rbinds con_id
366 checkTc (null bad_fields) (badFieldsCon con_id bad_fields) `thenTc_`
368 -- Typecheck the record bindings
369 -- (Do this after checkRecordFields in case there's a field that
370 -- doesn't match the constructor.)
371 tcRecordBinds record_ty rbinds `thenTc` \ (rbinds', rbinds_lie) ->
373 returnTc (RecordCon (RealId con_id) con_expr rbinds', con_lie `plusLIE` rbinds_lie)
376 -- The main complication with RecordUpd is that we need to explicitly
377 -- handle the *non-updated* fields. Consider:
379 -- data T a b = MkT1 { fa :: a, fb :: b }
380 -- | MkT2 { fa :: a, fc :: Int -> Int }
381 -- | MkT3 { fd :: a }
383 -- upd :: T a b -> c -> T a c
384 -- upd t x = t { fb = x}
386 -- The type signature on upd is correct (i.e. the result should not be (T a b))
387 -- because upd should be equivalent to:
389 -- upd t x = case t of
390 -- MkT1 p q -> MkT1 p x
391 -- MkT2 a b -> MkT2 p b
392 -- MkT3 d -> error ...
394 -- So we need to give a completely fresh type to the result record,
395 -- and then constrain it by the fields that are *not* updated ("p" above).
397 -- Note that because MkT3 doesn't contain all the fields being updated,
398 -- its RHS is simply an error, so it doesn't impose any type constraints
400 -- All this is done in STEP 4 below.
402 tcExpr (RecordUpd record_expr rbinds) res_ty
403 = tcAddErrCtxt recordUpdCtxt $
406 -- Figure out the tycon and data cons from the first field name
407 ASSERT( not (null rbinds) )
409 ((first_field_name, _, _) : rest) = rbinds
411 tcLookupGlobalValueMaybe first_field_name `thenNF_Tc` \ maybe_sel_id ->
412 (case maybe_sel_id of
413 Just sel_id | isRecordSelector sel_id -> returnTc sel_id
414 other -> failWithTc (notSelector first_field_name)
415 ) `thenTc` \ sel_id ->
417 (_, tau) = splitForAllTys (idType sel_id)
418 Just (data_ty, _) = splitFunTy_maybe tau -- Must succeed since sel_id is a selector
419 (tycon, _, data_cons) = splitAlgTyConApp data_ty
420 (con_tyvars, theta, _, _, _, _) = dataConSig (head data_cons)
422 tcInstTyVars con_tyvars `thenNF_Tc` \ (_, result_inst_tys, _) ->
425 -- Check for bad fields
426 checkTc (any (null . badFields rbinds) data_cons)
427 (badFieldsUpd rbinds) `thenTc_`
429 -- Typecheck the update bindings.
430 -- (Do this after checking for bad fields in case there's a field that
431 -- doesn't match the constructor.)
433 result_record_ty = mkTyConApp tycon result_inst_tys
435 unifyTauTy result_record_ty res_ty `thenTc_`
436 tcRecordBinds result_record_ty rbinds `thenTc` \ (rbinds', rbinds_lie) ->
439 -- Use the un-updated fields to find a vector of booleans saying
440 -- which type arguments must be the same in updatee and result.
442 -- WARNING: this code assumes that all data_cons in a common tycon
443 -- have FieldLabels abstracted over the same tyvars.
445 upd_field_lbls = [recordSelectorFieldLabel sel_id | (RealId sel_id, _, _) <- rbinds']
446 con_field_lbls_s = map dataConFieldLabels data_cons
448 -- A constructor is only relevant to this process if
449 -- it contains all the fields that are being updated
450 relevant_field_lbls_s = filter is_relevant con_field_lbls_s
451 is_relevant con_field_lbls = all (`elem` con_field_lbls) upd_field_lbls
453 non_upd_field_lbls = concat relevant_field_lbls_s `minusList` upd_field_lbls
454 common_tyvars = tyVarsOfTypes (map fieldLabelType non_upd_field_lbls)
456 mk_inst_ty (tyvar, result_inst_ty)
457 | tyvar `elementOfTyVarSet` common_tyvars = returnNF_Tc result_inst_ty -- Same as result type
458 | otherwise = newTyVarTy mkBoxedTypeKind -- Fresh type
460 mapNF_Tc mk_inst_ty (zip con_tyvars result_inst_tys) `thenNF_Tc` \ inst_tys ->
463 -- Typecheck the expression to be updated
465 record_ty = mkTyConApp tycon inst_tys
467 tcExpr record_expr record_ty `thenTc` \ (record_expr', record_lie) ->
470 -- Figure out the LIE we need. We have to generate some
471 -- dictionaries for the data type context, since we are going to
472 -- do some construction.
474 -- What dictionaries do we need? For the moment we assume that all
475 -- data constructors have the same context, and grab it from the first
476 -- constructor. If they have varying contexts then we'd have to
477 -- union the ones that could participate in the update.
479 (tyvars, theta, _, _, _, _) = dataConSig (head data_cons)
480 inst_env = zipTyVarEnv tyvars result_inst_tys
482 tcInstTheta inst_env theta `thenNF_Tc` \ theta' ->
483 newDicts RecordUpdOrigin theta' `thenNF_Tc` \ (con_lie, dicts) ->
486 returnTc (RecordUpdOut record_expr' result_record_ty dicts rbinds',
487 con_lie `plusLIE` record_lie `plusLIE` rbinds_lie)
489 tcExpr (ArithSeqIn seq@(From expr)) res_ty
490 = unifyListTy res_ty `thenTc` \ elt_ty ->
491 tcExpr expr elt_ty `thenTc` \ (expr', lie1) ->
493 tcLookupGlobalValueByKey enumFromClassOpKey `thenNF_Tc` \ sel_id ->
494 newMethod (ArithSeqOrigin seq)
495 (RealId sel_id) [elt_ty] `thenNF_Tc` \ (lie2, enum_from_id) ->
497 returnTc (ArithSeqOut (HsVar enum_from_id) (From expr'),
500 tcExpr in_expr@(ArithSeqIn seq@(FromThen expr1 expr2)) res_ty
501 = tcAddErrCtxt (arithSeqCtxt in_expr) $
502 unifyListTy res_ty `thenTc` \ elt_ty ->
503 tcExpr expr1 elt_ty `thenTc` \ (expr1',lie1) ->
504 tcExpr expr2 elt_ty `thenTc` \ (expr2',lie2) ->
505 tcLookupGlobalValueByKey enumFromThenClassOpKey `thenNF_Tc` \ sel_id ->
506 newMethod (ArithSeqOrigin seq)
507 (RealId sel_id) [elt_ty] `thenNF_Tc` \ (lie3, enum_from_then_id) ->
509 returnTc (ArithSeqOut (HsVar enum_from_then_id)
510 (FromThen expr1' expr2'),
511 lie1 `plusLIE` lie2 `plusLIE` lie3)
513 tcExpr in_expr@(ArithSeqIn seq@(FromTo expr1 expr2)) res_ty
514 = tcAddErrCtxt (arithSeqCtxt in_expr) $
515 unifyListTy res_ty `thenTc` \ elt_ty ->
516 tcExpr expr1 elt_ty `thenTc` \ (expr1',lie1) ->
517 tcExpr expr2 elt_ty `thenTc` \ (expr2',lie2) ->
518 tcLookupGlobalValueByKey enumFromToClassOpKey `thenNF_Tc` \ sel_id ->
519 newMethod (ArithSeqOrigin seq)
520 (RealId sel_id) [elt_ty] `thenNF_Tc` \ (lie3, enum_from_to_id) ->
522 returnTc (ArithSeqOut (HsVar enum_from_to_id)
523 (FromTo expr1' expr2'),
524 lie1 `plusLIE` lie2 `plusLIE` lie3)
526 tcExpr in_expr@(ArithSeqIn seq@(FromThenTo expr1 expr2 expr3)) res_ty
527 = tcAddErrCtxt (arithSeqCtxt in_expr) $
528 unifyListTy res_ty `thenTc` \ elt_ty ->
529 tcExpr expr1 elt_ty `thenTc` \ (expr1',lie1) ->
530 tcExpr expr2 elt_ty `thenTc` \ (expr2',lie2) ->
531 tcExpr expr3 elt_ty `thenTc` \ (expr3',lie3) ->
532 tcLookupGlobalValueByKey enumFromThenToClassOpKey `thenNF_Tc` \ sel_id ->
533 newMethod (ArithSeqOrigin seq)
534 (RealId sel_id) [elt_ty] `thenNF_Tc` \ (lie4, eft_id) ->
536 returnTc (ArithSeqOut (HsVar eft_id)
537 (FromThenTo expr1' expr2' expr3'),
538 lie1 `plusLIE` lie2 `plusLIE` lie3 `plusLIE` lie4)
541 %************************************************************************
543 \subsection{Expressions type signatures}
545 %************************************************************************
548 tcExpr in_expr@(ExprWithTySig expr poly_ty) res_ty
549 = tcSetErrCtxt (exprSigCtxt in_expr) $
550 tcHsType poly_ty `thenTc` \ sigma_sig ->
552 -- Check the tau-type part
553 tcInstSigType sigma_sig `thenNF_Tc` \ sigma_sig' ->
555 (sig_tyvars', sig_theta', sig_tau') = splitSigmaTy sigma_sig'
558 -- Type check the expression, expecting the signature type
559 tcExtendGlobalTyVars sig_tyvars' (
561 ) `thenTc` \ (texpr, lie) ->
563 -- Check the type variables of the signature,
564 -- *after* typechecking the expression
565 checkSigTyVars sig_tyvars' sig_tau' `thenTc` \ zonked_sig_tyvars ->
567 -- Check overloading constraints
568 newDicts SignatureOrigin sig_theta' `thenNF_Tc` \ (sig_dicts, _) ->
569 tcAddErrCtxtM (sigThetaCtxt sig_dicts) (
572 (mkTyVarSet zonked_sig_tyvars)
576 -- Now match the signature type with res_ty.
577 -- We must not do this earlier, because res_ty might well
578 -- mention variables free in the environment, and we'd get
579 -- bogus complaints about not being able to for-all the
581 unifyTauTy sig_tau' res_ty `thenTc_`
583 -- If everything is ok, return the stuff unchanged, except for
584 -- the effect of any substutions etc. We simply discard the
585 -- result of the tcSimplifyAndCheck, except for any default
586 -- resolution it may have done, which is recorded in the
588 returnTc (texpr, lie)
592 Typecheck expression which in most cases will be an Id.
595 tcExpr_id :: RenamedHsExpr
601 HsVar name -> tcId name `thenNF_Tc` \ stuff ->
603 other -> newTyVarTy mkTypeKind `thenNF_Tc` \ id_ty ->
604 tcExpr id_expr id_ty `thenTc` \ (id_expr', lie_id) ->
605 returnTc (id_expr', lie_id, id_ty)
608 %************************************************************************
610 \subsection{@tcApp@ typchecks an application}
612 %************************************************************************
616 tcApp :: RenamedHsExpr -> [RenamedHsExpr] -- Function and args
617 -> TcType s -- Expected result type of application
618 -> TcM s (TcExpr s, [TcExpr s], -- Translated fun and args
621 tcApp fun args res_ty
622 = -- First type-check the function
623 tcExpr_id fun `thenTc` \ (fun', lie_fun, fun_ty) ->
625 tcAddErrCtxt (wrongArgsCtxt "too many" fun args) (
626 split_fun_ty fun_ty (length args)
627 ) `thenTc` \ (expected_arg_tys, actual_result_ty) ->
629 -- Unify with expected result before type-checking the args
630 -- This is when we might detect a too-few args situation
631 tcAddErrCtxtM (checkArgsCtxt fun args res_ty actual_result_ty) (
632 unifyTauTy res_ty actual_result_ty
635 -- Now typecheck the args
636 mapAndUnzipTc (tcArg fun)
637 (zip3 args expected_arg_tys [1..]) `thenTc` \ (args', lie_args_s) ->
639 -- Check that the result type doesn't have any nested for-alls.
640 -- For example, a "build" on its own is no good; it must be applied to something.
641 checkTc (isTauTy actual_result_ty)
642 (lurkingRank2Err fun fun_ty) `thenTc_`
644 returnTc (fun', args', lie_fun `plusLIE` plusLIEs lie_args_s)
647 -- If an error happens we try to figure out whether the
648 -- function has been given too many or too few arguments,
650 checkArgsCtxt fun args expected_res_ty actual_res_ty
651 = zonkTcType expected_res_ty `thenNF_Tc` \ exp_ty' ->
652 zonkTcType actual_res_ty `thenNF_Tc` \ act_ty' ->
654 (exp_args, _) = splitFunTys exp_ty'
655 (act_args, _) = splitFunTys act_ty'
656 message | length exp_args < length act_args = wrongArgsCtxt "too few" fun args
657 | length exp_args > length act_args = wrongArgsCtxt "too many" fun args
658 | otherwise = appCtxt fun args
663 split_fun_ty :: TcType s -- The type of the function
664 -> Int -- Number of arguments
665 -> TcM s ([TcType s], -- Function argument types
666 TcType s) -- Function result types
668 split_fun_ty fun_ty 0
669 = returnTc ([], fun_ty)
671 split_fun_ty fun_ty n
672 = -- Expect the function to have type A->B
673 unifyFunTy fun_ty `thenTc` \ (arg_ty, res_ty) ->
674 split_fun_ty res_ty (n-1) `thenTc` \ (arg_tys, final_res_ty) ->
675 returnTc (arg_ty:arg_tys, final_res_ty)
679 tcArg :: RenamedHsExpr -- The function (for error messages)
680 -> (RenamedHsExpr, TcType s, Int) -- Actual argument and expected arg type
681 -> TcM s (TcExpr s, LIE s) -- Resulting argument and LIE
683 tcArg the_fun (arg, expected_arg_ty, arg_no)
684 = tcAddErrCtxt (funAppCtxt the_fun arg arg_no) $
685 tcPolyExpr arg expected_arg_ty
688 -- tcPolyExpr is like tcExpr, except that the expected type
689 -- can be a polymorphic one.
690 tcPolyExpr arg expected_arg_ty
691 | not (maybeToBool (splitForAllTy_maybe expected_arg_ty))
692 = -- The ordinary, non-rank-2 polymorphic case
693 tcExpr arg expected_arg_ty
696 = -- Ha! The argument type of the function is a for-all type,
697 -- An example of rank-2 polymorphism.
699 -- No need to instantiate the argument type... it's must be the result
700 -- of instantiating a function involving rank-2 polymorphism, so there
701 -- isn't any danger of using the same tyvars twice
702 -- The argument type shouldn't be overloaded type (hence ASSERT)
704 -- To ensure that the forall'd type variables don't get unified with each
705 -- other or any other types, we make fresh *signature* type variables
706 -- and unify them with the tyvars.
707 tcInstSigTcType expected_arg_ty `thenNF_Tc` \ (sig_tyvars, sig_rho) ->
709 (sig_theta, sig_tau) = splitRhoTy sig_rho
711 -- Type-check the arg and unify with expected type
712 tcExpr arg sig_tau `thenTc` \ (arg', lie_arg) ->
714 -- Check that the arg_tyvars havn't been constrained
715 -- The interesting bit here is that we must include the free variables
716 -- of the expected arg ty. Here's an example:
717 -- runST (newVar True)
718 -- Here, if we don't make a check, we'll get a type (ST s (MutVar s Bool))
719 -- for (newVar True), with s fresh. Then we unify with the runST's arg type
720 -- forall s'. ST s' a. That unifies s' with s, and a with MutVar s Bool.
721 -- So now s' isn't unconstrained because it's linked to a.
722 -- Conclusion: include the free vars of the expected arg type in the
723 -- list of "free vars" for the signature check.
725 tcAddErrCtxt (rank2ArgCtxt arg expected_arg_ty) $
726 tcExtendGlobalTyVars (tyVarSetToList (tyVarsOfType expected_arg_ty)) $
728 checkSigTyVars sig_tyvars sig_tau `thenTc` \ zonked_sig_tyvars ->
729 newDicts Rank2Origin sig_theta `thenNF_Tc` \ (sig_dicts, dict_ids) ->
730 -- ToDo: better origin
732 tcAddErrCtxtM (sigThetaCtxt sig_dicts) $
733 tcSimplifyAndCheck (text "rank2")
734 (mkTyVarSet zonked_sig_tyvars)
735 sig_dicts lie_arg `thenTc` \ (free_insts, inst_binds) ->
737 -- This HsLet binds any Insts which came out of the simplification.
738 -- It's a bit out of place here, but using AbsBind involves inventing
739 -- a couple of new names which seems worse.
740 returnTc ( TyLam zonked_sig_tyvars $
742 HsLet (MonoBind inst_binds [] Recursive)
748 %************************************************************************
750 \subsection{@tcId@ typchecks an identifier occurrence}
752 %************************************************************************
755 tcId :: Name -> NF_TcM s (TcExpr s, LIE s, TcType s)
758 = -- Look up the Id and instantiate its type
759 tcLookupLocalValue name `thenNF_Tc` \ maybe_local ->
762 Just tc_id -> instantiate_it (TcId tc_id) (idType tc_id)
764 Nothing -> tcLookupGlobalValue name `thenNF_Tc` \ id ->
765 tcInstType emptyTyVarEnv (idType id) `thenNF_Tc` \ inst_ty ->
767 (tyvars, rho) = splitForAllTys inst_ty
769 instantiate_it2 (RealId id) tyvars rho
772 -- The instantiate_it loop runs round instantiating the Id.
773 -- It has to be a loop because we are now prepared to entertain
775 -- f:: forall a. Eq a => forall b. Baz b => tau
776 -- We want to instantiate this to
777 -- f2::tau {f2 = f1 b (Baz b), f1 = f a (Eq a)}
778 instantiate_it tc_id_occ ty
779 = tcInstTcType ty `thenNF_Tc` \ (tyvars, rho) ->
780 instantiate_it2 tc_id_occ tyvars rho
782 instantiate_it2 tc_id_occ tyvars rho
783 = tcSplitRhoTy rho `thenNF_Tc` \ (theta, tau) ->
784 if null theta then -- Is it overloaded?
785 returnNF_Tc (mkHsTyApp (HsVar tc_id_occ) arg_tys, emptyLIE, tau)
787 -- Yes, it's overloaded
788 newMethodWithGivenTy (OccurrenceOf tc_id_occ)
789 tc_id_occ arg_tys theta tau `thenNF_Tc` \ (lie1, meth_id) ->
790 instantiate_it meth_id tau `thenNF_Tc` \ (expr, lie2, final_tau) ->
791 returnNF_Tc (expr, lie1 `plusLIE` lie2, final_tau)
794 arg_tys = mkTyVarTys tyvars
797 %************************************************************************
799 \subsection{@tcDoStmts@ typechecks a {\em list} of do statements}
801 %************************************************************************
804 tcDoStmts do_or_lc stmts src_loc res_ty
805 = -- get the Monad and MonadZero classes
806 -- create type consisting of a fresh monad tyvar
807 ASSERT( not (null stmts) )
808 tcAddSrcLoc src_loc $
809 newTyVarTy (mkArrowKind mkBoxedTypeKind mkBoxedTypeKind) `thenNF_Tc` \ m ->
812 tc_stmts [] = returnTc (([], error "tc_stmts"), emptyLIE)
813 tc_stmts (stmt:stmts) = tcStmt tcExpr do_or_lc (mkAppTy m) combine_stmts stmt $
816 combine_stmts stmt@(ReturnStmt _) (Just ty) ([], _) = ([stmt], ty)
817 combine_stmts stmt@(ExprStmt e _) (Just ty) ([], _) = ([stmt], ty)
818 combine_stmts stmt _ ([], _) = panic "Bad last stmt tcDoStmts"
819 combine_stmts stmt _ (stmts, ty) = (stmt:stmts, ty)
821 tc_stmts stmts `thenTc` \ ((stmts', result_ty), final_lie) ->
822 unifyTauTy result_ty res_ty `thenTc_`
824 -- Build the then and zero methods in case we need them
825 -- It's important that "then" and "return" appear just once in the final LIE,
826 -- not only for typechecker efficiency, but also because otherwise during
827 -- simplification we end up with silly stuff like
828 -- then = case d of (t,r) -> t
830 -- where the second "then" sees that it already exists in the "available" stuff.
832 tcLookupGlobalValueByKey returnMClassOpKey `thenNF_Tc` \ return_sel_id ->
833 tcLookupGlobalValueByKey thenMClassOpKey `thenNF_Tc` \ then_sel_id ->
834 tcLookupGlobalValueByKey zeroClassOpKey `thenNF_Tc` \ zero_sel_id ->
836 (RealId return_sel_id) [m] `thenNF_Tc` \ (return_lie, return_id) ->
838 (RealId then_sel_id) [m] `thenNF_Tc` \ (then_lie, then_id) ->
840 (RealId zero_sel_id) [m] `thenNF_Tc` \ (zero_lie, zero_id) ->
842 monad_lie = then_lie `plusLIE` return_lie `plusLIE` perhaps_zero_lie
843 perhaps_zero_lie | all failure_free stmts' = emptyLIE
844 | otherwise = zero_lie
846 failure_free (BindStmt pat _ _) = failureFreePat pat
847 failure_free (GuardStmt _ _) = False
848 failure_free other_stmt = True
850 returnTc (HsDoOut do_or_lc stmts' return_id then_id zero_id res_ty src_loc,
851 final_lie `plusLIE` monad_lie)
856 tcStmt :: (RenamedHsExpr -> TcType s -> TcM s (TcExpr s, LIE s)) -- This is tcExpr
857 -- The sole, disgusting, reason for this parameter
858 -- is to get the effect of polymorphic recursion
859 -- ToDo: rm when booting with Haskell 1.3
861 -> (TcType s -> TcType s) -- Relationship type of pat and rhs in pat <- rhs
862 -> (TcStmt s -> Maybe (TcType s) -> thing -> thing)
864 -> TcM s (thing, LIE s)
865 -> TcM s (thing, LIE s)
867 tcStmt tc_expr do_or_lc m combine stmt@(ReturnStmt exp) do_next
868 = ASSERT( case do_or_lc of { DoStmt -> False; ListComp -> True; Guard -> True } )
869 tcSetErrCtxt (stmtCtxt do_or_lc stmt) (
870 newTyVarTy mkTypeKind `thenNF_Tc` \ exp_ty ->
871 tc_expr exp exp_ty `thenTc` \ (exp', exp_lie) ->
872 returnTc (ReturnStmt exp', exp_lie, m exp_ty)
873 ) `thenTc` \ (stmt', stmt_lie, stmt_ty) ->
874 do_next `thenTc` \ (thing', thing_lie) ->
875 returnTc (combine stmt' (Just stmt_ty) thing',
876 stmt_lie `plusLIE` thing_lie)
878 tcStmt tc_expr do_or_lc m combine stmt@(GuardStmt exp src_loc) do_next
879 = ASSERT( case do_or_lc of { DoStmt -> False; ListComp -> True; Guard -> True } )
880 newTyVarTy mkTypeKind `thenNF_Tc` \ exp_ty ->
881 tcAddSrcLoc src_loc (
882 tcSetErrCtxt (stmtCtxt do_or_lc stmt) (
883 tc_expr exp boolTy `thenTc` \ (exp', exp_lie) ->
884 returnTc (GuardStmt exp' src_loc, exp_lie)
885 )) `thenTc` \ (stmt', stmt_lie) ->
886 do_next `thenTc` \ (thing', thing_lie) ->
887 returnTc (combine stmt' Nothing thing',
888 stmt_lie `plusLIE` thing_lie)
890 tcStmt tc_expr do_or_lc m combine stmt@(ExprStmt exp src_loc) do_next
891 = ASSERT( case do_or_lc of { DoStmt -> True; ListComp -> False; Guard -> False } )
892 newTyVarTy mkTypeKind `thenNF_Tc` \ exp_ty ->
893 tcAddSrcLoc src_loc (
894 tcSetErrCtxt (stmtCtxt do_or_lc stmt) (
895 newTyVarTy mkTypeKind `thenNF_Tc` \ tau ->
897 -- exp has type (m tau) for some tau (doesn't matter what)
900 tc_expr exp exp_ty `thenTc` \ (exp', exp_lie) ->
901 returnTc (ExprStmt exp' src_loc, exp_lie, exp_ty)
902 )) `thenTc` \ (stmt', stmt_lie, stmt_ty) ->
903 do_next `thenTc` \ (thing', thing_lie) ->
904 returnTc (combine stmt' (Just stmt_ty) thing',
905 stmt_lie `plusLIE` thing_lie)
907 tcStmt tc_expr do_or_lc m combine stmt@(BindStmt pat exp src_loc) do_next
908 = newMonoIds (collectPatBinders pat) mkBoxedTypeKind $ \ _ ->
909 tcAddSrcLoc src_loc (
910 tcSetErrCtxt (stmtCtxt do_or_lc stmt) (
911 tcPat pat `thenTc` \ (pat', pat_lie, pat_ty) ->
912 tc_expr exp (m pat_ty) `thenTc` \ (exp', exp_lie) ->
914 -- NB: the environment has been extended with the new binders
915 -- which the rhs can't "see", but the renamer should have made
916 -- sure that everything is distinct by now, so there's no problem.
917 -- Putting the tcExpr before the newMonoIds messes up the nesting
918 -- of error contexts, so I didn't bother
920 returnTc (BindStmt pat' exp' src_loc, pat_lie `plusLIE` exp_lie)
921 )) `thenTc` \ (stmt', stmt_lie) ->
922 do_next `thenTc` \ (thing', thing_lie) ->
923 returnTc (combine stmt' Nothing thing',
924 stmt_lie `plusLIE` thing_lie)
926 tcStmt tc_expr do_or_lc m combine (LetStmt binds) do_next
927 = tcBindsAndThen -- No error context, but a binding group is
928 combine' -- rather a large thing for an error context anyway
932 combine' is_rec binds' thing' = combine (LetStmt (MonoBind binds' [] is_rec)) Nothing thing'
935 %************************************************************************
937 \subsection{Record bindings}
939 %************************************************************************
941 Game plan for record bindings
942 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
945 1. look up "field", to find its selector Id, which must have type
946 forall a1..an. T a1 .. an -> tau
947 where tau is the type of the field.
949 2. Instantiate this type
951 3. Unify the (T a1 .. an) part with the "expected result type", which
952 is passed in. This checks that all the field labels come from the
955 4. Type check the value using tcArg, passing tau as the expected
958 This extends OK when the field types are universally quantified.
960 Actually, to save excessive creation of fresh type variables,
965 :: TcType s -- Expected type of whole record
966 -> RenamedRecordBinds
967 -> TcM s (TcRecordBinds s, LIE s)
969 tcRecordBinds expected_record_ty rbinds
970 = mapAndUnzipTc do_bind rbinds `thenTc` \ (rbinds', lies) ->
971 returnTc (rbinds', plusLIEs lies)
973 do_bind (field_label, rhs, pun_flag)
974 = tcLookupGlobalValue field_label `thenNF_Tc` \ sel_id ->
975 ASSERT( isRecordSelector sel_id )
976 -- This lookup and assertion will surely succeed, because
977 -- we check that the fields are indeed record selectors
978 -- before calling tcRecordBinds
980 tcInstId sel_id `thenNF_Tc` \ (_, _, tau) ->
982 -- Record selectors all have type
983 -- forall a1..an. T a1 .. an -> tau
984 ASSERT( maybeToBool (splitFunTy_maybe tau) )
986 -- Selector must have type RecordType -> FieldType
987 Just (record_ty, field_ty) = splitFunTy_maybe tau
989 unifyTauTy expected_record_ty record_ty `thenTc_`
990 tcPolyExpr rhs field_ty `thenTc` \ (rhs', lie) ->
991 returnTc ((RealId sel_id, rhs', pun_flag), lie)
993 badFields rbinds data_con
994 = [field_name | (field_name, _, _) <- rbinds,
995 not (field_name `elem` field_names)
998 field_names = map fieldLabelName (dataConFieldLabels data_con)
1001 %************************************************************************
1003 \subsection{@tcExprs@ typechecks a {\em list} of expressions}
1005 %************************************************************************
1008 tcExprs :: [RenamedHsExpr] -> [TcType s] -> TcM s ([TcExpr s], LIE s)
1010 tcExprs [] [] = returnTc ([], emptyLIE)
1011 tcExprs (expr:exprs) (ty:tys)
1012 = tcExpr expr ty `thenTc` \ (expr', lie1) ->
1013 tcExprs exprs tys `thenTc` \ (exprs', lie2) ->
1014 returnTc (expr':exprs', lie1 `plusLIE` lie2)
1018 % =================================================
1025 pp_nest_hang :: String -> SDoc -> SDoc
1026 pp_nest_hang label stuff = nest 2 (hang (text label) 4 stuff)
1029 Boring and alphabetical:
1032 = hang (ptext SLIT("In an arithmetic sequence:")) 4 (ppr expr)
1035 = hang (ptext SLIT("In the case expression:")) 4 (ppr expr)
1038 = hang (ptext SLIT("In an expression with a type signature:"))
1042 = hang (ptext SLIT("In the list element:")) 4 (ppr expr)
1045 = hang (ptext SLIT("In the predicate expression:")) 4 (ppr expr)
1047 sectionRAppCtxt expr
1048 = hang (ptext SLIT("In the right section:")) 4 (ppr expr)
1050 sectionLAppCtxt expr
1051 = hang (ptext SLIT("In the left section:")) 4 (ppr expr)
1053 funAppCtxt fun arg arg_no
1054 = hang (hsep [ ptext SLIT("In the"), speakNth arg_no, ptext SLIT("argument of"),
1055 quotes (ppr fun) <> text ", namely"])
1056 4 (quotes (ppr arg))
1058 stmtCtxt do_or_lc stmt
1059 = hang (ptext SLIT("In a") <+> whatever <> colon)
1062 whatever = case do_or_lc of
1063 ListComp -> ptext SLIT("list-comprehension qualifier")
1064 DoStmt -> ptext SLIT("do statement")
1065 Guard -> ptext SLIT("guard")
1067 wrongArgsCtxt too_many_or_few fun args
1068 = hang (ptext SLIT("Probable cause:") <+> ppr fun
1069 <+> ptext SLIT("is applied to") <+> text too_many_or_few
1070 <+> ptext SLIT("arguments in the call"))
1073 the_app = foldl HsApp fun args -- Used in error messages
1076 = ptext SLIT("In the application") <+> (ppr the_app)
1078 the_app = foldl HsApp fun args -- Used in error messages
1080 lurkingRank2Err fun fun_ty
1081 = hang (hsep [ptext SLIT("Illegal use of"), quotes (ppr fun)])
1082 4 (vcat [ptext SLIT("It is applied to too few arguments"),
1083 ptext SLIT("so that the result type has for-alls in it")])
1085 rank2ArgCtxt arg expected_arg_ty
1086 = ptext SLIT("In a polymorphic function argument:") <+> ppr arg
1089 = hang (ptext SLIT("No constructor has all these fields:"))
1090 4 (pprQuotedList fields)
1092 fields = [field | (field, _, _) <- rbinds]
1094 recordUpdCtxt = ptext SLIT("In a record update construct")
1096 badFieldsCon con fields
1097 = hsep [ptext SLIT("Constructor"), ppr con,
1098 ptext SLIT("does not have field(s):"), pprQuotedList fields]
1101 = hsep [quotes (ppr field), ptext SLIT("is not a record selector")]