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