d398b3f00a2535a493fc5a0874f94c02b3d85a62
[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,
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         voidArgId, nullAddrId, seqId, lazyId, lazyIdKey,
38         coercionTokenId, magicSingIId,
39
40         -- Re-export error Ids
41         module PrelRules
42     ) where
43
44 #include "HsVersions.h"
45
46 import Rules
47 import TysPrim
48 import TysWiredIn
49 import PrelRules
50 import Type
51 import FamInstEnv
52 import Coercion
53 import TcType
54 import MkCore
55 import CoreUtils        ( exprType, mkCast )
56 import CoreUnfold
57 import Literal
58 import TyCon
59 import CoAxiom
60 import Class
61 import NameSet
62 import VarSet
63 import Name
64 import PrimOp
65 import ForeignCall
66 import DataCon
67 import Id
68 import Var              ( mkExportedLocalVar )
69 import IdInfo
70 import Demand
71 import CoreSyn
72 import Unique
73 import UniqSupply
74 import PrelNames
75 import BasicTypes       hiding ( SuccessFlag(..) )
76 import Util
77 import Pair
78 import DynFlags
79 import Outputable
80 import FastString
81 import ListSetOps
82
83 import Data.Maybe       ( maybeToList )
84 \end{code}
85
86 %************************************************************************
87 %*                                                                      *
88 \subsection{Wired in Ids}
89 %*                                                                      *
90 %************************************************************************
91
92 Note [Wired-in Ids]
93 ~~~~~~~~~~~~~~~~~~~
94 There are several reasons why an Id might appear in the wiredInIds:
95
96 (1) The ghcPrimIds are wired in because they can't be defined in
97     Haskell at all, although the can be defined in Core.  They have
98     compulsory unfoldings, so they are always inlined and they  have
99     no definition site.  Their home module is GHC.Prim, so they
100     also have a description in primops.txt.pp, where they are called
101     'pseudoops'.
102
103 (2) The 'error' function, eRROR_ID, is wired in because we don't yet have
104     a way to express in an interface file that the result type variable
105     is 'open'; that is can be unified with an unboxed type
106
107     [The interface file format now carry such information, but there's
108     no way yet of expressing at the definition site for these 
109     error-reporting functions that they have an 'open' 
110     result type. -- sof 1/99]
111
112 (3) Other error functions (rUNTIME_ERROR_ID) are wired in (a) because
113     the desugarer generates code that mentiones them directly, and
114     (b) for the same reason as eRROR_ID
115
116 (4) lazyId is wired in because the wired-in version overrides the
117     strictness of the version defined in GHC.Base
118
119 In cases (2-4), the function has a definition in a library module, and
120 can be called; but the wired-in version means that the details are 
121 never read from that module's interface file; instead, the full definition
122 is right here.
123
124 \begin{code}
125 wiredInIds :: [Id]
126 wiredInIds
127   =  [lazyId]
128   ++ errorIds           -- Defined in MkCore
129   ++ ghcPrimIds
130
131 -- These Ids are exported from GHC.Prim
132 ghcPrimIds :: [Id]
133 ghcPrimIds
134   = [   -- These can't be defined in Haskell, but they have
135         -- perfectly reasonable unfoldings in Core
136     realWorldPrimId,
137     unsafeCoerceId,
138     nullAddrId,
139     seqId,
140     magicSingIId,
141     coerceId,
142     proxyHashId
143     ]
144 \end{code}
145
146 %************************************************************************
147 %*                                                                      *
148 \subsection{Data constructors}
149 %*                                                                      *
150 %************************************************************************
151
152 The wrapper for a constructor is an ordinary top-level binding that evaluates
153 any strict args, unboxes any args that are going to be flattened, and calls
154 the worker.
155
156 We're going to build a constructor that looks like:
157
158         data (Data a, C b) =>  T a b = T1 !a !Int b
159
160         T1 = /\ a b -> 
161              \d1::Data a, d2::C b ->
162              \p q r -> case p of { p ->
163                        case q of { q ->
164                        Con T1 [a,b] [p,q,r]}}
165
166 Notice that
167
168 * d2 is thrown away --- a context in a data decl is used to make sure
169   one *could* construct dictionaries at the site the constructor
170   is used, but the dictionary isn't actually used.
171
172 * We have to check that we can construct Data dictionaries for
173   the types a and Int.  Once we've done that we can throw d1 away too.
174
175 * We use (case p of q -> ...) to evaluate p, rather than "seq" because
176   all that matters is that the arguments are evaluated.  "seq" is 
177   very careful to preserve evaluation order, which we don't need
178   to be here.
179
180   You might think that we could simply give constructors some strictness
181   info, like PrimOps, and let CoreToStg do the let-to-case transformation.
182   But we don't do that because in the case of primops and functions strictness
183   is a *property* not a *requirement*.  In the case of constructors we need to
184   do something active to evaluate the argument.
185
186   Making an explicit case expression allows the simplifier to eliminate
187   it in the (common) case where the constructor arg is already evaluated.
188
189 Note [Wrappers for data instance tycons]
190 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
191 In the case of data instances, the wrapper also applies the coercion turning
192 the representation type into the family instance type to cast the result of
193 the wrapper.  For example, consider the declarations
194
195   data family Map k :: * -> *
196   data instance Map (a, b) v = MapPair (Map a (Pair b v))
197
198 The tycon to which the datacon MapPair belongs gets a unique internal
199 name of the form :R123Map, and we call it the representation tycon.
200 In contrast, Map is the family tycon (accessible via
201 tyConFamInst_maybe). A coercion allows you to move between
202 representation and family type.  It is accessible from :R123Map via
203 tyConFamilyCoercion_maybe and has kind
204
205   Co123Map a b v :: {Map (a, b) v ~ :R123Map a b v}
206
207 The wrapper and worker of MapPair get the types
208
209         -- Wrapper
210   $WMapPair :: forall a b v. Map a (Map a b v) -> Map (a, b) v
211   $WMapPair a b v = MapPair a b v `cast` sym (Co123Map a b v)
212
213         -- Worker
214   MapPair :: forall a b v. Map a (Map a b v) -> :R123Map a b v
215
216 This coercion is conditionally applied by wrapFamInstBody.
217
218 It's a bit more complicated if the data instance is a GADT as well!
219
220    data instance T [a] where
221         T1 :: forall b. b -> T [Maybe b]
222
223 Hence we translate to
224
225         -- Wrapper
226   $WT1 :: forall b. b -> T [Maybe b]
227   $WT1 b v = T1 (Maybe b) b (Maybe b) v
228                         `cast` sym (Co7T (Maybe b))
229
230         -- Worker
231   T1 :: forall c b. (c ~ Maybe b) => b -> :R7T c
232
233         -- Coercion from family type to representation type
234   Co7T a :: T [a] ~ :R7T a
235
236 Note [Newtype datacons]
237 ~~~~~~~~~~~~~~~~~~~~~~~
238 The "data constructor" for a newtype should always be vanilla.  At one
239 point this wasn't true, because the newtype arising from
240      class C a => D a
241 looked like
242        newtype T:D a = D:D (C a)
243 so the data constructor for T:C had a single argument, namely the
244 predicate (C a).  But now we treat that as an ordinary argument, not
245 part of the theta-type, so all is well.
246
247
248 %************************************************************************
249 %*                                                                      *
250 \subsection{Dictionary selectors}
251 %*                                                                      *
252 %************************************************************************
253
254 Selecting a field for a dictionary.  If there is just one field, then
255 there's nothing to do.  
256
257 Dictionary selectors may get nested forall-types.  Thus:
258
259         class Foo a where
260           op :: forall b. Ord b => a -> b -> b
261
262 Then the top-level type for op is
263
264         op :: forall a. Foo a => 
265               forall b. Ord b => 
266               a -> b -> b
267
268 This is unlike ordinary record selectors, which have all the for-alls
269 at the outside.  When dealing with classes it's very convenient to
270 recover the original type signature from the class op selector.
271
272 \begin{code}
273 mkDictSelId :: DynFlags
274             -> Bool          -- True <=> don't include the unfolding
275                              -- Little point on imports without -O, because the
276                              -- dictionary itself won't be visible
277             -> Name          -- Name of one of the *value* selectors 
278                              -- (dictionary superclass or method)
279             -> Class -> Id
280 mkDictSelId dflags no_unf name clas
281   = mkGlobalId (ClassOpId clas) name sel_ty info
282   where
283     sel_ty = mkForAllTys tyvars (mkFunTy (idType dict_id) (idType the_arg_id))
284         -- We can't just say (exprType rhs), because that would give a type
285         --      C a -> C a
286         -- for a single-op class (after all, the selector is the identity)
287         -- But it's type must expose the representation of the dictionary
288         -- to get (say)         C a -> (a -> a)
289
290     base_info = noCafIdInfo
291                 `setArityInfo`         1
292                 `setStrictnessInfo`    strict_sig
293                 `setUnfoldingInfo`     (if no_unf then noUnfolding
294                                         else mkImplicitUnfolding dflags rhs)
295                    -- In module where class op is defined, we must add
296                    -- the unfolding, even though it'll never be inlined
297                    -- because we use that to generate a top-level binding
298                    -- for the ClassOp
299
300     info | new_tycon = base_info `setInlinePragInfo` alwaysInlinePragma
301                    -- See Note [Single-method classes] in TcInstDcls
302                    -- for why alwaysInlinePragma
303          | otherwise = base_info  `setSpecInfo`       mkSpecInfo [rule]
304                                   `setInlinePragInfo` neverInlinePragma
305                    -- Add a magic BuiltinRule, and never inline it
306                    -- so that the rule is always available to fire.
307                    -- See Note [ClassOp/DFun selection] in TcInstDcls
308
309     n_ty_args = length tyvars
310
311     -- This is the built-in rule that goes
312     --      op (dfT d1 d2) --->  opT d1 d2
313     rule = BuiltinRule { ru_name = fsLit "Class op " `appendFS` 
314                                      occNameFS (getOccName name)
315                        , ru_fn    = name
316                        , ru_nargs = n_ty_args + 1
317                        , ru_try   = dictSelRule val_index n_ty_args }
318
319         -- The strictness signature is of the form U(AAAVAAAA) -> T
320         -- where the V depends on which item we are selecting
321         -- It's worth giving one, so that absence info etc is generated
322         -- even if the selector isn't inlined
323
324     strict_sig = mkStrictSig (mkTopDmdType [arg_dmd] topRes)
325     arg_dmd | new_tycon = evalDmd
326             | otherwise = mkManyUsedDmd $
327                           mkProdDmd [ if the_arg_id == id then evalDmd else absDmd
328                                     | id <- arg_ids ]
329
330     tycon          = classTyCon clas
331     new_tycon      = isNewTyCon tycon
332     [data_con]     = tyConDataCons tycon
333     tyvars         = dataConUnivTyVars data_con
334     arg_tys        = dataConRepArgTys data_con  -- Includes the dictionary superclasses
335
336     -- 'index' is a 0-index into the *value* arguments of the dictionary
337     val_index      = assoc "MkId.mkDictSelId" sel_index_prs name
338     sel_index_prs  = map idName (classAllSelIds clas) `zip` [0..]
339
340     the_arg_id     = getNth arg_ids val_index
341     pred           = mkClassPred clas (mkTyVarTys tyvars)
342     dict_id        = mkTemplateLocal 1 pred
343     arg_ids        = mkTemplateLocalsNum 2 arg_tys
344
345     rhs = mkLams tyvars  (Lam dict_id   rhs_body)
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 = mkStrictSig (mkTopDmdType (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 cprProdRes 
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 = mkStrictSig (mkTopDmdType 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 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 = case topNormaliseType fam_envs ty of
716                       Just (_, ty) -> ty
717                       Nothing      -> ty
718     ok_ty tcs ty
719       | Just (tc, _) <- splitTyConApp_maybe ty
720       , let tc_name = getName tc
721       =  not (tc_name `elemNameSet` tcs)
722       && case tyConSingleAlgDataCon_maybe tc of
723             Just con | isVanillaDataCon con
724                     -> ok_con_args (tcs `addOneToNameSet` getName tc) con
725             _ -> True
726       | otherwise 
727       = True
728
729     ok_con_args tcs con
730        = all (ok_arg tcs) (dataConOrigArgTys con `zip` dataConStrictMarks con)
731          -- NB: dataConStrictMarks gives the *user* request; 
732          -- We'd get a black hole if we used dataConRepBangs
733
734     attempt_unpack (HsUnpack {})                 = True
735     attempt_unpack (HsUserBang (Just unpk) bang) = bang && unpk
736     attempt_unpack (HsUserBang Nothing bang)     = bang  -- Be conservative
737     attempt_unpack HsStrict                      = False
738     attempt_unpack HsNoBang                      = False
739 \end{code}
740
741 Note [Unpack one-wide fields]
742 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
743 The flag UnboxSmallStrictFields ensures that any field that can
744 (safely) be unboxed to a word-sized unboxed field, should be so unboxed.
745 For example:
746
747     data A = A Int#
748     newtype B = B A
749     data C = C !B
750     data D = D !C
751     data E = E !()
752     data F = F !D
753     data G = G !F !F
754
755 All of these should have an Int# as their representation, except
756 G which should have two Int#s.  
757
758 However 
759
760     data T = T !(S Int)
761     data S = S !a
762
763 Here we can represent T with an Int#.
764
765 Note [Recursive unboxing]
766 ~~~~~~~~~~~~~~~~~~~~~~~~~
767 Consider
768   data R = MkR {-# UNPACK #-} !S Int
769   data S = MkS {-# UNPACK #-} !Int
770 The representation arguments of MkR are the *representation* arguments
771 of S (plus Int); the rep args of MkS are Int#.  This is all fine.
772
773 But be careful not to try to unbox this!
774         data T = MkT {-# UNPACK #-} !T Int
775 Because then we'd get an infinite number of arguments.
776
777 Here is a more complicated case:
778         data S = MkS {-# UNPACK #-} !T Int
779         data T = MkT {-# UNPACK #-} !S Int
780 Each of S and T must decide independendently whether to unpack
781 and they had better not both say yes. So they must both say no.
782
783 Also behave conservatively when there is no UNPACK pragma
784         data T = MkS !T Int
785 with -funbox-strict-fields or -funbox-small-strict-fields
786 we need to behave as if there was an UNPACK pragma there.
787
788 But it's the *argument* type that matters. This is fine:
789         data S = MkS S !Int
790 because Int is non-recursive.
791
792
793 Note [Unpack equality predicates]
794 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
795 If we have a GADT with a contructor C :: (a~[b]) => b -> T a
796 we definitely want that equality predicate *unboxed* so that it
797 takes no space at all.  This is easily done: just give it
798 an UNPACK pragma. The rest of the unpack/repack code does the
799 heavy lifting.  This one line makes every GADT take a word less
800 space for each equality predicate, so it's pretty important!
801
802
803 \begin{code}
804 mk_pred_strict_mark :: PredType -> HsBang
805 mk_pred_strict_mark pred 
806   | isEqPred pred = HsUnpack Nothing    -- Note [Unpack equality predicates]
807   | otherwise     = HsNoBang
808 \end{code}
809
810 %************************************************************************
811 %*                                                                      *
812         Wrapping and unwrapping newtypes and type families
813 %*                                                                      *
814 %************************************************************************
815
816 \begin{code}
817 wrapNewTypeBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
818 -- The wrapper for the data constructor for a newtype looks like this:
819 --      newtype T a = MkT (a,Int)
820 --      MkT :: forall a. (a,Int) -> T a
821 --      MkT = /\a. \(x:(a,Int)). x `cast` sym (CoT a)
822 -- where CoT is the coercion TyCon assoicated with the newtype
823 --
824 -- The call (wrapNewTypeBody T [a] e) returns the
825 -- body of the wrapper, namely
826 --      e `cast` (CoT [a])
827 --
828 -- If a coercion constructor is provided in the newtype, then we use
829 -- it, otherwise the wrap/unwrap are both no-ops 
830 --
831 -- If the we are dealing with a newtype *instance*, we have a second coercion
832 -- identifying the family instance with the constructor of the newtype
833 -- instance.  This coercion is applied in any case (ie, composed with the
834 -- coercion constructor of the newtype or applied by itself).
835
836 wrapNewTypeBody tycon args result_expr
837   = ASSERT( isNewTyCon tycon )
838     wrapFamInstBody tycon args $
839     mkCast result_expr (mkSymCo co)
840   where
841     co = mkUnbranchedAxInstCo Representational (newTyConCo tycon) args
842
843 -- When unwrapping, we do *not* apply any family coercion, because this will
844 -- be done via a CoPat by the type checker.  We have to do it this way as
845 -- computing the right type arguments for the coercion requires more than just
846 -- a spliting operation (cf, TcPat.tcConPat).
847
848 unwrapNewTypeBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
849 unwrapNewTypeBody tycon args result_expr
850   = ASSERT( isNewTyCon tycon )
851     mkCast result_expr (mkUnbranchedAxInstCo Representational (newTyConCo tycon) args)
852
853 -- If the type constructor is a representation type of a data instance, wrap
854 -- the expression into a cast adjusting the expression type, which is an
855 -- instance of the representation type, to the corresponding instance of the
856 -- family instance type.
857 -- See Note [Wrappers for data instance tycons]
858 wrapFamInstBody :: TyCon -> [Type] -> CoreExpr -> CoreExpr
859 wrapFamInstBody tycon args body
860   | Just co_con <- tyConFamilyCoercion_maybe tycon
861   = mkCast body (mkSymCo (mkUnbranchedAxInstCo Representational co_con args))
862   | otherwise
863   = body
864
865 -- Same as `wrapFamInstBody`, but for type family instances, which are
866 -- represented by a `CoAxiom`, and not a `TyCon`
867 wrapTypeFamInstBody :: CoAxiom br -> Int -> [Type] -> CoreExpr -> CoreExpr
868 wrapTypeFamInstBody axiom ind args body
869   = mkCast body (mkSymCo (mkAxInstCo Representational axiom ind args))
870
871 wrapTypeUnbranchedFamInstBody :: CoAxiom Unbranched -> [Type] -> CoreExpr -> CoreExpr
872 wrapTypeUnbranchedFamInstBody axiom
873   = wrapTypeFamInstBody axiom 0
874
875 unwrapFamInstScrut :: TyCon -> [Type] -> CoreExpr -> CoreExpr
876 unwrapFamInstScrut tycon args scrut
877   | Just co_con <- tyConFamilyCoercion_maybe tycon
878   = mkCast scrut (mkUnbranchedAxInstCo Representational co_con args) -- data instances only
879   | otherwise
880   = scrut
881
882 unwrapTypeFamInstScrut :: CoAxiom br -> Int -> [Type] -> CoreExpr -> CoreExpr
883 unwrapTypeFamInstScrut axiom ind args scrut
884   = mkCast scrut (mkAxInstCo Representational axiom ind args)
885
886 unwrapTypeUnbranchedFamInstScrut :: CoAxiom Unbranched -> [Type] -> CoreExpr -> CoreExpr
887 unwrapTypeUnbranchedFamInstScrut axiom
888   = unwrapTypeFamInstScrut axiom 0
889 \end{code}
890
891
892 %************************************************************************
893 %*                                                                      *
894 \subsection{Primitive operations}
895 %*                                                                      *
896 %************************************************************************
897
898 \begin{code}
899 mkPrimOpId :: PrimOp -> Id
900 mkPrimOpId prim_op 
901   = id
902   where
903     (tyvars,arg_tys,res_ty, arity, strict_sig) = primOpSig prim_op
904     ty   = mkForAllTys tyvars (mkFunTys arg_tys res_ty)
905     name = mkWiredInName gHC_PRIM (primOpOcc prim_op) 
906                          (mkPrimOpIdUnique (primOpTag prim_op))
907                          (AnId id) UserSyntax
908     id   = mkGlobalId (PrimOpId prim_op) name ty info
909                 
910     info = noCafIdInfo
911            `setSpecInfo`          mkSpecInfo (maybeToList $ primOpRules name prim_op)
912            `setArityInfo`         arity
913            `setStrictnessInfo`    strict_sig
914            `setInlinePragInfo`    neverInlinePragma
915                -- We give PrimOps a NOINLINE pragma so that we don't
916                -- get silly warnings from Desugar.dsRule (the inline_shadows_rule 
917                -- test) about a RULE conflicting with a possible inlining
918                -- cf Trac #7287
919
920 -- For each ccall we manufacture a separate CCallOpId, giving it
921 -- a fresh unique, a type that is correct for this particular ccall,
922 -- and a CCall structure that gives the correct details about calling
923 -- convention etc.  
924 --
925 -- The *name* of this Id is a local name whose OccName gives the full
926 -- details of the ccall, type and all.  This means that the interface 
927 -- file reader can reconstruct a suitable Id
928
929 mkFCallId :: DynFlags -> Unique -> ForeignCall -> Type -> Id
930 mkFCallId dflags uniq fcall ty
931   = ASSERT( isEmptyVarSet (tyVarsOfType ty) )
932     -- A CCallOpId should have no free type variables; 
933     -- when doing substitutions won't substitute over it
934     mkGlobalId (FCallId fcall) name ty info
935   where
936     occ_str = showSDoc dflags (braces (ppr fcall <+> ppr ty))
937     -- The "occurrence name" of a ccall is the full info about the
938     -- ccall; it is encoded, but may have embedded spaces etc!
939
940     name = mkFCallName uniq occ_str
941
942     info = noCafIdInfo
943            `setArityInfo`         arity
944            `setStrictnessInfo`    strict_sig
945
946     (_, tau)        = tcSplitForAllTys ty
947     (arg_tys, _)    = tcSplitFunTys tau
948     arity           = length arg_tys
949     strict_sig      = mkStrictSig (mkTopDmdType (replicate arity evalDmd) topRes)
950 \end{code}
951
952
953 %************************************************************************
954 %*                                                                      *
955 \subsection{DictFuns and default methods}
956 %*                                                                      *
957 %************************************************************************
958
959 Important notes about dict funs and default methods
960 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
961 Dict funs and default methods are *not* ImplicitIds.  Their definition
962 involves user-written code, so we can't figure out their strictness etc
963 based on fixed info, as we can for constructors and record selectors (say).
964
965 We build them as LocalIds, but with External Names.  This ensures that
966 they are taken to account by free-variable finding and dependency
967 analysis (e.g. CoreFVs.exprFreeVars).
968
969 Why shouldn't they be bound as GlobalIds?  Because, in particular, if
970 they are globals, the specialiser floats dict uses above their defns,
971 which prevents good simplifications happening.  Also the strictness
972 analyser treats a occurrence of a GlobalId as imported and assumes it
973 contains strictness in its IdInfo, which isn't true if the thing is
974 bound in the same module as the occurrence.
975
976 It's OK for dfuns to be LocalIds, because we form the instance-env to
977 pass on to the next module (md_insts) in CoreTidy, afer tidying
978 and globalising the top-level Ids.
979
980 BUT make sure they are *exported* LocalIds (mkExportedLocalId) so 
981 that they aren't discarded by the occurrence analyser.
982
983 \begin{code}
984 mkDictFunId :: Name      -- Name to use for the dict fun;
985             -> [TyVar]
986             -> ThetaType
987             -> Class 
988             -> [Type]
989             -> Id
990 -- Implements the DFun Superclass Invariant (see TcInstDcls)
991
992 mkDictFunId dfun_name tvs theta clas tys
993   = mkExportedLocalVar (DFunId n_silent is_nt)
994                        dfun_name
995                        dfun_ty
996                        vanillaIdInfo
997   where
998     is_nt = isNewTyCon (classTyCon clas)
999     (n_silent, dfun_ty) = mkDictFunTy tvs theta clas tys
1000
1001 mkDictFunTy :: [TyVar] -> ThetaType -> Class -> [Type] -> (Int, Type)
1002 mkDictFunTy tvs theta clas tys
1003   = (length silent_theta, dfun_ty)
1004   where
1005     dfun_ty = mkSigmaTy tvs (silent_theta ++ theta) (mkClassPred clas tys)
1006     silent_theta 
1007       | null tvs, null theta 
1008       = []
1009       | otherwise
1010       = filterOut discard $
1011         substTheta (zipTopTvSubst (classTyVars clas) tys)
1012                    (classSCTheta clas)
1013                    -- See Note [Silent Superclass Arguments]
1014     discard pred = any (`eqPred` pred) theta
1015                  -- See the DFun Superclass Invariant in TcInstDcls
1016 \end{code}
1017
1018
1019 %************************************************************************
1020 %*                                                                      *
1021 \subsection{Un-definable}
1022 %*                                                                      *
1023 %************************************************************************
1024
1025 These Ids can't be defined in Haskell.  They could be defined in
1026 unfoldings in the wired-in GHC.Prim interface file, but we'd have to
1027 ensure that they were definitely, definitely inlined, because there is
1028 no curried identifier for them.  That's what mkCompulsoryUnfolding
1029 does.  If we had a way to get a compulsory unfolding from an interface
1030 file, we could do that, but we don't right now.
1031
1032 unsafeCoerce# isn't so much a PrimOp as a phantom identifier, that
1033 just gets expanded into a type coercion wherever it occurs.  Hence we
1034 add it as a built-in Id with an unfolding here.
1035
1036 The type variables we use here are "open" type variables: this means
1037 they can unify with both unlifted and lifted types.  Hence we provide
1038 another gun with which to shoot yourself in the foot.
1039
1040 \begin{code}
1041 lazyIdName, unsafeCoerceName, nullAddrName, seqName, realWorldName, coercionTokenName, magicSingIName, coerceName, proxyName :: 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 lazyIdName        = mkWiredInIdName gHC_MAGIC (fsLit "lazy")         lazyIdKey           lazyId
1047 coercionTokenName = mkWiredInIdName gHC_PRIM (fsLit "coercionToken#") coercionTokenIdKey coercionTokenId
1048 magicSingIName    = mkWiredInIdName gHC_PRIM (fsLit "magicSingI")    magicSingIKey magicSingIId
1049 coerceName        = mkWiredInIdName gHC_PRIM (fsLit "coerce")        coerceKey          coerceId
1050 proxyName         = mkWiredInIdName gHC_PRIM (fsLit "proxy#")        proxyHashKey       proxyHashId
1051 \end{code}
1052
1053 \begin{code}
1054
1055 ------------------------------------------------
1056 -- proxy# :: forall a. Proxy# a
1057 proxyHashId :: Id
1058 proxyHashId
1059   = pcMiscPrelId proxyName ty
1060        (noCafIdInfo `setUnfoldingInfo` evaldUnfolding) -- Note [evaldUnfoldings]
1061   where
1062     ty      = mkForAllTys [kv, tv] (mkProxyPrimTy k t)
1063     kv      = kKiVar
1064     k       = mkTyVarTy kv
1065     tv:_    = tyVarList k
1066     t       = mkTyVarTy tv
1067
1068 ------------------------------------------------
1069 -- unsafeCoerce# :: forall a b. a -> b
1070 unsafeCoerceId :: Id
1071 unsafeCoerceId
1072   = pcMiscPrelId unsafeCoerceName ty info
1073   where
1074     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1075                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1076            
1077
1078     ty  = mkForAllTys [openAlphaTyVar,openBetaTyVar]
1079                       (mkFunTy openAlphaTy openBetaTy)
1080     [x] = mkTemplateLocals [openAlphaTy]
1081     rhs = mkLams [openAlphaTyVar,openBetaTyVar,x] $
1082           Cast (Var x) (mkUnsafeCo openAlphaTy openBetaTy)
1083
1084 ------------------------------------------------
1085 nullAddrId :: Id
1086 -- nullAddr# :: Addr#
1087 -- The reason is is here is because we don't provide 
1088 -- a way to write this literal in Haskell.
1089 nullAddrId = pcMiscPrelId nullAddrName addrPrimTy info
1090   where
1091     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1092                        `setUnfoldingInfo`  mkCompulsoryUnfolding (Lit nullAddrLit)
1093
1094 ------------------------------------------------
1095 seqId :: Id     -- See Note [seqId magic]
1096 seqId = pcMiscPrelId seqName ty info
1097   where
1098     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1099                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1100                        `setSpecInfo`       mkSpecInfo [seq_cast_rule]
1101            
1102
1103     ty  = mkForAllTys [alphaTyVar,betaTyVar]
1104                       (mkFunTy alphaTy (mkFunTy betaTy betaTy))
1105               -- NB argBetaTyVar; see Note [seqId magic]
1106
1107     [x,y] = mkTemplateLocals [alphaTy, betaTy]
1108     rhs = mkLams [alphaTyVar,betaTyVar,x,y] (Case (Var x) x betaTy [(DEFAULT, [], Var y)])
1109
1110     -- See Note [Built-in RULES for seq]
1111     seq_cast_rule = BuiltinRule { ru_name  = fsLit "seq of cast"
1112                                 , ru_fn    = seqName
1113                                 , ru_nargs = 4
1114                                 , ru_try   = match_seq_of_cast
1115                                 }
1116
1117 match_seq_of_cast :: RuleFun
1118     -- See Note [Built-in RULES for seq]
1119 match_seq_of_cast _ _ _ [Type _, Type res_ty, Cast scrut co, expr]
1120   = Just (Var seqId `mkApps` [Type (pFst (coercionKind co)), Type res_ty,
1121                               scrut, expr])
1122 match_seq_of_cast _ _ _ _ = Nothing
1123
1124 ------------------------------------------------
1125 lazyId :: Id    -- See Note [lazyId magic]
1126 lazyId = pcMiscPrelId lazyIdName ty info
1127   where
1128     info = noCafIdInfo
1129     ty  = mkForAllTys [alphaTyVar] (mkFunTy alphaTy alphaTy)
1130
1131
1132 --------------------------------------------------------------------------------
1133 magicSingIId :: Id  -- See Note [magicSingIId magic]
1134 magicSingIId = pcMiscPrelId magicSingIName ty info
1135   where
1136   info = noCafIdInfo `setInlinePragInfo` neverInlinePragma
1137   ty   = mkForAllTys [alphaTyVar] alphaTy
1138
1139 --------------------------------------------------------------------------------
1140
1141 coerceId :: Id
1142 coerceId = pcMiscPrelId coerceName ty info
1143   where
1144     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1145                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1146     eqRTy = mkTyConApp coercibleTyCon [alphaTy, betaTy]
1147     eqRPrimTy = mkTyConApp eqReprPrimTyCon [liftedTypeKind, alphaTy, betaTy]
1148     ty   = mkForAllTys [alphaTyVar, betaTyVar] (mkFunTys [eqRTy, alphaTy] betaTy)
1149
1150     [eqR,x,eq] = mkTemplateLocals [eqRTy, alphaTy,eqRPrimTy]
1151     rhs = mkLams [alphaTyVar,betaTyVar,eqR,x] $
1152           mkWildCase (Var eqR) eqRTy betaTy $
1153           [(DataAlt coercibleDataCon, [eq], Cast (Var x) (CoVarCo eq))]
1154 \end{code}
1155
1156 Note [Unsafe coerce magic]
1157 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1158 We define a *primitive*
1159    GHC.Prim.unsafeCoerce#
1160 and then in the base library we define the ordinary function
1161    Unsafe.Coerce.unsafeCoerce :: forall (a:*) (b:*). a -> b
1162    unsafeCoerce x = unsafeCoerce# x
1163
1164 Notice that unsafeCoerce has a civilized (albeit still dangerous)
1165 polymorphic type, whose type args have kind *.  So you can't use it on
1166 unboxed values (unsafeCoerce 3#).
1167
1168 In contrast unsafeCoerce# is even more dangerous because you *can* use
1169 it on unboxed things, (unsafeCoerce# 3#) :: Int. Its type is
1170    forall (a:OpenKind) (b:OpenKind). a -> b
1171
1172 Note [seqId magic]
1173 ~~~~~~~~~~~~~~~~~~
1174 'GHC.Prim.seq' is special in several ways. 
1175
1176 a) Its second arg can have an unboxed type
1177       x `seq` (v +# w)
1178    Hence its second type variable has ArgKind
1179
1180 b) Its fixity is set in LoadIface.ghcPrimIface
1181
1182 c) It has quite a bit of desugaring magic. 
1183    See DsUtils.lhs Note [Desugaring seq (1)] and (2) and (3)
1184
1185 d) There is some special rule handing: Note [User-defined RULES for seq]
1186
1187 e) See Note [Typing rule for seq] in TcExpr.
1188
1189 Note [User-defined RULES for seq]
1190 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1191 Roman found situations where he had
1192       case (f n) of _ -> e
1193 where he knew that f (which was strict in n) would terminate if n did.
1194 Notice that the result of (f n) is discarded. So it makes sense to
1195 transform to
1196       case n of _ -> e
1197
1198 Rather than attempt some general analysis to support this, I've added
1199 enough support that you can do this using a rewrite rule:
1200
1201   RULE "f/seq" forall n.  seq (f n) e = seq n e
1202
1203 You write that rule.  When GHC sees a case expression that discards
1204 its result, it mentally transforms it to a call to 'seq' and looks for
1205 a RULE.  (This is done in Simplify.rebuildCase.)  As usual, the
1206 correctness of the rule is up to you.
1207
1208 To make this work, we need to be careful that the magical desugaring
1209 done in Note [seqId magic] item (c) is *not* done on the LHS of a rule.
1210 Or rather, we arrange to un-do it, in DsBinds.decomposeRuleLhs.
1211
1212 Note [Built-in RULES for seq]
1213 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1214 We also have the following built-in rule for seq
1215
1216   seq (x `cast` co) y = seq x y
1217
1218 This eliminates unnecessary casts and also allows other seq rules to
1219 match more often.  Notably,     
1220
1221    seq (f x `cast` co) y  -->  seq (f x) y
1222   
1223 and now a user-defined rule for seq (see Note [User-defined RULES for seq])
1224 may fire.
1225
1226
1227 Note [lazyId magic]
1228 ~~~~~~~~~~~~~~~~~~~
1229     lazy :: forall a?. a? -> a?   (i.e. works for unboxed types too)
1230
1231 Used to lazify pseq:   pseq a b = a `seq` lazy b
1232
1233 Also, no strictness: by being a built-in Id, all the info about lazyId comes from here,
1234 not from GHC.Base.hi.   This is important, because the strictness
1235 analyser will spot it as strict!
1236
1237 Also no unfolding in lazyId: it gets "inlined" by a HACK in CorePrep.
1238 It's very important to do this inlining *after* unfoldings are exposed 
1239 in the interface file.  Otherwise, the unfolding for (say) pseq in the
1240 interface file will not mention 'lazy', so if we inline 'pseq' we'll totally
1241 miss the very thing that 'lazy' was there for in the first place.
1242 See Trac #3259 for a real world example.
1243
1244 lazyId is defined in GHC.Base, so we don't *have* to inline it.  If it
1245 appears un-applied, we'll end up just calling it.
1246
1247
1248 Note [magicSingIId magic]
1249 ~~~~~~~~~~~~~~~~~~~~~~~~~
1250
1251 The identifier `magicSIngI` is just a place-holder, which is used to
1252 implement a primitve that we cannot define in Haskell but we can write
1253 in Core.  It is declared with a place-holder type:
1254
1255     magicSingI :: forall a. a
1256
1257 The intention is that the identifier will be used in a very specific way,
1258 namely we add the following to the library:
1259
1260     withSingI :: Sing n -> (SingI n => a) -> a
1261     withSingI x = magicSingI x ((\f -> f) :: () -> ())
1262
1263 The actual primitive is `withSingI`, and it uses its first argument
1264 (of type `Sing n`) as the evidece/dictionary in the second argument.
1265 This is done by adding a built-in rule to `prelude/PrelRules.hs`
1266 (see `match_magicSingI`), which works as follows:
1267
1268 magicSingI @ (Sing n -> (() -> ()) -> (SingI n -> a) -> a)
1269              x
1270              (\f -> _)
1271
1272 ---->
1273
1274 \(f :: (SingI n -> a) -> a) -> f (cast x (newtypeCo n))
1275
1276 The `newtypeCo` coercion is extracted from the `SingI` type constructor,
1277 which is available in the instantiation.  We are casting `Sing n` into `SingI n`,
1278 which is OK because `SingI` is a class with a single methid,
1279 and thus it is implemented as newtype.
1280
1281 The `(\f -> f)` parameter is there just so that we can avoid
1282 having to make up a new name for the lambda, it is completely
1283 changed by the rewrite.
1284
1285
1286 -------------------------------------------------------------
1287 @realWorld#@ used to be a magic literal, \tr{void#}.  If things get
1288 nasty as-is, change it back to a literal (@Literal@).
1289
1290 voidArgId is a Local Id used simply as an argument in functions
1291 where we just want an arg to avoid having a thunk of unlifted type.
1292 E.g.
1293         x = \ void :: State# RealWorld -> (# p, q #)
1294
1295 This comes up in strictness analysis
1296
1297 \begin{code}
1298 realWorldPrimId :: Id
1299 realWorldPrimId -- :: State# RealWorld
1300   = pcMiscPrelId realWorldName realWorldStatePrimTy
1301       (noCafIdInfo `setUnfoldingInfo` evaldUnfolding)  -- Note [evaldUnfoldings]
1302
1303 {- Note [evaldUnfoldings]
1304 ~~~~~~~~~~~~~~~~~~~~~~~~~
1305 The evaldUnfolding makes it look that some primitive value is
1306 evaluated, which in turn makes Simplify.interestingArg return True,
1307 which in turn makes INLINE things applied to said value likely to be
1308 inlined.
1309 -}
1310
1311 voidArgId :: Id
1312 voidArgId       -- :: State# RealWorld
1313   = mkSysLocal (fsLit "void") voidArgIdKey realWorldStatePrimTy
1314
1315 coercionTokenId :: Id         -- :: () ~ ()
1316 coercionTokenId -- Used to replace Coercion terms when we go to STG
1317   = pcMiscPrelId coercionTokenName 
1318                  (mkTyConApp eqPrimTyCon [liftedTypeKind, unitTy, unitTy])
1319                  noCafIdInfo
1320 \end{code}
1321
1322
1323 \begin{code}
1324 pcMiscPrelId :: Name -> Type -> IdInfo -> Id
1325 pcMiscPrelId name ty info
1326   = mkVanillaGlobalWithInfo name ty info
1327     -- We lie and say the thing is imported; otherwise, we get into
1328     -- a mess with dependency analysis; e.g., core2stg may heave in
1329     -- random calls to GHCbase.unpackPS__.  If GHCbase is the module
1330     -- being compiled, then it's just a matter of luck if the definition
1331     -- will be in "the right place" to be in scope.
1332 \end{code}