5a317e2b6cf1147c7787b59f559f9b4e7336bda1
[ghc.git] / compiler / basicTypes / MkId.lhs
1 %
2 % (c) The University of Glasgow 2006
3 % (c) The AQUA Project, Glasgow University, 1998
4 %
5
6 This module contains definitions for the IdInfo for things that
7 have a standard form, namely:
8
9 - data constructors
10 - record selectors
11 - method and superclass selectors
12 - primitive operations
13
14 \begin{code}
15 {-# LANGUAGE CPP #-}
16
17 module MkId (
18         mkDictFunId, mkDictFunTy, mkDictSelId, mkDictSelRhs,
19
20         mkPrimOpId, mkFCallId,
21
22         wrapNewTypeBody, unwrapNewTypeBody,
23         wrapFamInstBody, unwrapFamInstScrut,
24         wrapTypeFamInstBody, wrapTypeUnbranchedFamInstBody, unwrapTypeFamInstScrut,
25         unwrapTypeUnbranchedFamInstScrut,
26
27         DataConBoxer(..), mkDataConRep, mkDataConWorkId,
28
29         -- And some particular Ids; see below for why they are wired in
30         wiredInIds, ghcPrimIds,
31         unsafeCoerceName, unsafeCoerceId, realWorldPrimId,
32         voidPrimId, voidArgId,
33         nullAddrId, seqId, lazyId, lazyIdKey,
34         coercionTokenId, magicDictId, coerceId,
35
36         -- Re-export error Ids
37         module PrelRules
38     ) where
39
40 #include "HsVersions.h"
41
42 import Rules
43 import TysPrim
44 import TysWiredIn
45 import PrelRules
46 import Type
47 import FamInstEnv
48 import Coercion
49 import TcType
50 import MkCore
51 import CoreUtils        ( exprType, mkCast )
52 import CoreUnfold
53 import Literal
54 import TyCon
55 import CoAxiom
56 import Class
57 import NameSet
58 import VarSet
59 import Name
60 import PrimOp
61 import ForeignCall
62 import DataCon
63 import Id
64 import IdInfo
65 import Demand
66 import CoreSyn
67 import Unique
68 import UniqSupply
69 import PrelNames
70 import BasicTypes       hiding ( SuccessFlag(..) )
71 import Util
72 import Pair
73 import DynFlags
74 import Outputable
75 import FastString
76 import ListSetOps
77
78 import Data.Maybe       ( maybeToList )
79 \end{code}
80
81 %************************************************************************
82 %*                                                                      *
83 \subsection{Wired in Ids}
84 %*                                                                      *
85 %************************************************************************
86
87 Note [Wired-in Ids]
88 ~~~~~~~~~~~~~~~~~~~
89 There are several reasons why an Id might appear in the wiredInIds:
90
91 (1) The ghcPrimIds are wired in because they can't be defined in
92     Haskell at all, although the can be defined in Core.  They have
93     compulsory unfoldings, so they are always inlined and they  have
94     no definition site.  Their home module is GHC.Prim, so they
95     also have a description in primops.txt.pp, where they are called
96     'pseudoops'.
97
98 (2) The 'error' function, eRROR_ID, is wired in because we don't yet have
99     a way to express in an interface file that the result type variable
100     is 'open'; that is can be unified with an unboxed type
101
102     [The interface file format now carry such information, but there's
103     no way yet of expressing at the definition site for these
104     error-reporting functions that they have an 'open'
105     result type. -- sof 1/99]
106
107 (3) Other error functions (rUNTIME_ERROR_ID) are wired in (a) because
108     the desugarer generates code that mentiones them directly, and
109     (b) for the same reason as eRROR_ID
110
111 (4) lazyId is wired in because the wired-in version overrides the
112     strictness of the version defined in GHC.Base
113
114 In cases (2-4), the function has a definition in a library module, and
115 can be called; but the wired-in version means that the details are
116 never read from that module's interface file; instead, the full definition
117 is right here.
118
119 \begin{code}
120 wiredInIds :: [Id]
121 wiredInIds
122   =  [lazyId, dollarId]
123   ++ errorIds           -- Defined in MkCore
124   ++ ghcPrimIds
125
126 -- These Ids are exported from GHC.Prim
127 ghcPrimIds :: [Id]
128 ghcPrimIds
129   = [   -- These can't be defined in Haskell, but they have
130         -- perfectly reasonable unfoldings in Core
131     realWorldPrimId,
132     voidPrimId,
133     unsafeCoerceId,
134     nullAddrId,
135     seqId,
136     magicDictId,
137     coerceId,
138     proxyHashId
139     ]
140 \end{code}
141
142 %************************************************************************
143 %*                                                                      *
144 \subsection{Data constructors}
145 %*                                                                      *
146 %************************************************************************
147
148 The wrapper for a constructor is an ordinary top-level binding that evaluates
149 any strict args, unboxes any args that are going to be flattened, and calls
150 the worker.
151
152 We're going to build a constructor that looks like:
153
154         data (Data a, C b) =>  T a b = T1 !a !Int b
155
156         T1 = /\ a b ->
157              \d1::Data a, d2::C b ->
158              \p q r -> case p of { p ->
159                        case q of { q ->
160                        Con T1 [a,b] [p,q,r]}}
161
162 Notice that
163
164 * d2 is thrown away --- a context in a data decl is used to make sure
165   one *could* construct dictionaries at the site the constructor
166   is used, but the dictionary isn't actually used.
167
168 * We have to check that we can construct Data dictionaries for
169   the types a and Int.  Once we've done that we can throw d1 away too.
170
171 * We use (case p of q -> ...) to evaluate p, rather than "seq" because
172   all that matters is that the arguments are evaluated.  "seq" is
173   very careful to preserve evaluation order, which we don't need
174   to be here.
175
176   You might think that we could simply give constructors some strictness
177   info, like PrimOps, and let CoreToStg do the let-to-case transformation.
178   But we don't do that because in the case of primops and functions strictness
179   is a *property* not a *requirement*.  In the case of constructors we need to
180   do something active to evaluate the argument.
181
182   Making an explicit case expression allows the simplifier to eliminate
183   it in the (common) case where the constructor arg is already evaluated.
184
185 Note [Wrappers for data instance tycons]
186 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
187 In the case of data instances, the wrapper also applies the coercion turning
188 the representation type into the family instance type to cast the result of
189 the wrapper.  For example, consider the declarations
190
191   data family Map k :: * -> *
192   data instance Map (a, b) v = MapPair (Map a (Pair b v))
193
194 The tycon to which the datacon MapPair belongs gets a unique internal
195 name of the form :R123Map, and we call it the representation tycon.
196 In contrast, Map is the family tycon (accessible via
197 tyConFamInst_maybe). A coercion allows you to move between
198 representation and family type.  It is accessible from :R123Map via
199 tyConFamilyCoercion_maybe and has kind
200
201   Co123Map a b v :: {Map (a, b) v ~ :R123Map a b v}
202
203 The wrapper and worker of MapPair get the types
204
205         -- Wrapper
206   $WMapPair :: forall a b v. Map a (Map a b v) -> Map (a, b) v
207   $WMapPair a b v = MapPair a b v `cast` sym (Co123Map a b v)
208
209         -- Worker
210   MapPair :: forall a b v. Map a (Map a b v) -> :R123Map a b v
211
212 This coercion is conditionally applied by wrapFamInstBody.
213
214 It's a bit more complicated if the data instance is a GADT as well!
215
216    data instance T [a] where
217         T1 :: forall b. b -> T [Maybe b]
218
219 Hence we translate to
220
221         -- Wrapper
222   $WT1 :: forall b. b -> T [Maybe b]
223   $WT1 b v = T1 (Maybe b) b (Maybe b) v
224                         `cast` sym (Co7T (Maybe b))
225
226         -- Worker
227   T1 :: forall c b. (c ~ Maybe b) => b -> :R7T c
228
229         -- Coercion from family type to representation type
230   Co7T a :: T [a] ~ :R7T a
231
232 Note [Newtype datacons]
233 ~~~~~~~~~~~~~~~~~~~~~~~
234 The "data constructor" for a newtype should always be vanilla.  At one
235 point this wasn't true, because the newtype arising from
236      class C a => D a
237 looked like
238        newtype T:D a = D:D (C a)
239 so the data constructor for T:C had a single argument, namely the
240 predicate (C a).  But now we treat that as an ordinary argument, not
241 part of the theta-type, so all is well.
242
243
244 %************************************************************************
245 %*                                                                      *
246 \subsection{Dictionary selectors}
247 %*                                                                      *
248 %************************************************************************
249
250 Selecting a field for a dictionary.  If there is just one field, then
251 there's nothing to do.
252
253 Dictionary selectors may get nested forall-types.  Thus:
254
255         class Foo a where
256           op :: forall b. Ord b => a -> b -> b
257
258 Then the top-level type for op is
259
260         op :: forall a. Foo a =>
261               forall b. Ord b =>
262               a -> b -> b
263
264 This is unlike ordinary record selectors, which have all the for-alls
265 at the outside.  When dealing with classes it's very convenient to
266 recover the original type signature from the class op selector.
267
268 \begin{code}
269 mkDictSelId :: Name          -- Name of one of the *value* selectors
270                              -- (dictionary superclass or method)
271             -> Class -> Id
272 mkDictSelId name clas
273   = mkGlobalId (ClassOpId clas) name sel_ty info
274   where
275     tycon          = classTyCon clas
276     sel_names      = map idName (classAllSelIds clas)
277     new_tycon      = isNewTyCon tycon
278     [data_con]     = tyConDataCons tycon
279     tyvars         = dataConUnivTyVars data_con
280     arg_tys        = dataConRepArgTys data_con  -- Includes the dictionary superclasses
281     val_index      = assoc "MkId.mkDictSelId" (sel_names `zip` [0..]) name
282
283     sel_ty = mkForAllTys tyvars (mkFunTy (mkClassPred clas (mkTyVarTys tyvars))
284                                          (getNth arg_tys val_index))
285
286     base_info = noCafIdInfo
287                 `setArityInfo`         1
288                 `setStrictnessInfo`    strict_sig
289
290     info | new_tycon
291          = base_info `setInlinePragInfo` alwaysInlinePragma
292                      `setUnfoldingInfo`  mkInlineUnfolding (Just 1) (mkDictSelRhs clas val_index)
293                    -- See Note [Single-method classes] in TcInstDcls
294                    -- for why alwaysInlinePragma
295
296          | otherwise
297          = base_info `setSpecInfo` mkSpecInfo [rule]
298                    -- Add a magic BuiltinRule, but no unfolding
299                    -- so that the rule is always available to fire.
300                    -- See Note [ClassOp/DFun selection] in TcInstDcls
301
302     n_ty_args = length tyvars
303
304     -- This is the built-in rule that goes
305     --      op (dfT d1 d2) --->  opT d1 d2
306     rule = BuiltinRule { ru_name = fsLit "Class op " `appendFS`
307                                      occNameFS (getOccName name)
308                        , ru_fn    = name
309                        , ru_nargs = n_ty_args + 1
310                        , ru_try   = dictSelRule val_index n_ty_args }
311
312         -- The strictness signature is of the form U(AAAVAAAA) -> T
313         -- where the V depends on which item we are selecting
314         -- It's worth giving one, so that absence info etc is generated
315         -- even if the selector isn't inlined
316
317     strict_sig = mkClosedStrictSig [arg_dmd] topRes
318     arg_dmd | new_tycon = evalDmd
319             | otherwise = mkManyUsedDmd $
320                           mkProdDmd [ if name == sel_name then evalDmd else absDmd
321                                     | sel_name <- sel_names ]
322
323 mkDictSelRhs :: Class
324              -> Int         -- 0-indexed selector among (superclasses ++ methods)
325              -> CoreExpr
326 mkDictSelRhs clas val_index
327   = mkLams tyvars (Lam dict_id rhs_body)
328   where
329     tycon          = classTyCon clas
330     new_tycon      = isNewTyCon tycon
331     [data_con]     = tyConDataCons tycon
332     tyvars         = dataConUnivTyVars data_con
333     arg_tys        = dataConRepArgTys data_con  -- Includes the dictionary superclasses
334
335     the_arg_id     = getNth arg_ids val_index
336     pred           = mkClassPred clas (mkTyVarTys tyvars)
337     dict_id        = mkTemplateLocal 1 pred
338     arg_ids        = mkTemplateLocalsNum 2 arg_tys
339
340     rhs_body | new_tycon = unwrapNewTypeBody tycon (map mkTyVarTy tyvars) (Var dict_id)
341              | otherwise = Case (Var dict_id) dict_id (idType the_arg_id)
342                                 [(DataAlt data_con, arg_ids, varToCoreExpr the_arg_id)]
343                                 -- varToCoreExpr needed for equality superclass selectors
344                                 --   sel a b d = case x of { MkC _ (g:a~b) _ -> CO g }
345
346 dictSelRule :: Int -> Arity -> RuleFun
347 -- Tries to persuade the argument to look like a constructor
348 -- application, using exprIsConApp_maybe, and then selects
349 -- from it
350 --       sel_i t1..tk (D t1..tk op1 ... opm) = opi
351 --
352 dictSelRule val_index n_ty_args _ id_unf _ args
353   | (dict_arg : _) <- drop n_ty_args args
354   , Just (_, _, con_args) <- exprIsConApp_maybe id_unf dict_arg
355   = Just (getNth con_args val_index)
356   | otherwise
357   = Nothing
358 \end{code}
359
360
361 %************************************************************************
362 %*                                                                      *
363         Boxing and unboxing
364 %*                                                                      *
365 %************************************************************************
366
367
368 \begin{code}
369 mkDataConWorkId :: Name -> DataCon -> Id
370 mkDataConWorkId wkr_name data_con
371   | isNewTyCon tycon
372   = mkGlobalId (DataConWrapId data_con) wkr_name nt_wrap_ty nt_work_info
373   | otherwise
374   = mkGlobalId (DataConWorkId data_con) wkr_name alg_wkr_ty wkr_info
375
376   where
377     tycon = dataConTyCon data_con
378
379         ----------- Workers for data types --------------
380     alg_wkr_ty = dataConRepType data_con
381     wkr_arity = dataConRepArity data_con
382     wkr_info  = noCafIdInfo
383                 `setArityInfo`       wkr_arity
384                 `setStrictnessInfo`  wkr_sig
385                 `setUnfoldingInfo`   evaldUnfolding  -- Record that it's evaluated,
386                                                      -- even if arity = 0
387
388     wkr_sig = mkClosedStrictSig (replicate wkr_arity topDmd) (dataConCPR data_con)
389         --      Note [Data-con worker strictness]
390         -- Notice that we do *not* say the worker is strict
391         -- even if the data constructor is declared strict
392         --      e.g.    data T = MkT !(Int,Int)
393         -- Why?  Because the *wrapper* is strict (and its unfolding has case
394         -- expresssions that do the evals) but the *worker* itself is not.
395         -- If we pretend it is strict then when we see
396         --      case x of y -> $wMkT y
397         -- the simplifier thinks that y is "sure to be evaluated" (because
398         --  $wMkT is strict) and drops the case.  No, $wMkT is not strict.
399         --
400         -- When the simplifer sees a pattern
401         --      case e of MkT x -> ...
402         -- it uses the dataConRepStrictness of MkT to mark x as evaluated;
403         -- but that's fine... dataConRepStrictness comes from the data con
404         -- not from the worker Id.
405
406         ----------- Workers for newtypes --------------
407     (nt_tvs, _, nt_arg_tys, _) = dataConSig data_con
408     res_ty_args  = mkTyVarTys nt_tvs
409     nt_wrap_ty   = dataConUserType data_con
410     nt_work_info = noCafIdInfo          -- The NoCaf-ness is set by noCafIdInfo
411                   `setArityInfo` 1      -- Arity 1
412                   `setInlinePragInfo`    alwaysInlinePragma
413                   `setUnfoldingInfo`     newtype_unf
414     id_arg1      = mkTemplateLocal 1 (head nt_arg_tys)
415     newtype_unf  = ASSERT2( isVanillaDataCon data_con &&
416                             isSingleton nt_arg_tys, ppr data_con  )
417                               -- Note [Newtype datacons]
418                    mkCompulsoryUnfolding $
419                    mkLams nt_tvs $ Lam id_arg1 $
420                    wrapNewTypeBody tycon res_ty_args (Var id_arg1)
421
422 dataConCPR :: DataCon -> DmdResult
423 dataConCPR con
424   | isDataTyCon tycon     -- Real data types only; that is,
425                           -- not unboxed tuples or newtypes
426   , isVanillaDataCon con  -- No existentials
427   , wkr_arity > 0
428   , wkr_arity <= mAX_CPR_SIZE
429   = if is_prod then vanillaCprProdRes (dataConRepArity con)
430                else cprSumRes (dataConTag con)
431   | otherwise
432   = topRes
433   where
434     is_prod = isProductTyCon tycon
435     tycon = dataConTyCon con
436     wkr_arity = dataConRepArity con
437
438     mAX_CPR_SIZE :: Arity
439     mAX_CPR_SIZE = 10
440     -- We do not treat very big tuples as CPR-ish:
441     --      a) for a start we get into trouble because there aren't
442     --         "enough" unboxed tuple types (a tiresome restriction,
443     --         but hard to fix),
444     --      b) more importantly, big unboxed tuples get returned mainly
445     --         on the stack, and are often then allocated in the heap
446     --         by the caller.  So doing CPR for them may in fact make
447     --         things worse.
448 \end{code}
449
450 -------------------------------------------------
451 --         Data constructor representation
452 --
453 -- This is where we decide how to wrap/unwrap the
454 -- constructor fields
455 --
456 --------------------------------------------------
457
458
459 \begin{code}
460 type Unboxer = Var -> UniqSM ([Var], CoreExpr -> CoreExpr)
461   -- Unbox: bind rep vars by decomposing src var
462
463 data Boxer = UnitBox | Boxer (TvSubst -> UniqSM ([Var], CoreExpr))
464   -- Box:   build src arg using these rep vars
465
466 newtype DataConBoxer = DCB ([Type] -> [Var] -> UniqSM ([Var], [CoreBind]))
467                        -- Bind these src-level vars, returning the
468                        -- rep-level vars to bind in the pattern
469
470 mkDataConRep :: DynFlags -> FamInstEnvs -> Name -> DataCon -> UniqSM DataConRep
471 mkDataConRep dflags fam_envs wrap_name data_con
472   | not wrapper_reqd
473   = return NoDataConRep
474
475   | otherwise
476   = do { wrap_args <- mapM newLocal wrap_arg_tys
477        ; wrap_body <- mk_rep_app (wrap_args `zip` dropList eq_spec unboxers)
478                                  initial_wrap_app
479
480        ; let wrap_id = mkGlobalId (DataConWrapId data_con) wrap_name wrap_ty wrap_info
481              wrap_info = noCafIdInfo
482                          `setArityInfo`         wrap_arity
483                              -- It's important to specify the arity, so that partial
484                              -- applications are treated as values
485                          `setInlinePragInfo`    alwaysInlinePragma
486                          `setUnfoldingInfo`     wrap_unf
487                          `setStrictnessInfo`    wrap_sig
488                              -- We need to get the CAF info right here because TidyPgm
489                              -- does not tidy the IdInfo of implicit bindings (like the wrapper)
490                              -- so it not make sure that the CAF info is sane
491
492              wrap_sig = mkClosedStrictSig wrap_arg_dmds (dataConCPR data_con)
493              wrap_arg_dmds = map mk_dmd (dropList eq_spec wrap_bangs)
494              mk_dmd str | isBanged str = evalDmd
495                         | otherwise    = topDmd
496                  -- The Cpr info can be important inside INLINE rhss, where the
497                  -- wrapper constructor isn't inlined.
498                  -- And the argument strictness can be important too; we
499                  -- may not inline a contructor when it is partially applied.
500                  -- For example:
501                  --      data W = C !Int !Int !Int
502                  --      ...(let w = C x in ...(w p q)...)...
503                  -- we want to see that w is strict in its two arguments
504
505              wrap_unf = mkInlineUnfolding (Just wrap_arity) wrap_rhs
506              wrap_tvs = (univ_tvs `minusList` map fst eq_spec) ++ ex_tvs
507              wrap_rhs = mkLams wrap_tvs $
508                         mkLams wrap_args $
509                         wrapFamInstBody tycon res_ty_args $
510                         wrap_body
511
512        ; return (DCR { dcr_wrap_id = wrap_id
513                      , dcr_boxer   = mk_boxer boxers
514                      , dcr_arg_tys = rep_tys
515                      , dcr_stricts = rep_strs
516                      , dcr_bangs   = dropList ev_tys wrap_bangs }) }
517
518   where
519     (univ_tvs, ex_tvs, eq_spec, theta, orig_arg_tys, _) = dataConFullSig data_con
520     res_ty_args  = substTyVars (mkTopTvSubst eq_spec) univ_tvs
521     tycon        = dataConTyCon data_con       -- The representation TyCon (not family)
522     wrap_ty      = dataConUserType data_con
523     ev_tys       = eqSpecPreds eq_spec ++ theta
524     all_arg_tys  = ev_tys                         ++ orig_arg_tys
525     orig_bangs   = map mk_pred_strict_mark ev_tys ++ dataConStrictMarks data_con
526
527     wrap_arg_tys = theta ++ orig_arg_tys
528     wrap_arity   = length wrap_arg_tys
529              -- The wrap_args are the arguments *other than* the eq_spec
530              -- Because we are going to apply the eq_spec args manually in the
531              -- wrapper
532
533     (wrap_bangs, rep_tys_w_strs, wrappers)
534        = unzip3 (zipWith (dataConArgRep dflags fam_envs) all_arg_tys orig_bangs)
535     (unboxers, boxers) = unzip wrappers
536     (rep_tys, rep_strs) = unzip (concat rep_tys_w_strs)
537
538     wrapper_reqd = not (isNewTyCon tycon)  -- Newtypes have only a worker
539                 && (any isBanged orig_bangs   -- Some forcing/unboxing
540                                               -- (includes eq_spec)
541                     || isFamInstTyCon tycon)  -- Cast result
542
543     initial_wrap_app = Var (dataConWorkId data_con)
544                       `mkTyApps`  res_ty_args
545                       `mkVarApps` ex_tvs
546                       `mkCoApps`  map (mkReflCo Nominal . snd) eq_spec
547                         -- Dont box the eq_spec coercions since they are
548                         -- marked as HsUnpack by mk_dict_strict_mark
549
550     mk_boxer :: [Boxer] -> DataConBoxer
551     mk_boxer boxers = DCB (\ ty_args src_vars ->
552                       do { let ex_vars = takeList ex_tvs src_vars
553                                subst1 = mkTopTvSubst (univ_tvs `zip` ty_args)
554                                subst2 = extendTvSubstList subst1 ex_tvs
555                                                           (mkTyVarTys ex_vars)
556                          ; (rep_ids, binds) <- go subst2 boxers (dropList ex_tvs src_vars)
557                          ; return (ex_vars ++ rep_ids, binds) } )
558
559     go _ [] src_vars = ASSERT2( null src_vars, ppr data_con ) return ([], [])
560     go subst (UnitBox : boxers) (src_var : src_vars)
561       = do { (rep_ids2, binds) <- go subst boxers src_vars
562            ; return (src_var : rep_ids2, binds) }
563     go subst (Boxer boxer : boxers) (src_var : src_vars)
564       = do { (rep_ids1, arg)  <- boxer subst
565            ; (rep_ids2, binds) <- go subst boxers src_vars
566            ; return (rep_ids1 ++ rep_ids2, NonRec src_var arg : binds) }
567     go _ (_:_) [] = pprPanic "mk_boxer" (ppr data_con)
568
569     mk_rep_app :: [(Id,Unboxer)] -> CoreExpr -> UniqSM CoreExpr
570     mk_rep_app [] con_app
571       = return con_app
572     mk_rep_app ((wrap_arg, unboxer) : prs) con_app
573       = do { (rep_ids, unbox_fn) <- unboxer wrap_arg
574            ; expr <- mk_rep_app prs (mkVarApps con_app rep_ids)
575            ; return (unbox_fn expr) }
576
577 -------------------------
578 newLocal :: Type -> UniqSM Var
579 newLocal ty = do { uniq <- getUniqueUs
580                  ; return (mkSysLocal (fsLit "dt") uniq ty) }
581
582 -------------------------
583 dataConArgRep
584    :: DynFlags
585    -> FamInstEnvs
586    -> Type -> HsBang
587    -> ( HsBang   -- Like input but with HsUnpackFailed if necy
588       , [(Type, StrictnessMark)]   -- Rep types
589       , (Unboxer, Boxer) )
590
591 dataConArgRep _ _ arg_ty HsNoBang
592   = (HsNoBang, [(arg_ty, NotMarkedStrict)], (unitUnboxer, unitBoxer))
593
594 dataConArgRep _ _ arg_ty (HsUserBang _ False)  -- No '!'
595   = (HsNoBang, [(arg_ty, NotMarkedStrict)], (unitUnboxer, unitBoxer))
596
597 dataConArgRep dflags fam_envs arg_ty
598     (HsUserBang unpk_prag True)  -- {-# UNPACK #-} !
599   | not (gopt Opt_OmitInterfacePragmas dflags) -- Don't unpack if -fomit-iface-pragmas
600           -- Don't unpack if we aren't optimising; rather arbitrarily,
601           -- we use -fomit-iface-pragmas as the indication
602   , let mb_co   = topNormaliseType_maybe fam_envs arg_ty
603                      -- Unwrap type families and newtypes
604         arg_ty' = case mb_co of { Just (_,ty) -> ty; Nothing -> arg_ty }
605   , isUnpackableType fam_envs arg_ty'
606   , (rep_tys, wrappers) <- dataConArgUnpack arg_ty'
607   , case unpk_prag of
608       Nothing -> gopt Opt_UnboxStrictFields dflags
609               || (gopt Opt_UnboxSmallStrictFields dflags
610                    && length rep_tys <= 1)  -- See Note [Unpack one-wide fields]
611       Just unpack_me -> unpack_me
612   = case mb_co of
613       Nothing          -> (HsUnpack Nothing,   rep_tys, wrappers)
614       Just (co,rep_ty) -> (HsUnpack (Just co), rep_tys, wrapCo co rep_ty wrappers)
615
616   | otherwise  -- Record the strict-but-no-unpack decision
617   = strict_but_not_unpacked arg_ty
618
619 dataConArgRep _ _ arg_ty HsStrict
620   = strict_but_not_unpacked arg_ty
621
622 dataConArgRep _ _ arg_ty (HsUnpack Nothing)
623   | (rep_tys, wrappers) <- dataConArgUnpack arg_ty
624   = (HsUnpack Nothing, rep_tys, wrappers)
625
626 dataConArgRep _ _ _ (HsUnpack (Just co))
627   | let co_rep_ty = pSnd (coercionKind co)
628   , (rep_tys, wrappers) <- dataConArgUnpack co_rep_ty
629   = (HsUnpack (Just co), rep_tys, wrapCo co co_rep_ty wrappers)
630
631 strict_but_not_unpacked :: Type -> (HsBang, [(Type,StrictnessMark)], (Unboxer, Boxer))
632 strict_but_not_unpacked arg_ty
633   = (HsStrict, [(arg_ty, MarkedStrict)], (seqUnboxer, unitBoxer))
634
635 -------------------------
636 wrapCo :: Coercion -> Type -> (Unboxer, Boxer) -> (Unboxer, Boxer)
637 wrapCo co rep_ty (unbox_rep, box_rep)  -- co :: arg_ty ~ rep_ty
638   = (unboxer, boxer)
639   where
640     unboxer arg_id = do { rep_id <- newLocal rep_ty
641                         ; (rep_ids, rep_fn) <- unbox_rep rep_id
642                         ; let co_bind = NonRec rep_id (Var arg_id `Cast` co)
643                         ; return (rep_ids, Let co_bind . rep_fn) }
644     boxer = Boxer $ \ subst ->
645             do { (rep_ids, rep_expr)
646                     <- case box_rep of
647                          UnitBox -> do { rep_id <- newLocal (TcType.substTy subst rep_ty)
648                                        ; return ([rep_id], Var rep_id) }
649                          Boxer boxer -> boxer subst
650                ; let sco = substCo (tvCvSubst subst) co
651                ; return (rep_ids, rep_expr `Cast` mkSymCo sco) }
652
653 ------------------------
654 seqUnboxer :: Unboxer
655 seqUnboxer v = return ([v], \e -> Case (Var v) v (exprType e) [(DEFAULT, [], e)])
656
657 unitUnboxer :: Unboxer
658 unitUnboxer v = return ([v], \e -> e)
659
660 unitBoxer :: Boxer
661 unitBoxer = UnitBox
662
663 -------------------------
664 dataConArgUnpack
665    :: Type
666    ->  ( [(Type, StrictnessMark)]   -- Rep types
667        , (Unboxer, Boxer) )
668
669 dataConArgUnpack arg_ty
670   | Just (tc, tc_args) <- splitTyConApp_maybe arg_ty
671   , Just con <- tyConSingleAlgDataCon_maybe tc
672       -- NB: check for an *algebraic* data type
673       -- A recursive newtype might mean that
674       -- 'arg_ty' is a newtype
675   , let rep_tys = dataConInstArgTys con tc_args
676   = ASSERT( isVanillaDataCon con )
677     ( rep_tys `zip` dataConRepStrictness con
678     ,( \ arg_id ->
679        do { rep_ids <- mapM newLocal rep_tys
680           ; let unbox_fn body
681                   = Case (Var arg_id) arg_id (exprType body)
682                          [(DataAlt con, rep_ids, body)]
683           ; return (rep_ids, unbox_fn) }
684      , Boxer $ \ subst ->
685        do { rep_ids <- mapM (newLocal . TcType.substTy subst) rep_tys
686           ; return (rep_ids, Var (dataConWorkId con)
687                              `mkTyApps` (substTys subst tc_args)
688                              `mkVarApps` rep_ids ) } ) )
689   | otherwise
690   = pprPanic "dataConArgUnpack" (ppr arg_ty)
691     -- An interface file specified Unpacked, but we couldn't unpack it
692
693 isUnpackableType :: FamInstEnvs -> Type -> Bool
694 -- True if we can unpack the UNPACK the argument type
695 -- See Note [Recursive unboxing]
696 -- We look "deeply" inside rather than relying on the DataCons
697 -- we encounter on the way, because otherwise we might well
698 -- end up relying on ourselves!
699 isUnpackableType fam_envs ty
700   | Just (tc, _) <- splitTyConApp_maybe ty
701   , Just con <- tyConSingleAlgDataCon_maybe tc
702   , isVanillaDataCon con
703   = ok_con_args (unitNameSet (getName tc)) con
704   | otherwise
705   = False
706   where
707     ok_arg tcs (ty, bang) = not (attempt_unpack bang) || ok_ty tcs norm_ty
708         where
709           norm_ty = topNormaliseType fam_envs ty
710     ok_ty tcs ty
711       | Just (tc, _) <- splitTyConApp_maybe ty
712       , let tc_name = getName tc
713       =  not (tc_name `elemNameSet` tcs)
714       && case tyConSingleAlgDataCon_maybe tc of
715             Just con | isVanillaDataCon con
716                     -> ok_con_args (tcs `addOneToNameSet` getName tc) con
717             _ -> True
718       | otherwise
719       = True
720
721     ok_con_args tcs con
722        = all (ok_arg tcs) (dataConOrigArgTys con `zip` dataConStrictMarks con)
723          -- NB: dataConStrictMarks gives the *user* request;
724          -- We'd get a black hole if we used dataConRepBangs
725
726     attempt_unpack (HsUnpack {})                 = True
727     attempt_unpack (HsUserBang (Just unpk) bang) = bang && unpk
728     attempt_unpack (HsUserBang Nothing bang)     = bang  -- Be conservative
729     attempt_unpack HsStrict                      = False
730     attempt_unpack HsNoBang                      = False
731 \end{code}
732
733 Note [Unpack one-wide fields]
734 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
735 The flag UnboxSmallStrictFields ensures that any field that can
736 (safely) be unboxed to a word-sized unboxed field, should be so unboxed.
737 For example:
738
739     data A = A Int#
740     newtype B = B A
741     data C = C !B
742     data D = D !C
743     data E = E !()
744     data F = F !D
745     data G = G !F !F
746
747 All of these should have an Int# as their representation, except
748 G which should have two Int#s.
749
750 However
751
752     data T = T !(S Int)
753     data S = S !a
754
755 Here we can represent T with an Int#.
756
757 Note [Recursive unboxing]
758 ~~~~~~~~~~~~~~~~~~~~~~~~~
759 Consider
760   data R = MkR {-# UNPACK #-} !S Int
761   data S = MkS {-# UNPACK #-} !Int
762 The representation arguments of MkR are the *representation* arguments
763 of S (plus Int); the rep args of MkS are Int#.  This is all fine.
764
765 But be careful not to try to unbox this!
766         data T = MkT {-# UNPACK #-} !T Int
767 Because then we'd get an infinite number of arguments.
768
769 Here is a more complicated case:
770         data S = MkS {-# UNPACK #-} !T Int
771         data T = MkT {-# UNPACK #-} !S Int
772 Each of S and T must decide independendently whether to unpack
773 and they had better not both say yes. So they must both say no.
774
775 Also behave conservatively when there is no UNPACK pragma
776         data T = MkS !T Int
777 with -funbox-strict-fields or -funbox-small-strict-fields
778 we need to behave as if there was an UNPACK pragma there.
779
780 But it's the *argument* type that matters. This is fine:
781         data S = MkS S !Int
782 because Int is non-recursive.
783
784
785 Note [Unpack equality predicates]
786 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
787 If we have a GADT with a contructor C :: (a~[b]) => b -> T a
788 we definitely want that equality predicate *unboxed* so that it
789 takes no space at all.  This is easily done: just give it
790 an UNPACK pragma. The rest of the unpack/repack code does the
791 heavy lifting.  This one line makes every GADT take a word less
792 space for each equality predicate, so it's pretty important!
793
794
795 \begin{code}
796 mk_pred_strict_mark :: PredType -> HsBang
797 mk_pred_strict_mark pred
798   | isEqPred pred = HsUnpack Nothing    -- Note [Unpack equality predicates]
799   | otherwise     = HsNoBang
800 \end{code}
801
802 %************************************************************************
803 %*                                                                      *
804         Wrapping and unwrapping newtypes and type families
805 %*                                                                      *
806 %************************************************************************
807
808 \begin{code}
809 wrapNewTypeBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
810 -- The wrapper for the data constructor for a newtype looks like this:
811 --      newtype T a = MkT (a,Int)
812 --      MkT :: forall a. (a,Int) -> T a
813 --      MkT = /\a. \(x:(a,Int)). x `cast` sym (CoT a)
814 -- where CoT is the coercion TyCon assoicated with the newtype
815 --
816 -- The call (wrapNewTypeBody T [a] e) returns the
817 -- body of the wrapper, namely
818 --      e `cast` (CoT [a])
819 --
820 -- If a coercion constructor is provided in the newtype, then we use
821 -- it, otherwise the wrap/unwrap are both no-ops
822 --
823 -- If the we are dealing with a newtype *instance*, we have a second coercion
824 -- identifying the family instance with the constructor of the newtype
825 -- instance.  This coercion is applied in any case (ie, composed with the
826 -- coercion constructor of the newtype or applied by itself).
827
828 wrapNewTypeBody tycon args result_expr
829   = ASSERT( isNewTyCon tycon )
830     wrapFamInstBody tycon args $
831     mkCast result_expr (mkSymCo co)
832   where
833     co = mkUnbranchedAxInstCo Representational (newTyConCo tycon) args
834
835 -- When unwrapping, we do *not* apply any family coercion, because this will
836 -- be done via a CoPat by the type checker.  We have to do it this way as
837 -- computing the right type arguments for the coercion requires more than just
838 -- a spliting operation (cf, TcPat.tcConPat).
839
840 unwrapNewTypeBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
841 unwrapNewTypeBody tycon args result_expr
842   = ASSERT( isNewTyCon tycon )
843     mkCast result_expr (mkUnbranchedAxInstCo Representational (newTyConCo tycon) args)
844
845 -- If the type constructor is a representation type of a data instance, wrap
846 -- the expression into a cast adjusting the expression type, which is an
847 -- instance of the representation type, to the corresponding instance of the
848 -- family instance type.
849 -- See Note [Wrappers for data instance tycons]
850 wrapFamInstBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
851 wrapFamInstBody tycon args body
852   | Just co_con <- tyConFamilyCoercion_maybe tycon
853   = mkCast body (mkSymCo (mkUnbranchedAxInstCo Representational co_con args))
854   | otherwise
855   = body
856
857 -- Same as `wrapFamInstBody`, but for type family instances, which are
858 -- represented by a `CoAxiom`, and not a `TyCon`
859 wrapTypeFamInstBody :: CoAxiom br -> Int -> [Type] -> CoreExpr -> CoreExpr
860 wrapTypeFamInstBody axiom ind args body
861   = mkCast body (mkSymCo (mkAxInstCo Representational axiom ind args))
862
863 wrapTypeUnbranchedFamInstBody :: CoAxiom Unbranched -> [Type] -> CoreExpr -> CoreExpr
864 wrapTypeUnbranchedFamInstBody axiom
865   = wrapTypeFamInstBody axiom 0
866
867 unwrapFamInstScrut :: TyCon -> [Type] -> CoreExpr -> CoreExpr
868 unwrapFamInstScrut tycon args scrut
869   | Just co_con <- tyConFamilyCoercion_maybe tycon
870   = mkCast scrut (mkUnbranchedAxInstCo Representational co_con args) -- data instances only
871   | otherwise
872   = scrut
873
874 unwrapTypeFamInstScrut :: CoAxiom br -> Int -> [Type] -> CoreExpr -> CoreExpr
875 unwrapTypeFamInstScrut axiom ind args scrut
876   = mkCast scrut (mkAxInstCo Representational axiom ind args)
877
878 unwrapTypeUnbranchedFamInstScrut :: CoAxiom Unbranched -> [Type] -> CoreExpr -> CoreExpr
879 unwrapTypeUnbranchedFamInstScrut axiom
880   = unwrapTypeFamInstScrut axiom 0
881 \end{code}
882
883
884 %************************************************************************
885 %*                                                                      *
886 \subsection{Primitive operations}
887 %*                                                                      *
888 %************************************************************************
889
890 \begin{code}
891 mkPrimOpId :: PrimOp -> Id
892 mkPrimOpId prim_op
893   = id
894   where
895     (tyvars,arg_tys,res_ty, arity, strict_sig) = primOpSig prim_op
896     ty   = mkForAllTys tyvars (mkFunTys arg_tys res_ty)
897     name = mkWiredInName gHC_PRIM (primOpOcc prim_op)
898                          (mkPrimOpIdUnique (primOpTag prim_op))
899                          (AnId id) UserSyntax
900     id   = mkGlobalId (PrimOpId prim_op) name ty info
901
902     info = noCafIdInfo
903            `setSpecInfo`          mkSpecInfo (maybeToList $ primOpRules name prim_op)
904            `setArityInfo`         arity
905            `setStrictnessInfo`    strict_sig
906            `setInlinePragInfo`    neverInlinePragma
907                -- We give PrimOps a NOINLINE pragma so that we don't
908                -- get silly warnings from Desugar.dsRule (the inline_shadows_rule
909                -- test) about a RULE conflicting with a possible inlining
910                -- cf Trac #7287
911
912 -- For each ccall we manufacture a separate CCallOpId, giving it
913 -- a fresh unique, a type that is correct for this particular ccall,
914 -- and a CCall structure that gives the correct details about calling
915 -- convention etc.
916 --
917 -- The *name* of this Id is a local name whose OccName gives the full
918 -- details of the ccall, type and all.  This means that the interface
919 -- file reader can reconstruct a suitable Id
920
921 mkFCallId :: DynFlags -> Unique -> ForeignCall -> Type -> Id
922 mkFCallId dflags uniq fcall ty
923   = ASSERT( isEmptyVarSet (tyVarsOfType ty) )
924     -- A CCallOpId should have no free type variables;
925     -- when doing substitutions won't substitute over it
926     mkGlobalId (FCallId fcall) name ty info
927   where
928     occ_str = showSDoc dflags (braces (ppr fcall <+> ppr ty))
929     -- The "occurrence name" of a ccall is the full info about the
930     -- ccall; it is encoded, but may have embedded spaces etc!
931
932     name = mkFCallName uniq occ_str
933
934     info = noCafIdInfo
935            `setArityInfo`         arity
936            `setStrictnessInfo`    strict_sig
937
938     (_, tau)        = tcSplitForAllTys ty
939     (arg_tys, _)    = tcSplitFunTys tau
940     arity           = length arg_tys
941     strict_sig      = mkClosedStrictSig (replicate arity evalDmd) topRes
942 \end{code}
943
944
945 %************************************************************************
946 %*                                                                      *
947 \subsection{DictFuns and default methods}
948 %*                                                                      *
949 %************************************************************************
950
951 Note [Dict funs and default methods]
952 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
953 Dict funs and default methods are *not* ImplicitIds.  Their definition
954 involves user-written code, so we can't figure out their strictness etc
955 based on fixed info, as we can for constructors and record selectors (say).
956
957 NB: See also Note [Exported LocalIds] in Id
958
959 \begin{code}
960 mkDictFunId :: Name      -- Name to use for the dict fun;
961             -> [TyVar]
962             -> ThetaType
963             -> Class
964             -> [Type]
965             -> Id
966 -- Implements the DFun Superclass Invariant (see TcInstDcls)
967 -- See Note [Dict funs and default methods]
968
969 mkDictFunId dfun_name tvs theta clas tys
970   = mkExportedLocalId (DFunId n_silent is_nt)
971                       dfun_name
972                       dfun_ty
973   where
974     is_nt = isNewTyCon (classTyCon clas)
975     (n_silent, dfun_ty) = mkDictFunTy tvs theta clas tys
976
977 mkDictFunTy :: [TyVar] -> ThetaType -> Class -> [Type] -> (Int, Type)
978 mkDictFunTy tvs theta clas tys
979   = (length silent_theta, dfun_ty)
980   where
981     dfun_ty = mkSigmaTy tvs (silent_theta ++ theta) (mkClassPred clas tys)
982     silent_theta
983       | null tvs, null theta
984       = []
985       | otherwise
986       = filterOut discard $
987         substTheta (zipTopTvSubst (classTyVars clas) tys)
988                    (classSCTheta clas)
989                    -- See Note [Silent Superclass Arguments]
990     discard pred = any (`eqPred` pred) theta
991                  -- See the DFun Superclass Invariant in TcInstDcls
992 \end{code}
993
994
995 %************************************************************************
996 %*                                                                      *
997 \subsection{Un-definable}
998 %*                                                                      *
999 %************************************************************************
1000
1001 These Ids can't be defined in Haskell.  They could be defined in
1002 unfoldings in the wired-in GHC.Prim interface file, but we'd have to
1003 ensure that they were definitely, definitely inlined, because there is
1004 no curried identifier for them.  That's what mkCompulsoryUnfolding
1005 does.  If we had a way to get a compulsory unfolding from an interface
1006 file, we could do that, but we don't right now.
1007
1008 unsafeCoerce# isn't so much a PrimOp as a phantom identifier, that
1009 just gets expanded into a type coercion wherever it occurs.  Hence we
1010 add it as a built-in Id with an unfolding here.
1011
1012 The type variables we use here are "open" type variables: this means
1013 they can unify with both unlifted and lifted types.  Hence we provide
1014 another gun with which to shoot yourself in the foot.
1015
1016 \begin{code}
1017 lazyIdName, unsafeCoerceName, nullAddrName, seqName,
1018    realWorldName, voidPrimIdName, coercionTokenName,
1019    magicDictName, coerceName, proxyName, dollarName :: Name
1020 unsafeCoerceName  = mkWiredInIdName gHC_PRIM  (fsLit "unsafeCoerce#")  unsafeCoerceIdKey  unsafeCoerceId
1021 nullAddrName      = mkWiredInIdName gHC_PRIM  (fsLit "nullAddr#")      nullAddrIdKey      nullAddrId
1022 seqName           = mkWiredInIdName gHC_PRIM  (fsLit "seq")            seqIdKey           seqId
1023 realWorldName     = mkWiredInIdName gHC_PRIM  (fsLit "realWorld#")     realWorldPrimIdKey realWorldPrimId
1024 voidPrimIdName    = mkWiredInIdName gHC_PRIM  (fsLit "void#")          voidPrimIdKey      voidPrimId
1025 lazyIdName        = mkWiredInIdName gHC_MAGIC (fsLit "lazy")           lazyIdKey          lazyId
1026 coercionTokenName = mkWiredInIdName gHC_PRIM  (fsLit "coercionToken#") coercionTokenIdKey coercionTokenId
1027 magicDictName     = mkWiredInIdName gHC_PRIM  (fsLit "magicDict")      magicDictKey       magicDictId
1028 coerceName        = mkWiredInIdName gHC_PRIM  (fsLit "coerce")         coerceKey          coerceId
1029 proxyName         = mkWiredInIdName gHC_PRIM  (fsLit "proxy#")         proxyHashKey       proxyHashId
1030 dollarName        = mkWiredInIdName gHC_BASE  (fsLit "$")              dollarIdKey        dollarId
1031 \end{code}
1032
1033 \begin{code}
1034 dollarId :: Id  -- Note [dollarId magic]
1035 dollarId = pcMiscPrelId dollarName ty
1036              (noCafIdInfo `setUnfoldingInfo` unf)
1037   where
1038     fun_ty = mkFunTy alphaTy openBetaTy
1039     ty     = mkForAllTys [alphaTyVar, openBetaTyVar] $
1040              mkFunTy fun_ty fun_ty
1041     unf    = mkInlineUnfolding (Just 2) rhs
1042     [f,x]  = mkTemplateLocals [fun_ty, alphaTy]
1043     rhs    = mkLams [alphaTyVar, openBetaTyVar, f, x] $
1044              App (Var f) (Var x)
1045
1046 ------------------------------------------------
1047 -- proxy# :: forall a. Proxy# a
1048 proxyHashId :: Id
1049 proxyHashId
1050   = pcMiscPrelId proxyName ty
1051        (noCafIdInfo `setUnfoldingInfo` evaldUnfolding) -- Note [evaldUnfoldings]
1052   where
1053     ty      = mkForAllTys [kv, tv] (mkProxyPrimTy k t)
1054     kv      = kKiVar
1055     k       = mkTyVarTy kv
1056     tv:_    = tyVarList k
1057     t       = mkTyVarTy tv
1058
1059 ------------------------------------------------
1060 -- unsafeCoerce# :: forall a b. a -> b
1061 unsafeCoerceId :: Id
1062 unsafeCoerceId
1063   = pcMiscPrelId unsafeCoerceName ty info
1064   where
1065     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1066                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1067
1068
1069     ty  = mkForAllTys [openAlphaTyVar,openBetaTyVar]
1070                       (mkFunTy openAlphaTy openBetaTy)
1071     [x] = mkTemplateLocals [openAlphaTy]
1072     rhs = mkLams [openAlphaTyVar,openBetaTyVar,x] $
1073           Cast (Var x) (mkUnsafeCo openAlphaTy openBetaTy)
1074
1075 ------------------------------------------------
1076 nullAddrId :: Id
1077 -- nullAddr# :: Addr#
1078 -- The reason is is here is because we don't provide
1079 -- a way to write this literal in Haskell.
1080 nullAddrId = pcMiscPrelId nullAddrName addrPrimTy info
1081   where
1082     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1083                        `setUnfoldingInfo`  mkCompulsoryUnfolding (Lit nullAddrLit)
1084
1085 ------------------------------------------------
1086 seqId :: Id     -- See Note [seqId magic]
1087 seqId = pcMiscPrelId seqName ty info
1088   where
1089     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1090                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1091                        `setSpecInfo`       mkSpecInfo [seq_cast_rule]
1092
1093
1094     ty  = mkForAllTys [alphaTyVar,betaTyVar]
1095                       (mkFunTy alphaTy (mkFunTy betaTy betaTy))
1096               -- NB argBetaTyVar; see Note [seqId magic]
1097
1098     [x,y] = mkTemplateLocals [alphaTy, betaTy]
1099     rhs = mkLams [alphaTyVar,betaTyVar,x,y] (Case (Var x) x betaTy [(DEFAULT, [], Var y)])
1100
1101     -- See Note [Built-in RULES for seq]
1102     seq_cast_rule = BuiltinRule { ru_name  = fsLit "seq of cast"
1103                                 , ru_fn    = seqName
1104                                 , ru_nargs = 4
1105                                 , ru_try   = match_seq_of_cast
1106                                 }
1107
1108 match_seq_of_cast :: RuleFun
1109     -- See Note [Built-in RULES for seq]
1110 match_seq_of_cast _ _ _ [Type _, Type res_ty, Cast scrut co, expr]
1111   = Just (Var seqId `mkApps` [Type (pFst (coercionKind co)), Type res_ty,
1112                               scrut, expr])
1113 match_seq_of_cast _ _ _ _ = Nothing
1114
1115 ------------------------------------------------
1116 lazyId :: Id    -- See Note [lazyId magic]
1117 lazyId = pcMiscPrelId lazyIdName ty info
1118   where
1119     info = noCafIdInfo
1120     ty  = mkForAllTys [alphaTyVar] (mkFunTy alphaTy alphaTy)
1121
1122
1123 --------------------------------------------------------------------------------
1124 magicDictId :: Id  -- See Note [magicDictId magic]
1125 magicDictId = pcMiscPrelId magicDictName ty info
1126   where
1127   info = noCafIdInfo `setInlinePragInfo` neverInlinePragma
1128   ty   = mkForAllTys [alphaTyVar] alphaTy
1129
1130 --------------------------------------------------------------------------------
1131
1132 coerceId :: Id
1133 coerceId = pcMiscPrelId coerceName ty info
1134   where
1135     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1136                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1137     kv = kKiVar
1138     k = mkTyVarTy kv
1139     a:b:_ = tyVarList k
1140     [aTy,bTy] = map mkTyVarTy [a,b]
1141     eqRTy     = mkTyConApp coercibleTyCon  [k, aTy, bTy]
1142     eqRPrimTy = mkTyConApp eqReprPrimTyCon [k, aTy, bTy]
1143     ty   = mkForAllTys [kv, a, b] (mkFunTys [eqRTy, aTy] bTy)
1144
1145     [eqR,x,eq] = mkTemplateLocals [eqRTy, aTy,eqRPrimTy]
1146     rhs = mkLams [kv,a,b,eqR,x] $
1147           mkWildCase (Var eqR) eqRTy bTy $
1148           [(DataAlt coercibleDataCon, [eq], Cast (Var x) (CoVarCo eq))]
1149 \end{code}
1150
1151 Note [dollarId magic]
1152 ~~~~~~~~~~~~~~~~~~~~~
1153 The only reason that ($) is wired in is so that its type can be
1154     forall (a:*, b:Open). (a->b) -> a -> b
1155 That is, the return type can be unboxed.  E.g. this is OK
1156     foo $ True    where  foo :: Bool -> Int#
1157 because ($) doesn't inspect or move the result of the call to foo.
1158 See Trac #8739.
1159
1160 There is a special typing rule for ($) in TcExpr, so the type of ($)
1161 isn't looked at there, BUT Lint subsequently (and rightly) complains
1162 if sees ($) applied to Int# (say), unless we give it a wired-in type
1163 as we do here.
1164
1165 Note [Unsafe coerce magic]
1166 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1167 We define a *primitive*
1168    GHC.Prim.unsafeCoerce#
1169 and then in the base library we define the ordinary function
1170    Unsafe.Coerce.unsafeCoerce :: forall (a:*) (b:*). a -> b
1171    unsafeCoerce x = unsafeCoerce# x
1172
1173 Notice that unsafeCoerce has a civilized (albeit still dangerous)
1174 polymorphic type, whose type args have kind *.  So you can't use it on
1175 unboxed values (unsafeCoerce 3#).
1176
1177 In contrast unsafeCoerce# is even more dangerous because you *can* use
1178 it on unboxed things, (unsafeCoerce# 3#) :: Int. Its type is
1179    forall (a:OpenKind) (b:OpenKind). a -> b
1180
1181 Note [seqId magic]
1182 ~~~~~~~~~~~~~~~~~~
1183 'GHC.Prim.seq' is special in several ways.
1184
1185 a) Its second arg can have an unboxed type
1186       x `seq` (v +# w)
1187    Hence its second type variable has ArgKind
1188
1189 b) Its fixity is set in LoadIface.ghcPrimIface
1190
1191 c) It has quite a bit of desugaring magic.
1192    See DsUtils.lhs Note [Desugaring seq (1)] and (2) and (3)
1193
1194 d) There is some special rule handing: Note [User-defined RULES for seq]
1195
1196 e) See Note [Typing rule for seq] in TcExpr.
1197
1198 Note [User-defined RULES for seq]
1199 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1200 Roman found situations where he had
1201       case (f n) of _ -> e
1202 where he knew that f (which was strict in n) would terminate if n did.
1203 Notice that the result of (f n) is discarded. So it makes sense to
1204 transform to
1205       case n of _ -> e
1206
1207 Rather than attempt some general analysis to support this, I've added
1208 enough support that you can do this using a rewrite rule:
1209
1210   RULE "f/seq" forall n.  seq (f n) e = seq n e
1211
1212 You write that rule.  When GHC sees a case expression that discards
1213 its result, it mentally transforms it to a call to 'seq' and looks for
1214 a RULE.  (This is done in Simplify.rebuildCase.)  As usual, the
1215 correctness of the rule is up to you.
1216
1217 To make this work, we need to be careful that the magical desugaring
1218 done in Note [seqId magic] item (c) is *not* done on the LHS of a rule.
1219 Or rather, we arrange to un-do it, in DsBinds.decomposeRuleLhs.
1220
1221 Note [Built-in RULES for seq]
1222 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1223 We also have the following built-in rule for seq
1224
1225   seq (x `cast` co) y = seq x y
1226
1227 This eliminates unnecessary casts and also allows other seq rules to
1228 match more often.  Notably,
1229
1230    seq (f x `cast` co) y  -->  seq (f x) y
1231
1232 and now a user-defined rule for seq (see Note [User-defined RULES for seq])
1233 may fire.
1234
1235
1236 Note [lazyId magic]
1237 ~~~~~~~~~~~~~~~~~~~
1238     lazy :: forall a?. a? -> a?   (i.e. works for unboxed types too)
1239
1240 Used to lazify pseq:   pseq a b = a `seq` lazy b
1241
1242 Also, no strictness: by being a built-in Id, all the info about lazyId comes from here,
1243 not from GHC.Base.hi.   This is important, because the strictness
1244 analyser will spot it as strict!
1245
1246 Also no unfolding in lazyId: it gets "inlined" by a HACK in CorePrep.
1247 It's very important to do this inlining *after* unfoldings are exposed
1248 in the interface file.  Otherwise, the unfolding for (say) pseq in the
1249 interface file will not mention 'lazy', so if we inline 'pseq' we'll totally
1250 miss the very thing that 'lazy' was there for in the first place.
1251 See Trac #3259 for a real world example.
1252
1253 lazyId is defined in GHC.Base, so we don't *have* to inline it.  If it
1254 appears un-applied, we'll end up just calling it.
1255
1256
1257 Note [magicDictId magic]
1258 ~~~~~~~~~~~~~~~~~~~~~~~~~
1259
1260 The identifier `magicDict` is just a place-holder, which is used to
1261 implement a primitve that we cannot define in Haskell but we can write
1262 in Core.  It is declared with a place-holder type:
1263
1264     magicDict :: forall a. a
1265
1266 The intention is that the identifier will be used in a very specific way,
1267 to create dictionaries for classes with a single method.  Consider a class
1268 like this:
1269
1270    class C a where
1271      f :: T a
1272
1273 We are going to use `magicDict`, in conjunction with a built-in Prelude
1274 rule, to cast values of type `T a` into dictionaries for `C a`.  To do
1275 this, we define a function like this in the library:
1276
1277   data WrapC a b = WrapC (C a => Proxy a -> b)
1278
1279   withT :: (C a => Proxy a -> b)
1280         ->  T a -> Proxy a -> b
1281   withT f x y = magicDict (WrapC f) x y
1282
1283 The purpose of `WrapC` is to avoid having `f` instantiated.
1284 Also, it avoids impredicativity, because `magicDict`'s type
1285 cannot be instantiated with a forall.  The field of `WrapC` contains
1286 a `Proxy` parameter which is used to link the type of the constraint,
1287 `C a`, with the type of the `Wrap` value being made.
1288
1289 Next, we add a built-in Prelude rule (see prelude/PrelRules.hs),
1290 which will replace the RHS of this definition with the appropriate
1291 definition in Core.  The rewrite rule works as follows:
1292
1293 magicDict@t (wrap@a@b f) x y
1294 ---->
1295 f (x `cast` co a) y
1296
1297 The `co` coercion is the newtype-coercion extracted from the type-class.
1298 The type class is obtain by looking at the type of wrap.
1299
1300
1301
1302 -------------------------------------------------------------
1303 @realWorld#@ used to be a magic literal, \tr{void#}.  If things get
1304 nasty as-is, change it back to a literal (@Literal@).
1305
1306 voidArgId is a Local Id used simply as an argument in functions
1307 where we just want an arg to avoid having a thunk of unlifted type.
1308 E.g.
1309         x = \ void :: Void# -> (# p, q #)
1310
1311 This comes up in strictness analysis
1312
1313 Note [evaldUnfoldings]
1314 ~~~~~~~~~~~~~~~~~~~~~~
1315 The evaldUnfolding makes it look that some primitive value is
1316 evaluated, which in turn makes Simplify.interestingArg return True,
1317 which in turn makes INLINE things applied to said value likely to be
1318 inlined.
1319
1320
1321 \begin{code}
1322 realWorldPrimId :: Id   -- :: State# RealWorld
1323 realWorldPrimId = pcMiscPrelId realWorldName realWorldStatePrimTy
1324                      (noCafIdInfo `setUnfoldingInfo` evaldUnfolding    -- Note [evaldUnfoldings]
1325                                   `setOneShotInfo` stateHackOneShot)
1326
1327 voidPrimId :: Id     -- Global constant :: Void#
1328 voidPrimId  = pcMiscPrelId voidPrimIdName voidPrimTy
1329                 (noCafIdInfo `setUnfoldingInfo` evaldUnfolding)    -- Note [evaldUnfoldings]
1330
1331 voidArgId :: Id       -- Local lambda-bound :: Void#
1332 voidArgId = mkSysLocal (fsLit "void") voidArgIdKey voidPrimTy
1333
1334 coercionTokenId :: Id         -- :: () ~ ()
1335 coercionTokenId -- Used to replace Coercion terms when we go to STG
1336   = pcMiscPrelId coercionTokenName
1337                  (mkTyConApp eqPrimTyCon [liftedTypeKind, unitTy, unitTy])
1338                  noCafIdInfo
1339 \end{code}
1340
1341
1342 \begin{code}
1343 pcMiscPrelId :: Name -> Type -> IdInfo -> Id
1344 pcMiscPrelId name ty info
1345   = mkVanillaGlobalWithInfo name ty info
1346     -- We lie and say the thing is imported; otherwise, we get into
1347     -- a mess with dependency analysis; e.g., core2stg may heave in
1348     -- random calls to GHCbase.unpackPS__.  If GHCbase is the module
1349     -- being compiled, then it's just a matter of luck if the definition
1350     -- will be in "the right place" to be in scope.
1351 \end{code}