Add rebindable syntax for if-then-else
[ghc-hetmet.git] / compiler / typecheck / TcExpr.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The GRASP/AQUA Project, Glasgow University, 1992-1998
4 %
5 \section[TcExpr]{Typecheck an expression}
6
7 \begin{code}
8 -- The above warning supression flag is a temporary kludge.
9 -- While working on this module you are encouraged to remove it and fix
10 -- any warnings in the module. See
11 --     http://hackage.haskell.org/trac/ghc/wiki/Commentary/CodingStyle#Warnings
12 -- for details
13
14 module TcExpr ( tcPolyExpr, tcPolyExprNC, tcMonoExpr, tcMonoExprNC, 
15                 tcInferRho, tcInferRhoNC, 
16                 tcSyntaxOp, tcCheckId,
17                 addExprErrCtxt ) where
18
19 #include "HsVersions.h"
20
21 #ifdef GHCI     /* Only if bootstrapped */
22 import {-# SOURCE #-}   TcSplice( tcSpliceExpr, tcBracket )
23 import qualified DsMeta
24 #endif
25
26 import HsSyn
27 import TcHsSyn
28 import TcRnMonad
29 import TcUnify
30 import BasicTypes
31 import Inst
32 import TcBinds
33 import TcEnv
34 import TcArrows
35 import TcMatches
36 import TcHsType
37 import TcPat
38 import TcMType
39 import TcType
40 import Id
41 import DataCon
42 import Name
43 import TyCon
44 import Type
45 import Coercion
46 import Var
47 import VarSet
48 import TysWiredIn
49 import TysPrim( intPrimTy )
50 import PrimOp( tagToEnumKey )
51 import PrelNames
52 import DynFlags
53 import SrcLoc
54 import Util
55 import ListSetOps
56 import Maybes
57 import Outputable
58 import FastString
59 import Control.Monad
60 \end{code}
61
62 %************************************************************************
63 %*                                                                      *
64 \subsection{Main wrappers}
65 %*                                                                      *
66 %************************************************************************
67
68 \begin{code}
69 tcPolyExpr, tcPolyExprNC
70          :: LHsExpr Name        -- Expression to type check
71          -> TcSigmaType         -- Expected type (could be a polytpye)
72          -> TcM (LHsExpr TcId)  -- Generalised expr with expected type
73
74 -- tcPolyExpr is a convenient place (frequent but not too frequent)
75 -- place to add context information.
76 -- The NC version does not do so, usually because the caller wants
77 -- to do so himself.
78
79 tcPolyExpr expr res_ty  
80   = addExprErrCtxt expr $
81     do { traceTc "tcPolyExpr" (ppr res_ty); tcPolyExprNC expr res_ty }
82
83 tcPolyExprNC expr res_ty
84   = do { traceTc "tcPolyExprNC" (ppr res_ty)
85        ; (gen_fn, expr') <- tcGen (GenSkol res_ty) res_ty $ \ _ rho ->
86                             tcMonoExprNC expr rho
87        ; return (mkLHsWrap gen_fn expr') }
88
89 ---------------
90 tcMonoExpr, tcMonoExprNC 
91     :: LHsExpr Name      -- Expression to type check
92     -> TcRhoType         -- Expected type (could be a type variable)
93                          -- Definitely no foralls at the top
94     -> TcM (LHsExpr TcId)
95
96 tcMonoExpr expr res_ty
97   = addErrCtxt (exprCtxt expr) $
98     tcMonoExprNC expr res_ty
99
100 tcMonoExprNC (L loc expr) res_ty
101   = ASSERT( not (isSigmaTy res_ty) )
102     setSrcSpan loc $
103     do  { expr' <- tcExpr expr res_ty
104         ; return (L loc expr') }
105
106 ---------------
107 tcInferRho, tcInferRhoNC :: LHsExpr Name -> TcM (LHsExpr TcId, TcRhoType)
108 -- Infer a *rho*-type.  This is, in effect, a special case
109 -- for ids and partial applications, so that if
110 --     f :: Int -> (forall a. a -> a) -> Int
111 -- then we can infer
112 --     f 3 :: (forall a. a -> a) -> Int
113 -- And that in turn is useful 
114 --  (a) for the function part of any application (see tcApp)
115 --  (b) for the special rule for '$'
116 tcInferRho expr = addErrCtxt (exprCtxt expr) (tcInferRhoNC expr)
117
118 tcInferRhoNC (L loc expr)
119   = setSrcSpan loc $
120     do { (expr', rho) <- tcInfExpr expr
121        ; return (L loc expr', rho) }
122
123 tcInfExpr :: HsExpr Name -> TcM (HsExpr TcId, TcRhoType)
124 tcInfExpr (HsVar f)     = tcInferId f
125 tcInfExpr (HsPar e)     = do { (e', ty) <- tcInferRhoNC e
126                              ; return (HsPar e', ty) }
127 tcInfExpr (HsApp e1 e2) = tcInferApp e1 [e2]                                  
128 tcInfExpr e             = tcInfer (tcExpr e)
129 \end{code}
130
131
132 %************************************************************************
133 %*                                                                      *
134         tcExpr: the main expression typechecker
135 %*                                                                      *
136 %************************************************************************
137
138 \begin{code}
139 tcExpr :: HsExpr Name -> TcRhoType -> TcM (HsExpr TcId)
140 tcExpr e res_ty | debugIsOn && isSigmaTy res_ty     -- Sanity check
141                 = pprPanic "tcExpr: sigma" (ppr res_ty $$ ppr e)
142
143 tcExpr (HsVar name)  res_ty = tcCheckId name res_ty
144
145 tcExpr (HsApp e1 e2) res_ty = tcApp e1 [e2] res_ty
146
147 tcExpr (HsLit lit)   res_ty = do { let lit_ty = hsLitType lit
148                                  ; tcWrapResult (HsLit lit) lit_ty res_ty }
149
150 tcExpr (HsPar expr)  res_ty = do { expr' <- tcMonoExprNC expr res_ty
151                                  ; return (HsPar expr') }
152
153 tcExpr (HsSCC lbl expr) res_ty 
154   = do { expr' <- tcMonoExpr expr res_ty
155        ; return (HsSCC lbl expr') }
156
157 tcExpr (HsTickPragma info expr) res_ty 
158   = do { expr' <- tcMonoExpr expr res_ty
159        ; return (HsTickPragma info expr') }
160
161 tcExpr (HsCoreAnn lbl expr) res_ty
162   = do  { expr' <- tcMonoExpr expr res_ty
163         ; return (HsCoreAnn lbl expr') }
164
165 tcExpr (HsOverLit lit) res_ty  
166   = do  { lit' <- newOverloadedLit (LiteralOrigin lit) lit res_ty
167         ; return (HsOverLit lit') }
168
169 tcExpr (NegApp expr neg_expr) res_ty
170   = do  { neg_expr' <- tcSyntaxOp NegateOrigin neg_expr
171                                   (mkFunTy res_ty res_ty)
172         ; expr' <- tcMonoExpr expr res_ty
173         ; return (NegApp expr' neg_expr') }
174
175 tcExpr (HsIPVar ip) res_ty
176   = do  { let origin = IPOccOrigin ip
177                 -- Implicit parameters must have a *tau-type* not a 
178                 -- type scheme.  We enforce this by creating a fresh
179                 -- type variable as its type.  (Because res_ty may not
180                 -- be a tau-type.)
181         ; ip_ty <- newFlexiTyVarTy argTypeKind  -- argTypeKind: it can't be an unboxed tuple
182         ; ip_var <- emitWanted origin (mkIPPred ip ip_ty)
183         ; tcWrapResult (HsIPVar (IPName ip_var)) ip_ty res_ty }
184
185 tcExpr (HsLam match) res_ty
186   = do  { (co_fn, match') <- tcMatchLambda match res_ty
187         ; return (mkHsWrap co_fn (HsLam match')) }
188
189 tcExpr (ExprWithTySig expr sig_ty) res_ty
190  = do { sig_tc_ty <- tcHsSigType ExprSigCtxt sig_ty
191
192       -- Remember to extend the lexical type-variable environment
193       ; (gen_fn, expr') 
194             <- tcGen (SigSkol ExprSigCtxt) sig_tc_ty $ \ skol_tvs res_ty ->
195                tcExtendTyVarEnv2 (hsExplicitTvs sig_ty `zip` mkTyVarTys skol_tvs) $
196                                 -- See Note [More instantiated than scoped] in TcBinds
197                tcMonoExprNC expr res_ty
198
199       ; let inner_expr = ExprWithTySigOut (mkLHsWrap gen_fn expr') sig_ty
200
201       ; (inst_wrap, rho) <- deeplyInstantiate ExprSigOrigin sig_tc_ty
202       ; tcWrapResult (mkHsWrap inst_wrap inner_expr) rho res_ty }
203
204 tcExpr (HsType ty) _
205   = failWithTc (text "Can't handle type argument:" <+> ppr ty)
206         -- This is the syntax for type applications that I was planning
207         -- but there are difficulties (e.g. what order for type args)
208         -- so it's not enabled yet.
209         -- Can't eliminate it altogether from the parser, because the
210         -- same parser parses *patterns*.
211 \end{code}
212
213
214 %************************************************************************
215 %*                                                                      *
216                 Infix operators and sections
217 %*                                                                      *
218 %************************************************************************
219
220 Note [Left sections]
221 ~~~~~~~~~~~~~~~~~~~~
222 Left sections, like (4 *), are equivalent to
223         \ x -> (*) 4 x,
224 or, if PostfixOperators is enabled, just
225         (*) 4
226 With PostfixOperators we don't actually require the function to take
227 two arguments at all.  For example, (x `not`) means (not x); you get
228 postfix operators!  Not Haskell 98, but it's less work and kind of
229 useful.
230
231 Note [Typing rule for ($)]
232 ~~~~~~~~~~~~~~~~~~~~~~~~~~
233 People write 
234    runST $ blah
235 so much, where 
236    runST :: (forall s. ST s a) -> a
237 that I have finally given in and written a special type-checking
238 rule just for saturated appliations of ($).  
239   * Infer the type of the first argument
240   * Decompose it; should be of form (arg2_ty -> res_ty), 
241        where arg2_ty might be a polytype
242   * Use arg2_ty to typecheck arg2
243
244 Note [Typing rule for seq]
245 ~~~~~~~~~~~~~~~~~~~~~~~~~~
246 We want to allow
247        x `seq` (# p,q #)
248 which suggests this type for seq:
249    seq :: forall (a:*) (b:??). a -> b -> b, 
250 with (b:??) meaning that be can be instantiated with an unboxed tuple.
251 But that's ill-kinded!  Function arguments can't be unboxed tuples.
252 And indeed, you could not expect to do this with a partially-applied
253 'seq'; it's only going to work when it's fully applied.  so it turns
254 into 
255     case x of _ -> (# p,q #)
256
257 For a while I slid by by giving 'seq' an ill-kinded type, but then
258 the simplifier eta-reduced an application of seq and Lint blew up 
259 with a kind error.  It seems more uniform to treat 'seq' as it it
260 was a language construct.  
261
262 See Note [seqId magic] in MkId, and 
263
264
265 \begin{code}
266 tcExpr (OpApp arg1 op fix arg2) res_ty
267   | (L loc (HsVar op_name)) <- op
268   , op_name `hasKey` seqIdKey           -- Note [Typing rule for seq]
269   = do { arg1_ty <- newFlexiTyVarTy liftedTypeKind
270        ; let arg2_ty = res_ty
271        ; arg1' <- tcArg op (arg1, arg1_ty, 1)
272        ; arg2' <- tcArg op (arg2, arg2_ty, 2)
273        ; op_id <- tcLookupId op_name
274        ; let op' = L loc (HsWrap (mkWpTyApps [arg1_ty, arg2_ty]) (HsVar op_id))
275        ; return $ OpApp arg1' op' fix arg2' }
276
277   | (L loc (HsVar op_name)) <- op
278   , op_name `hasKey` dollarIdKey        -- Note [Typing rule for ($)]
279   = do { traceTc "Application rule" (ppr op)
280        ; (arg1', arg1_ty) <- tcInferRho arg1
281        ; let doc = ptext (sLit "The first argument of ($) takes")
282        ; (co_arg1, [arg2_ty], op_res_ty) <- matchExpectedFunTys doc 1 arg1_ty
283          -- arg2_ty maybe polymorphic; that's the point
284        ; arg2' <- tcArg op (arg2, arg2_ty, 2)
285        ; co_res <- unifyType op_res_ty res_ty
286        ; op_id <- tcLookupId op_name
287        ; let op' = L loc (HsWrap (mkWpTyApps [arg2_ty, op_res_ty]) (HsVar op_id))
288        ; return $ mkHsWrapCoI co_res $
289          OpApp (mkLHsWrapCoI co_arg1 arg1') op' fix arg2' }
290
291   | otherwise
292   = do { traceTc "Non Application rule" (ppr op)
293        ; (op', op_ty) <- tcInferFun op
294        ; (co_fn, arg_tys, op_res_ty) <- unifyOpFunTys op 2 op_ty
295        ; co_res <- unifyType op_res_ty res_ty
296        ; [arg1', arg2'] <- tcArgs op [arg1, arg2] arg_tys
297        ; return $ mkHsWrapCoI co_res $
298          OpApp arg1' (mkLHsWrapCoI co_fn op') fix arg2' }
299
300 -- Right sections, equivalent to \ x -> x `op` expr, or
301 --      \ x -> op x expr
302  
303 tcExpr (SectionR op arg2) res_ty
304   = do { (op', op_ty) <- tcInferFun op
305        ; (co_fn, [arg1_ty, arg2_ty], op_res_ty) <- unifyOpFunTys op 2 op_ty
306        ; co_res <- unifyType (mkFunTy arg1_ty op_res_ty) res_ty
307        ; arg2' <- tcArg op (arg2, arg2_ty, 2)
308        ; return $ mkHsWrapCoI co_res $
309          SectionR (mkLHsWrapCoI co_fn op') arg2' } 
310
311 tcExpr (SectionL arg1 op) res_ty
312   = do { (op', op_ty) <- tcInferFun op
313        ; dflags <- getDOpts         -- Note [Left sections]
314        ; let n_reqd_args | xopt Opt_PostfixOperators dflags = 1
315                          | otherwise                        = 2
316
317        ; (co_fn, (arg1_ty:arg_tys), op_res_ty) <- unifyOpFunTys op n_reqd_args op_ty
318        ; co_res <- unifyType (mkFunTys arg_tys op_res_ty) res_ty
319        ; arg1' <- tcArg op (arg1, arg1_ty, 1)
320        ; return $ mkHsWrapCoI co_res $
321          SectionL arg1' (mkLHsWrapCoI co_fn op') }
322
323 tcExpr (ExplicitTuple tup_args boxity) res_ty
324   | all tupArgPresent tup_args
325   = do { let tup_tc = tupleTyCon boxity (length tup_args)
326        ; (coi, arg_tys) <- matchExpectedTyConApp tup_tc res_ty
327        ; tup_args1 <- tcTupArgs tup_args arg_tys
328        ; return $ mkHsWrapCoI coi (ExplicitTuple tup_args1 boxity) }
329     
330   | otherwise
331   = -- The tup_args are a mixture of Present and Missing (for tuple sections)
332     do { let kind = case boxity of { Boxed   -> liftedTypeKind
333                                    ; Unboxed -> argTypeKind }
334              arity = length tup_args 
335              tup_tc = tupleTyCon boxity arity
336
337        ; arg_tys <- newFlexiTyVarTys (tyConArity tup_tc) kind
338        ; let actual_res_ty
339                  = mkFunTys [ty | (ty, Missing _) <- arg_tys `zip` tup_args]
340                             (mkTyConApp tup_tc arg_tys)
341
342        ; coi <- unifyType actual_res_ty res_ty
343
344        -- Handle tuple sections where
345        ; tup_args1 <- tcTupArgs tup_args arg_tys
346        
347        ; return $ mkHsWrapCoI coi (ExplicitTuple tup_args1 boxity) }
348
349 tcExpr (ExplicitList _ exprs) res_ty
350   = do  { (coi, elt_ty) <- matchExpectedListTy res_ty
351         ; exprs' <- mapM (tc_elt elt_ty) exprs
352         ; return $ mkHsWrapCoI coi (ExplicitList elt_ty exprs') }
353   where
354     tc_elt elt_ty expr = tcPolyExpr expr elt_ty
355
356 tcExpr (ExplicitPArr _ exprs) res_ty    -- maybe empty
357   = do  { (coi, elt_ty) <- matchExpectedPArrTy res_ty
358         ; exprs' <- mapM (tc_elt elt_ty) exprs  
359         ; return $ mkHsWrapCoI coi (ExplicitPArr elt_ty exprs') }
360   where
361     tc_elt elt_ty expr = tcPolyExpr expr elt_ty
362 \end{code}
363
364 %************************************************************************
365 %*                                                                      *
366                 Let, case, if, do
367 %*                                                                      *
368 %************************************************************************
369
370 \begin{code}
371 tcExpr (HsLet binds expr) res_ty
372   = do  { (binds', expr') <- tcLocalBinds binds $
373                              tcMonoExpr expr res_ty   
374         ; return (HsLet binds' expr') }
375
376 tcExpr (HsCase scrut matches) exp_ty
377   = do  {  -- We used to typecheck the case alternatives first.
378            -- The case patterns tend to give good type info to use
379            -- when typechecking the scrutinee.  For example
380            --   case (map f) of
381            --     (x:xs) -> ...
382            -- will report that map is applied to too few arguments
383            --
384            -- But now, in the GADT world, we need to typecheck the scrutinee
385            -- first, to get type info that may be refined in the case alternatives
386           (scrut', scrut_ty) <- tcInferRho scrut
387
388         ; traceTc "HsCase" (ppr scrut_ty)
389         ; matches' <- tcMatchesCase match_ctxt scrut_ty matches exp_ty
390         ; return (HsCase scrut' matches') }
391  where
392     match_ctxt = MC { mc_what = CaseAlt,
393                       mc_body = tcBody }
394
395 tcExpr (HsIf Nothing pred b1 b2) res_ty    -- Ordinary 'if'
396   = do { pred' <- tcMonoExpr pred boolTy
397        ; b1' <- tcMonoExpr b1 res_ty
398        ; b2' <- tcMonoExpr b2 res_ty
399        ; return (HsIf Nothing pred' b1' b2') }
400
401 tcExpr (HsIf (Just fun) pred b1 b2) res_ty   -- Rebindable syntax
402   = do { pred_ty <- newFlexiTyVarTy openTypeKind
403        ; b_ty <- newFlexiTyVarTy openTypeKind
404        ; let if_ty = mkFunTys [pred_ty, b_ty, b_ty] res_ty
405        ; fun' <- tcSyntaxOp IfOrigin fun if_ty
406        ; pred' <- tcMonoExpr pred pred_ty
407        ; b1' <- tcMonoExpr b1 b_ty
408        ; b2' <- tcMonoExpr b2 b_ty
409        ; return (HsIf (Just fun') pred' b1' b2') }
410
411 tcExpr (HsDo do_or_lc stmts body _) res_ty
412   = tcDoStmts do_or_lc stmts body res_ty
413
414 tcExpr (HsProc pat cmd) res_ty
415   = do  { (pat', cmd', coi) <- tcProc pat cmd res_ty
416         ; return $ mkHsWrapCoI coi (HsProc pat' cmd') }
417
418 tcExpr e@(HsArrApp _ _ _ _ _) _
419   = failWithTc (vcat [ptext (sLit "The arrow command"), nest 2 (ppr e), 
420                       ptext (sLit "was found where an expression was expected")])
421
422 tcExpr e@(HsArrForm _ _ _) _
423   = failWithTc (vcat [ptext (sLit "The arrow command"), nest 2 (ppr e), 
424                       ptext (sLit "was found where an expression was expected")])
425 \end{code}
426
427 %************************************************************************
428 %*                                                                      *
429                 Record construction and update
430 %*                                                                      *
431 %************************************************************************
432
433 \begin{code}
434 tcExpr (RecordCon (L loc con_name) _ rbinds) res_ty
435   = do  { data_con <- tcLookupDataCon con_name
436
437         -- Check for missing fields
438         ; checkMissingFields data_con rbinds
439
440         ; (con_expr, con_tau) <- tcInferId con_name
441         ; let arity = dataConSourceArity data_con
442               (arg_tys, actual_res_ty) = tcSplitFunTysN con_tau arity
443               con_id = dataConWrapId data_con
444
445         ; co_res <- unifyType actual_res_ty res_ty
446         ; rbinds' <- tcRecordBinds data_con arg_tys rbinds
447         ; return $ mkHsWrapCoI co_res $ 
448           RecordCon (L loc con_id) con_expr rbinds' } 
449 \end{code}
450
451 Note [Type of a record update]
452 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
453 The main complication with RecordUpd is that we need to explicitly
454 handle the *non-updated* fields.  Consider:
455
456         data T a b c = MkT1 { fa :: a, fb :: (b,c) }
457                      | MkT2 { fa :: a, fb :: (b,c), fc :: c -> c }
458                      | MkT3 { fd :: a }
459         
460         upd :: T a b c -> (b',c) -> T a b' c
461         upd t x = t { fb = x}
462
463 The result type should be (T a b' c)
464 not (T a b c),   because 'b' *is not* mentioned in a non-updated field
465 not (T a b' c'), becuase 'c' *is*     mentioned in a non-updated field
466 NB that it's not good enough to look at just one constructor; we must
467 look at them all; cf Trac #3219
468
469 After all, upd should be equivalent to:
470         upd t x = case t of 
471                         MkT1 p q -> MkT1 p x
472                         MkT2 a b -> MkT2 p b
473                         MkT3 d   -> error ...
474
475 So we need to give a completely fresh type to the result record,
476 and then constrain it by the fields that are *not* updated ("p" above).
477 We call these the "fixed" type variables, and compute them in getFixedTyVars.
478
479 Note that because MkT3 doesn't contain all the fields being updated,
480 its RHS is simply an error, so it doesn't impose any type constraints.
481 Hence the use of 'relevant_cont'.
482
483 Note [Implict type sharing]
484 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
485 We also take into account any "implicit" non-update fields.  For example
486         data T a b where { MkT { f::a } :: T a a; ... }
487 So the "real" type of MkT is: forall ab. (a~b) => a -> T a b
488
489 Then consider
490         upd t x = t { f=x }
491 We infer the type
492         upd :: T a b -> a -> T a b
493         upd (t::T a b) (x::a)
494            = case t of { MkT (co:a~b) (_:a) -> MkT co x }
495 We can't give it the more general type
496         upd :: T a b -> c -> T c b
497
498 Note [Criteria for update]
499 ~~~~~~~~~~~~~~~~~~~~~~~~~~
500 We want to allow update for existentials etc, provided the updated
501 field isn't part of the existential. For example, this should be ok.
502   data T a where { MkT { f1::a, f2::b->b } :: T a }
503   f :: T a -> b -> T b
504   f t b = t { f1=b }
505
506 The criterion we use is this:
507
508   The types of the updated fields
509   mention only the universally-quantified type variables
510   of the data constructor
511
512 NB: this is not (quite) the same as being a "naughty" record selector
513 (See Note [Naughty record selectors]) in TcTyClsDecls), at least 
514 in the case of GADTs. Consider
515    data T a where { MkT :: { f :: a } :: T [a] }
516 Then f is not "naughty" because it has a well-typed record selector.
517 But we don't allow updates for 'f'.  (One could consider trying to
518 allow this, but it makes my head hurt.  Badly.  And no one has asked
519 for it.)
520
521 In principle one could go further, and allow
522   g :: T a -> T a
523   g t = t { f2 = \x -> x }
524 because the expression is polymorphic...but that seems a bridge too far.
525
526 Note [Data family example]
527 ~~~~~~~~~~~~~~~~~~~~~~~~~~
528     data instance T (a,b) = MkT { x::a, y::b }
529   --->
530     data :TP a b = MkT { a::a, y::b }
531     coTP a b :: T (a,b) ~ :TP a b
532
533 Suppose r :: T (t1,t2), e :: t3
534 Then  r { x=e } :: T (t3,t1)
535   --->
536       case r |> co1 of
537         MkT x y -> MkT e y |> co2
538       where co1 :: T (t1,t2) ~ :TP t1 t2
539             co2 :: :TP t3 t2 ~ T (t3,t2)
540 The wrapping with co2 is done by the constructor wrapper for MkT
541
542 Outgoing invariants
543 ~~~~~~~~~~~~~~~~~~~
544 In the outgoing (HsRecordUpd scrut binds cons in_inst_tys out_inst_tys):
545
546   * cons are the data constructors to be updated
547
548   * in_inst_tys, out_inst_tys have same length, and instantiate the
549         *representation* tycon of the data cons.  In Note [Data 
550         family example], in_inst_tys = [t1,t2], out_inst_tys = [t3,t2]
551         
552 \begin{code}
553 tcExpr (RecordUpd record_expr rbinds _ _ _) res_ty
554   = ASSERT( notNull upd_fld_names )
555     do  {
556         -- STEP 0
557         -- Check that the field names are really field names
558         ; sel_ids <- mapM tcLookupField upd_fld_names
559                         -- The renamer has already checked that
560                         -- selectors are all in scope
561         ; let bad_guys = [ setSrcSpan loc $ addErrTc (notSelector fld_name) 
562                          | (fld, sel_id) <- rec_flds rbinds `zip` sel_ids,
563                            not (isRecordSelector sel_id),       -- Excludes class ops
564                            let L loc fld_name = hsRecFieldId fld ]
565         ; unless (null bad_guys) (sequence bad_guys >> failM)
566     
567         -- STEP 1
568         -- Figure out the tycon and data cons from the first field name
569         ; let   -- It's OK to use the non-tc splitters here (for a selector)
570               sel_id : _  = sel_ids
571               (tycon, _)  = recordSelectorFieldLabel sel_id     -- We've failed already if
572               data_cons   = tyConDataCons tycon                 -- it's not a field label
573                 -- NB: for a data type family, the tycon is the instance tycon
574
575               relevant_cons   = filter is_relevant data_cons
576               is_relevant con = all (`elem` dataConFieldLabels con) upd_fld_names
577                 -- A constructor is only relevant to this process if
578                 -- it contains *all* the fields that are being updated
579                 -- Other ones will cause a runtime error if they occur
580
581                 -- Take apart a representative constructor
582               con1 = ASSERT( not (null relevant_cons) ) head relevant_cons
583               (con1_tvs, _, _, _, _, con1_arg_tys, _) = dataConFullSig con1
584               con1_flds = dataConFieldLabels con1
585               con1_res_ty = mkFamilyTyConApp tycon (mkTyVarTys con1_tvs)
586               
587         -- Step 2
588         -- Check that at least one constructor has all the named fields
589         -- i.e. has an empty set of bad fields returned by badFields
590         ; checkTc (not (null relevant_cons)) (badFieldsUpd rbinds)
591
592         -- STEP 3    Note [Criteria for update]
593         -- Check that each updated field is polymorphic; that is, its type
594         -- mentions only the universally-quantified variables of the data con
595         ; let flds1_w_tys = zipEqual "tcExpr:RecConUpd" con1_flds con1_arg_tys
596               upd_flds1_w_tys = filter is_updated flds1_w_tys
597               is_updated (fld,_) = fld `elem` upd_fld_names
598
599               bad_upd_flds = filter bad_fld upd_flds1_w_tys
600               con1_tv_set = mkVarSet con1_tvs
601               bad_fld (fld, ty) = fld `elem` upd_fld_names &&
602                                       not (tyVarsOfType ty `subVarSet` con1_tv_set)
603         ; checkTc (null bad_upd_flds) (badFieldTypes bad_upd_flds)
604
605         -- STEP 4  Note [Type of a record update]
606         -- Figure out types for the scrutinee and result
607         -- Both are of form (T a b c), with fresh type variables, but with
608         -- common variables where the scrutinee and result must have the same type
609         -- These are variables that appear in *any* arg of *any* of the
610         -- relevant constructors *except* in the updated fields
611         -- 
612         ; let fixed_tvs = getFixedTyVars con1_tvs relevant_cons
613               is_fixed_tv tv = tv `elemVarSet` fixed_tvs
614               mk_inst_ty tv result_inst_ty 
615                 | is_fixed_tv tv = return result_inst_ty            -- Same as result type
616                 | otherwise      = newFlexiTyVarTy (tyVarKind tv)  -- Fresh type, of correct kind
617
618         ; (_, result_inst_tys, result_inst_env) <- tcInstTyVars con1_tvs
619         ; scrut_inst_tys <- zipWithM mk_inst_ty con1_tvs result_inst_tys
620
621         ; let rec_res_ty    = substTy result_inst_env con1_res_ty
622               con1_arg_tys' = map (substTy result_inst_env) con1_arg_tys
623               scrut_subst   = zipTopTvSubst con1_tvs scrut_inst_tys
624               scrut_ty      = substTy scrut_subst con1_res_ty
625
626         ; co_res <- unifyType rec_res_ty res_ty
627
628         -- STEP 5
629         -- Typecheck the thing to be updated, and the bindings
630         ; record_expr' <- tcMonoExpr record_expr scrut_ty
631         ; rbinds'      <- tcRecordBinds con1 con1_arg_tys' rbinds
632         
633         -- STEP 6: Deal with the stupid theta
634         ; let theta' = substTheta scrut_subst (dataConStupidTheta con1)
635         ; instStupidTheta RecordUpdOrigin theta'
636
637         -- Step 7: make a cast for the scrutinee, in the case that it's from a type family
638         ; let scrut_co | Just co_con <- tyConFamilyCoercion_maybe tycon 
639                        = WpCast $ mkTyConApp co_con scrut_inst_tys
640                        | otherwise
641                        = idHsWrapper
642         -- Phew!
643         ; return $ mkHsWrapCoI co_res $
644           RecordUpd (mkLHsWrap scrut_co record_expr') rbinds'
645                                    relevant_cons scrut_inst_tys result_inst_tys  }
646   where
647     upd_fld_names = hsRecFields rbinds
648
649     getFixedTyVars :: [TyVar] -> [DataCon] -> TyVarSet
650     -- These tyvars must not change across the updates
651     getFixedTyVars tvs1 cons
652       = mkVarSet [tv1 | con <- cons
653                       , let (tvs, theta, arg_tys, _) = dataConSig con
654                             flds = dataConFieldLabels con
655                             fixed_tvs = exactTyVarsOfTypes fixed_tys
656                                     -- fixed_tys: See Note [Type of a record update]
657                                         `unionVarSet` tyVarsOfTheta theta 
658                                     -- Universally-quantified tyvars that
659                                     -- appear in any of the *implicit*
660                                     -- arguments to the constructor are fixed
661                                     -- See Note [Implict type sharing]
662                                         
663                             fixed_tys = [ty | (fld,ty) <- zip flds arg_tys
664                                             , not (fld `elem` upd_fld_names)]
665                       , (tv1,tv) <- tvs1 `zip` tvs      -- Discards existentials in tvs
666                       , tv `elemVarSet` fixed_tvs ]
667 \end{code}
668
669 %************************************************************************
670 %*                                                                      *
671         Arithmetic sequences                    e.g. [a,b..]
672         and their parallel-array counterparts   e.g. [: a,b.. :]
673                 
674 %*                                                                      *
675 %************************************************************************
676
677 \begin{code}
678 tcExpr (ArithSeq _ seq@(From expr)) res_ty
679   = do  { (coi, elt_ty) <- matchExpectedListTy res_ty
680         ; expr' <- tcPolyExpr expr elt_ty
681         ; enum_from <- newMethodFromName (ArithSeqOrigin seq) 
682                               enumFromName elt_ty 
683         ; return $ mkHsWrapCoI coi (ArithSeq enum_from (From expr')) }
684
685 tcExpr (ArithSeq _ seq@(FromThen expr1 expr2)) res_ty
686   = do  { (coi, elt_ty) <- matchExpectedListTy res_ty
687         ; expr1' <- tcPolyExpr expr1 elt_ty
688         ; expr2' <- tcPolyExpr expr2 elt_ty
689         ; enum_from_then <- newMethodFromName (ArithSeqOrigin seq) 
690                               enumFromThenName elt_ty 
691         ; return $ mkHsWrapCoI coi 
692                     (ArithSeq enum_from_then (FromThen expr1' expr2')) }
693
694 tcExpr (ArithSeq _ seq@(FromTo expr1 expr2)) res_ty
695   = do  { (coi, elt_ty) <- matchExpectedListTy res_ty
696         ; expr1' <- tcPolyExpr expr1 elt_ty
697         ; expr2' <- tcPolyExpr expr2 elt_ty
698         ; enum_from_to <- newMethodFromName (ArithSeqOrigin seq) 
699                               enumFromToName elt_ty 
700         ; return $ mkHsWrapCoI coi 
701                      (ArithSeq enum_from_to (FromTo expr1' expr2')) }
702
703 tcExpr (ArithSeq _ seq@(FromThenTo expr1 expr2 expr3)) res_ty
704   = do  { (coi, elt_ty) <- matchExpectedListTy res_ty
705         ; expr1' <- tcPolyExpr expr1 elt_ty
706         ; expr2' <- tcPolyExpr expr2 elt_ty
707         ; expr3' <- tcPolyExpr expr3 elt_ty
708         ; eft <- newMethodFromName (ArithSeqOrigin seq) 
709                       enumFromThenToName elt_ty 
710         ; return $ mkHsWrapCoI coi 
711                      (ArithSeq eft (FromThenTo expr1' expr2' expr3')) }
712
713 tcExpr (PArrSeq _ seq@(FromTo expr1 expr2)) res_ty
714   = do  { (coi, elt_ty) <- matchExpectedPArrTy res_ty
715         ; expr1' <- tcPolyExpr expr1 elt_ty
716         ; expr2' <- tcPolyExpr expr2 elt_ty
717         ; enum_from_to <- newMethodFromName (PArrSeqOrigin seq) 
718                                  enumFromToPName elt_ty 
719         ; return $ mkHsWrapCoI coi 
720                      (PArrSeq enum_from_to (FromTo expr1' expr2')) }
721
722 tcExpr (PArrSeq _ seq@(FromThenTo expr1 expr2 expr3)) res_ty
723   = do  { (coi, elt_ty) <- matchExpectedPArrTy res_ty
724         ; expr1' <- tcPolyExpr expr1 elt_ty
725         ; expr2' <- tcPolyExpr expr2 elt_ty
726         ; expr3' <- tcPolyExpr expr3 elt_ty
727         ; eft <- newMethodFromName (PArrSeqOrigin seq)
728                       enumFromThenToPName elt_ty
729         ; return $ mkHsWrapCoI coi 
730                      (PArrSeq eft (FromThenTo expr1' expr2' expr3')) }
731
732 tcExpr (PArrSeq _ _) _ 
733   = panic "TcExpr.tcMonoExpr: Infinite parallel array!"
734     -- the parser shouldn't have generated it and the renamer shouldn't have
735     -- let it through
736 \end{code}
737
738
739 %************************************************************************
740 %*                                                                      *
741                 Template Haskell
742 %*                                                                      *
743 %************************************************************************
744
745 \begin{code}
746 #ifdef GHCI     /* Only if bootstrapped */
747         -- Rename excludes these cases otherwise
748 tcExpr (HsSpliceE splice) res_ty = tcSpliceExpr splice res_ty
749 tcExpr (HsBracket brack)  res_ty = do   { e <- tcBracket brack res_ty
750                                         ; return (unLoc e) }
751 tcExpr e@(HsQuasiQuoteE _) _ =
752     pprPanic "Should never see HsQuasiQuoteE in type checker" (ppr e)
753 #endif /* GHCI */
754 \end{code}
755
756
757 %************************************************************************
758 %*                                                                      *
759                 Catch-all
760 %*                                                                      *
761 %************************************************************************
762
763 \begin{code}
764 tcExpr other _ = pprPanic "tcMonoExpr" (ppr other)
765 \end{code}
766
767
768 %************************************************************************
769 %*                                                                      *
770                 Applications
771 %*                                                                      *
772 %************************************************************************
773
774 \begin{code}
775 tcApp :: LHsExpr Name -> [LHsExpr Name] -- Function and args
776       -> TcRhoType -> TcM (HsExpr TcId) -- Translated fun and args
777
778 tcApp (L _ (HsPar e)) args res_ty
779   = tcApp e args res_ty
780
781 tcApp (L _ (HsApp e1 e2)) args res_ty
782   = tcApp e1 (e2:args) res_ty   -- Accumulate the arguments
783
784 tcApp (L loc (HsVar fun)) args res_ty
785   | fun `hasKey` tagToEnumKey
786   , [arg] <- args
787   = tcTagToEnum loc fun arg res_ty
788
789 tcApp fun args res_ty
790   = do  {   -- Type-check the function
791         ; (fun1, fun_tau) <- tcInferFun fun
792
793             -- Extract its argument types
794         ; (co_fun, expected_arg_tys, actual_res_ty)
795               <- matchExpectedFunTys (mk_app_msg fun) (length args) fun_tau
796
797         -- Typecheck the result, thereby propagating 
798         -- info (if any) from result into the argument types
799         -- Both actual_res_ty and res_ty are deeply skolemised
800         ; co_res <- unifyType actual_res_ty res_ty
801
802         -- Typecheck the arguments
803         ; args1 <- tcArgs fun args expected_arg_tys
804
805         -- Assemble the result
806         ; let fun2 = mkLHsWrapCoI co_fun fun1
807               app  = mkLHsWrapCoI co_res (foldl mkHsApp fun2 args1)
808
809         ; return (unLoc app) }
810
811
812 mk_app_msg :: LHsExpr Name -> SDoc
813 mk_app_msg fun = sep [ ptext (sLit "The function") <+> quotes (ppr fun)
814                      , ptext (sLit "is applied to")]
815
816 ----------------
817 tcInferApp :: LHsExpr Name -> [LHsExpr Name] -- Function and args
818            -> TcM (HsExpr TcId, TcRhoType) -- Translated fun and args
819
820 tcInferApp (L _ (HsPar e))     args = tcInferApp e args
821 tcInferApp (L _ (HsApp e1 e2)) args = tcInferApp e1 (e2:args)
822 tcInferApp fun args
823   = -- Very like the tcApp version, except that there is
824     -- no expected result type passed in
825     do  { (fun1, fun_tau) <- tcInferFun fun
826         ; (co_fun, expected_arg_tys, actual_res_ty)
827               <- matchExpectedFunTys (mk_app_msg fun) (length args) fun_tau
828         ; args1 <- tcArgs fun args expected_arg_tys
829         ; let fun2 = mkLHsWrapCoI co_fun fun1
830               app  = foldl mkHsApp fun2 args1
831         ; return (unLoc app, actual_res_ty) }
832
833 ----------------
834 tcInferFun :: LHsExpr Name -> TcM (LHsExpr TcId, TcRhoType)
835 -- Infer and instantiate the type of a function
836 tcInferFun (L loc (HsVar name)) 
837   = do { (fun, ty) <- setSrcSpan loc (tcInferId name)
838                -- Don't wrap a context around a plain Id
839        ; return (L loc fun, ty) }
840
841 tcInferFun fun
842   = do { (fun, fun_ty) <- tcInfer (tcMonoExpr fun)
843
844          -- Zonk the function type carefully, to expose any polymorphism
845          -- E.g. (( \(x::forall a. a->a). blah ) e)
846          -- We can see the rank-2 type of the lambda in time to genrealise e
847        ; fun_ty' <- zonkTcTypeCarefully fun_ty
848
849        ; (wrap, rho) <- deeplyInstantiate AppOrigin fun_ty'
850        ; return (mkLHsWrap wrap fun, rho) }
851
852 ----------------
853 tcArgs :: LHsExpr Name                          -- The function (for error messages)
854        -> [LHsExpr Name] -> [TcSigmaType]       -- Actual arguments and expected arg types
855        -> TcM [LHsExpr TcId]                    -- Resulting args
856
857 tcArgs fun args expected_arg_tys
858   = mapM (tcArg fun) (zip3 args expected_arg_tys [1..])
859
860 ----------------
861 tcArg :: LHsExpr Name                           -- The function (for error messages)
862        -> (LHsExpr Name, TcSigmaType, Int)      -- Actual argument and expected arg type
863        -> TcM (LHsExpr TcId)                    -- Resulting argument
864 tcArg fun (arg, ty, arg_no) = addErrCtxt (funAppCtxt fun arg arg_no)
865                                          (tcPolyExprNC arg ty)
866
867 ----------------
868 tcTupArgs :: [HsTupArg Name] -> [TcSigmaType] -> TcM [HsTupArg TcId]
869 tcTupArgs args tys 
870   = ASSERT( equalLength args tys ) mapM go (args `zip` tys)
871   where
872     go (Missing {},   arg_ty) = return (Missing arg_ty)
873     go (Present expr, arg_ty) = do { expr' <- tcPolyExpr expr arg_ty
874                                    ; return (Present expr') }
875
876 ----------------
877 unifyOpFunTys :: LHsExpr Name -> Arity -> TcRhoType
878               -> TcM (CoercionI, [TcSigmaType], TcRhoType)                      
879 -- A wrapper for matchExpectedFunTys
880 unifyOpFunTys op arity ty = matchExpectedFunTys herald arity ty
881   where
882     herald = ptext (sLit "The operator") <+> quotes (ppr op) <+> ptext (sLit "takes")
883
884 ---------------------------
885 tcSyntaxOp :: CtOrigin -> HsExpr Name -> TcType -> TcM (HsExpr TcId)
886 -- Typecheck a syntax operator, checking that it has the specified type
887 -- The operator is always a variable at this stage (i.e. renamer output)
888 -- This version assumes res_ty is a monotype
889 tcSyntaxOp orig (HsVar op) res_ty = do { (expr, rho) <- tcInferIdWithOrig orig op
890                                        ; tcWrapResult expr rho res_ty }
891 tcSyntaxOp _ other         _      = pprPanic "tcSyntaxOp" (ppr other) 
892 \end{code}
893
894
895 Note [Push result type in]
896 ~~~~~~~~~~~~~~~~~~~~~~~~~~
897 Unify with expected result before type-checking the args so that the
898 info from res_ty percolates to args.  This is when we might detect a
899 too-few args situation.  (One can think of cases when the opposite
900 order would give a better error message.) 
901 experimenting with putting this first.  
902
903 Here's an example where it actually makes a real difference
904
905    class C t a b | t a -> b
906    instance C Char a Bool
907
908    data P t a = forall b. (C t a b) => MkP b
909    data Q t   = MkQ (forall a. P t a)
910
911    f1, f2 :: Q Char;
912    f1 = MkQ (MkP True)
913    f2 = MkQ (MkP True :: forall a. P Char a)
914
915 With the change, f1 will type-check, because the 'Char' info from
916 the signature is propagated into MkQ's argument. With the check
917 in the other order, the extra signature in f2 is reqd.
918
919
920 %************************************************************************
921 %*                                                                      *
922                  tcInferId
923 %*                                                                      *
924 %************************************************************************
925
926 \begin{code}
927 tcCheckId :: Name -> TcRhoType -> TcM (HsExpr TcId)
928 tcCheckId name res_ty = do { (expr, rho) <- tcInferId name
929                            ; tcWrapResult expr rho res_ty }
930
931 ------------------------
932 tcInferId :: Name -> TcM (HsExpr TcId, TcRhoType)
933 -- Infer type, and deeply instantiate
934 tcInferId n = tcInferIdWithOrig (OccurrenceOf n) n
935
936 ------------------------
937 tcInferIdWithOrig :: CtOrigin -> Name -> TcM (HsExpr TcId, TcRhoType)
938 -- Look up an occurrence of an Id, and instantiate it (deeply)
939
940 tcInferIdWithOrig orig id_name
941   = do { id <- lookup_id
942        ; (id_expr, id_rho) <- instantiateOuter orig id
943        ; (wrap, rho) <- deeplyInstantiate orig id_rho
944        ; return (mkHsWrap wrap id_expr, rho) }
945   where
946     lookup_id :: TcM TcId
947     lookup_id 
948        = do { thing <- tcLookup id_name
949             ; case thing of
950                  ATcId { tct_id = id, tct_level = lvl }
951                    -> do { check_naughty id        -- Note [Local record selectors]
952                          ; checkThLocalId id lvl
953                          ; return id }
954
955                  AGlobal (AnId id) 
956                    -> do { check_naughty id; return id }
957                         -- A global cannot possibly be ill-staged
958                         -- nor does it need the 'lifting' treatment
959                         -- hence no checkTh stuff here
960
961                  AGlobal (ADataCon con) -> return (dataConWrapId con)
962
963                  other -> failWithTc (bad_lookup other) }
964
965     bad_lookup thing = ppr thing <+> ptext (sLit "used where a value identifer was expected")
966
967     check_naughty id 
968       | isNaughtyRecordSelector id = failWithTc (naughtyRecordSel id)
969       | otherwise                  = return ()
970
971 ------------------------
972 instantiateOuter :: CtOrigin -> TcId -> TcM (HsExpr TcId, TcSigmaType)
973 -- Do just the first level of instantiation of an Id
974 --   a) Deal with method sharing
975 --   b) Deal with stupid checks
976 -- Only look at the *outer level* of quantification
977 -- See Note [Multiple instantiation]
978
979 instantiateOuter orig id
980   | null tvs && null theta
981   = return (HsVar id, tau)
982
983   | otherwise
984   = do { (_, tys, subst) <- tcInstTyVars tvs
985        ; doStupidChecks id tys
986        ; let theta' = substTheta subst theta
987        ; traceTc "Instantiating" (ppr id <+> text "with" <+> (ppr tys $$ ppr theta'))
988        ; wrap <- instCall orig tys theta'
989        ; return (mkHsWrap wrap (HsVar id), substTy subst tau) }
990   where
991     (tvs, theta, tau) = tcSplitSigmaTy (idType id)
992 \end{code}
993
994 Note [Multiple instantiation]
995 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
996 We are careful never to make a MethodInst that has, as its meth_id, another MethodInst.
997 For example, consider
998         f :: forall a. Eq a => forall b. Ord b => a -> b
999 At a call to f, at say [Int, Bool], it's tempting to translate the call to 
1000
1001         f_m1
1002   where
1003         f_m1 :: forall b. Ord b => Int -> b
1004         f_m1 = f Int dEqInt
1005
1006         f_m2 :: Int -> Bool
1007         f_m2 = f_m1 Bool dOrdBool
1008
1009 But notice that f_m2 has f_m1 as its meth_id.  Now the danger is that if we do
1010 a tcSimplCheck with a Given f_mx :: f Int dEqInt, we may make a binding
1011         f_m1 = f_mx
1012 But it's entirely possible that f_m2 will continue to float out, because it
1013 mentions no type variables.  Result, f_m1 isn't in scope.
1014
1015 Here's a concrete example that does this (test tc200):
1016
1017     class C a where
1018       f :: Eq b => b -> a -> Int
1019       baz :: Eq a => Int -> a -> Int
1020
1021     instance C Int where
1022       baz = f
1023
1024 Current solution: only do the "method sharing" thing for the first type/dict
1025 application, not for the iterated ones.  A horribly subtle point.
1026
1027 Note [No method sharing]
1028 ~~~~~~~~~~~~~~~~~~~~~~~~
1029 The -fno-method-sharing flag controls what happens so far as the LIE
1030 is concerned.  The default case is that for an overloaded function we 
1031 generate a "method" Id, and add the Method Inst to the LIE.  So you get
1032 something like
1033         f :: Num a => a -> a
1034         f = /\a (d:Num a) -> let m = (+) a d in \ (x:a) -> m x x
1035 If you specify -fno-method-sharing, the dictionary application 
1036 isn't shared, so we get
1037         f :: Num a => a -> a
1038         f = /\a (d:Num a) (x:a) -> (+) a d x x
1039 This gets a bit less sharing, but
1040         a) it's better for RULEs involving overloaded functions
1041         b) perhaps fewer separated lambdas
1042
1043 \begin{code}
1044 doStupidChecks :: TcId
1045                -> [TcType]
1046                -> TcM ()
1047 -- Check two tiresome and ad-hoc cases
1048 -- (a) the "stupid theta" for a data con; add the constraints
1049 --     from the "stupid theta" of a data constructor (sigh)
1050
1051 doStupidChecks fun_id tys
1052   | Just con <- isDataConId_maybe fun_id   -- (a)
1053   = addDataConStupidTheta con tys
1054
1055   | fun_id `hasKey` tagToEnumKey           -- (b)
1056   = failWithTc (ptext (sLit "tagToEnum# must appear applied to one argument"))
1057   
1058   | otherwise
1059   = return () -- The common case
1060 \end{code}
1061
1062 Note [tagToEnum#]
1063 ~~~~~~~~~~~~~~~~~
1064 Nasty check to ensure that tagToEnum# is applied to a type that is an
1065 enumeration TyCon.  Unification may refine the type later, but this
1066 check won't see that, alas.  It's crude, because it relies on our
1067 knowing *now* that the type is ok, which in turn relies on the
1068 eager-unification part of the type checker pushing enough information
1069 here.  In theory the Right Thing to do is to have a new form of 
1070 constraint but I definitely cannot face that!  And it works ok as-is.
1071
1072 Here's are two cases that should fail
1073         f :: forall a. a
1074         f = tagToEnum# 0        -- Can't do tagToEnum# at a type variable
1075
1076         g :: Int
1077         g = tagToEnum# 0        -- Int is not an enumeration
1078
1079 When data type families are involved it's a bit more complicated.
1080      data family F a
1081      data instance F [Int] = A | B | C
1082 Then we want to generate something like
1083      tagToEnum# R:FListInt 3# |> co :: R:FListInt ~ F [Int]
1084 Usually that coercion is hidden inside the wrappers for 
1085 constructors of F [Int] but here we have to do it explicitly.
1086
1087 It's all grotesquely complicated.
1088
1089 \begin{code}
1090 tcTagToEnum :: SrcSpan -> Name -> LHsExpr Name -> TcRhoType -> TcM (HsExpr TcId)
1091 -- tagToEnum# :: forall a. Int# -> a
1092 -- See Note [tagToEnum#]   Urgh!
1093 tcTagToEnum loc fun_name arg res_ty
1094   = do  { fun <- tcLookupId fun_name
1095         ; ty' <- zonkTcType res_ty
1096
1097         -- Check that the type is algebraic
1098         ; let mb_tc_app = tcSplitTyConApp_maybe ty'
1099               Just (tc, tc_args) = mb_tc_app
1100         ; checkTc (isJust mb_tc_app)
1101                   (tagToEnumError ty' doc1)
1102
1103         -- Look through any type family
1104         ; (coi, rep_tc, rep_args) <- get_rep_ty ty' tc tc_args
1105
1106         ; checkTc (isEnumerationTyCon rep_tc) 
1107                   (tagToEnumError ty' doc2)
1108
1109         ; arg' <- tcMonoExpr arg intPrimTy
1110         ; let fun' = L loc (HsWrap (WpTyApp rep_ty) (HsVar fun))
1111               rep_ty = mkTyConApp rep_tc rep_args
1112
1113         ; return (mkHsWrapCoI coi $ HsApp fun' arg') }
1114   where
1115     doc1 = vcat [ ptext (sLit "Specify the type by giving a type signature")
1116                 , ptext (sLit "e.g. (tagToEnum# x) :: Bool") ]
1117     doc2 = ptext (sLit "Result type must be an enumeration type")
1118     doc3 = ptext (sLit "No family instance for this type")
1119
1120     get_rep_ty :: TcType -> TyCon -> [TcType]
1121                -> TcM (CoercionI, TyCon, [TcType])
1122         -- Converts a family type (eg F [a]) to its rep type (eg FList a)
1123         -- and returns a coercion between the two
1124     get_rep_ty ty tc tc_args
1125       | not (isFamilyTyCon tc) 
1126       = return (IdCo ty, tc, tc_args)
1127       | otherwise 
1128       = do { mb_fam <- tcLookupFamInst tc tc_args
1129            ; case mb_fam of 
1130                Nothing -> failWithTc (tagToEnumError ty doc3)
1131                Just (rep_tc, rep_args) 
1132                    -> return ( ACo (mkSymCoercion (mkTyConApp co_tc rep_args))
1133                              , rep_tc, rep_args )
1134                  where
1135                    co_tc = expectJust "tcTagToEnum" $
1136                            tyConFamilyCoercion_maybe rep_tc }
1137
1138 tagToEnumError :: TcType -> SDoc -> SDoc
1139 tagToEnumError ty what
1140   = hang (ptext (sLit "Bad call to tagToEnum#") 
1141            <+> ptext (sLit "at type") <+> ppr ty) 
1142          2 what
1143 \end{code}
1144
1145
1146 %************************************************************************
1147 %*                                                                      *
1148                  Template Haskell checks
1149 %*                                                                      *
1150 %************************************************************************
1151
1152 \begin{code}
1153 checkThLocalId :: Id -> ThLevel -> TcM ()
1154 #ifndef GHCI  /* GHCI and TH is off */
1155 --------------------------------------
1156 -- Check for cross-stage lifting
1157 checkThLocalId _id _bind_lvl
1158   = return ()
1159
1160 #else         /* GHCI and TH is on */
1161 checkThLocalId id bind_lvl 
1162   = do  { use_stage <- getStage -- TH case
1163         ; let use_lvl = thLevel use_stage
1164         ; checkWellStaged (quotes (ppr id)) bind_lvl use_lvl
1165         ; traceTc "thLocalId" (ppr id <+> ppr bind_lvl <+> ppr use_stage <+> ppr use_lvl)
1166         ; when (use_lvl > bind_lvl) $
1167           checkCrossStageLifting id bind_lvl use_stage }
1168
1169 --------------------------------------
1170 checkCrossStageLifting :: Id -> ThLevel -> ThStage -> TcM ()
1171 -- We are inside brackets, and (use_lvl > bind_lvl)
1172 -- Now we must check whether there's a cross-stage lift to do
1173 -- Examples   \x -> [| x |]  
1174 --            [| map |]
1175
1176 checkCrossStageLifting _ _ Comp   = return ()
1177 checkCrossStageLifting _ _ Splice = return ()
1178
1179 checkCrossStageLifting id _ (Brack _ ps_var lie_var) 
1180   | thTopLevelId id
1181   =     -- Top-level identifiers in this module,
1182         -- (which have External Names)
1183         -- are just like the imported case:
1184         -- no need for the 'lifting' treatment
1185         -- E.g.  this is fine:
1186         --   f x = x
1187         --   g y = [| f 3 |]
1188         -- But we do need to put f into the keep-alive
1189         -- set, because after desugaring the code will
1190         -- only mention f's *name*, not f itself.
1191     keepAliveTc id
1192
1193   | otherwise   -- bind_lvl = outerLevel presumably,
1194                 -- but the Id is not bound at top level
1195   =     -- Nested identifiers, such as 'x' in
1196         -- E.g. \x -> [| h x |]
1197         -- We must behave as if the reference to x was
1198         --      h $(lift x)     
1199         -- We use 'x' itself as the splice proxy, used by 
1200         -- the desugarer to stitch it all back together.
1201         -- If 'x' occurs many times we may get many identical
1202         -- bindings of the same splice proxy, but that doesn't
1203         -- matter, although it's a mite untidy.
1204     do  { let id_ty = idType id
1205         ; checkTc (isTauTy id_ty) (polySpliceErr id)
1206                -- If x is polymorphic, its occurrence sites might
1207                -- have different instantiations, so we can't use plain
1208                -- 'x' as the splice proxy name.  I don't know how to 
1209                -- solve this, and it's probably unimportant, so I'm
1210                -- just going to flag an error for now
1211    
1212         ; lift <- if isStringTy id_ty then
1213                      do { sid <- tcLookupId DsMeta.liftStringName
1214                                      -- See Note [Lifting strings]
1215                         ; return (HsVar sid) }
1216                   else
1217                      setConstraintVar lie_var   $ do  
1218                           -- Put the 'lift' constraint into the right LIE
1219                      newMethodFromName (OccurrenceOf (idName id)) 
1220                                        DsMeta.liftName id_ty
1221            
1222                    -- Update the pending splices
1223         ; ps <- readMutVar ps_var
1224         ; writeMutVar ps_var ((idName id, nlHsApp (noLoc lift) (nlHsVar id)) : ps)
1225
1226         ; return () }
1227 #endif /* GHCI */
1228 \end{code}
1229
1230 Note [Lifting strings]
1231 ~~~~~~~~~~~~~~~~~~~~~~
1232 If we see $(... [| s |] ...) where s::String, we don't want to
1233 generate a mass of Cons (CharL 'x') (Cons (CharL 'y') ...)) etc.
1234 So this conditional short-circuits the lifting mechanism to generate
1235 (liftString "xy") in that case.  I didn't want to use overlapping instances
1236 for the Lift class in TH.Syntax, because that can lead to overlapping-instance
1237 errors in a polymorphic situation.  
1238
1239 If this check fails (which isn't impossible) we get another chance; see
1240 Note [Converting strings] in Convert.lhs 
1241
1242 Local record selectors
1243 ~~~~~~~~~~~~~~~~~~~~~~
1244 Record selectors for TyCons in this module are ordinary local bindings,
1245 which show up as ATcIds rather than AGlobals.  So we need to check for
1246 naughtiness in both branches.  c.f. TcTyClsBindings.mkAuxBinds.
1247
1248
1249 %************************************************************************
1250 %*                                                                      *
1251 \subsection{Record bindings}
1252 %*                                                                      *
1253 %************************************************************************
1254
1255 Game plan for record bindings
1256 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1257 1. Find the TyCon for the bindings, from the first field label.
1258
1259 2. Instantiate its tyvars and unify (T a1 .. an) with expected_ty.
1260
1261 For each binding field = value
1262
1263 3. Instantiate the field type (from the field label) using the type
1264    envt from step 2.
1265
1266 4  Type check the value using tcArg, passing the field type as 
1267    the expected argument type.
1268
1269 This extends OK when the field types are universally quantified.
1270
1271         
1272 \begin{code}
1273 tcRecordBinds
1274         :: DataCon
1275         -> [TcType]     -- Expected type for each field
1276         -> HsRecordBinds Name
1277         -> TcM (HsRecordBinds TcId)
1278
1279 tcRecordBinds data_con arg_tys (HsRecFields rbinds dd)
1280   = do  { mb_binds <- mapM do_bind rbinds
1281         ; return (HsRecFields (catMaybes mb_binds) dd) }
1282   where
1283     flds_w_tys = zipEqual "tcRecordBinds" (dataConFieldLabels data_con) arg_tys
1284     do_bind fld@(HsRecField { hsRecFieldId = L loc field_lbl, hsRecFieldArg = rhs })
1285       | Just field_ty <- assocMaybe flds_w_tys field_lbl
1286       = addErrCtxt (fieldCtxt field_lbl)        $
1287         do { rhs' <- tcPolyExprNC rhs field_ty
1288            ; let field_id = mkUserLocal (nameOccName field_lbl)
1289                                         (nameUnique field_lbl)
1290                                         field_ty loc 
1291                 -- Yuk: the field_id has the *unique* of the selector Id
1292                 --          (so we can find it easily)
1293                 --      but is a LocalId with the appropriate type of the RHS
1294                 --          (so the desugarer knows the type of local binder to make)
1295            ; return (Just (fld { hsRecFieldId = L loc field_id, hsRecFieldArg = rhs' })) }
1296       | otherwise
1297       = do { addErrTc (badFieldCon data_con field_lbl)
1298            ; return Nothing }
1299
1300 checkMissingFields :: DataCon -> HsRecordBinds Name -> TcM ()
1301 checkMissingFields data_con rbinds
1302   | null field_labels   -- Not declared as a record;
1303                         -- But C{} is still valid if no strict fields
1304   = if any isBanged field_strs then
1305         -- Illegal if any arg is strict
1306         addErrTc (missingStrictFields data_con [])
1307     else
1308         return ()
1309                         
1310   | otherwise = do              -- A record
1311     unless (null missing_s_fields)
1312            (addErrTc (missingStrictFields data_con missing_s_fields))
1313
1314     warn <- doptM Opt_WarnMissingFields
1315     unless (not (warn && notNull missing_ns_fields))
1316            (warnTc True (missingFields data_con missing_ns_fields))
1317
1318   where
1319     missing_s_fields
1320         = [ fl | (fl, str) <- field_info,
1321                  isBanged str,
1322                  not (fl `elem` field_names_used)
1323           ]
1324     missing_ns_fields
1325         = [ fl | (fl, str) <- field_info,
1326                  not (isBanged str),
1327                  not (fl `elem` field_names_used)
1328           ]
1329
1330     field_names_used = hsRecFields rbinds
1331     field_labels     = dataConFieldLabels data_con
1332
1333     field_info = zipEqual "missingFields"
1334                           field_labels
1335                           field_strs
1336
1337     field_strs = dataConStrictMarks data_con
1338 \end{code}
1339
1340 %************************************************************************
1341 %*                                                                      *
1342 \subsection{Errors and contexts}
1343 %*                                                                      *
1344 %************************************************************************
1345
1346 Boring and alphabetical:
1347 \begin{code}
1348 addExprErrCtxt :: LHsExpr Name -> TcM a -> TcM a
1349 addExprErrCtxt expr = addErrCtxt (exprCtxt expr)
1350
1351 exprCtxt :: LHsExpr Name -> SDoc
1352 exprCtxt expr
1353   = hang (ptext (sLit "In the expression:")) 2 (ppr expr)
1354
1355 fieldCtxt :: Name -> SDoc
1356 fieldCtxt field_name
1357   = ptext (sLit "In the") <+> quotes (ppr field_name) <+> ptext (sLit "field of a record")
1358
1359 funAppCtxt :: LHsExpr Name -> LHsExpr Name -> Int -> SDoc
1360 funAppCtxt fun arg arg_no
1361   = hang (hsep [ ptext (sLit "In the"), speakNth arg_no, ptext (sLit "argument of"), 
1362                     quotes (ppr fun) <> text ", namely"])
1363        2 (quotes (ppr arg))
1364
1365 badFieldTypes :: [(Name,TcType)] -> SDoc
1366 badFieldTypes prs
1367   = hang (ptext (sLit "Record update for insufficiently polymorphic field")
1368                          <> plural prs <> colon)
1369        2 (vcat [ ppr f <+> dcolon <+> ppr ty | (f,ty) <- prs ])
1370
1371 badFieldsUpd :: HsRecFields Name a -> SDoc
1372 badFieldsUpd rbinds
1373   = hang (ptext (sLit "No constructor has all these fields:"))
1374        2 (pprQuotedList (hsRecFields rbinds))
1375
1376 naughtyRecordSel :: TcId -> SDoc
1377 naughtyRecordSel sel_id
1378   = ptext (sLit "Cannot use record selector") <+> quotes (ppr sel_id) <+> 
1379     ptext (sLit "as a function due to escaped type variables") $$ 
1380     ptext (sLit "Probable fix: use pattern-matching syntax instead")
1381
1382 notSelector :: Name -> SDoc
1383 notSelector field
1384   = hsep [quotes (ppr field), ptext (sLit "is not a record selector")]
1385
1386 missingStrictFields :: DataCon -> [FieldLabel] -> SDoc
1387 missingStrictFields con fields
1388   = header <> rest
1389   where
1390     rest | null fields = empty  -- Happens for non-record constructors 
1391                                 -- with strict fields
1392          | otherwise   = colon <+> pprWithCommas ppr fields
1393
1394     header = ptext (sLit "Constructor") <+> quotes (ppr con) <+> 
1395              ptext (sLit "does not have the required strict field(s)") 
1396           
1397 missingFields :: DataCon -> [FieldLabel] -> SDoc
1398 missingFields con fields
1399   = ptext (sLit "Fields of") <+> quotes (ppr con) <+> ptext (sLit "not initialised:") 
1400         <+> pprWithCommas ppr fields
1401
1402 -- callCtxt fun args = ptext (sLit "In the call") <+> parens (ppr (foldl mkHsApp fun args))
1403
1404 #ifdef GHCI
1405 polySpliceErr :: Id -> SDoc
1406 polySpliceErr id
1407   = ptext (sLit "Can't splice the polymorphic local variable") <+> quotes (ppr id)
1408 #endif
1409 \end{code}