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