Replace (State# RealWorld) with Void# where we just want a 0-bit value
[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         voidPrimId, voidArgId,
38         nullAddrId, seqId, lazyId, lazyIdKey,
39         coercionTokenId, magicDictId, coerceId,
40
41         -- Re-export error Ids
42         module PrelRules
43     ) where
44
45 #include "HsVersions.h"
46
47 import Rules
48 import TysPrim
49 import TysWiredIn
50 import PrelRules
51 import Type
52 import FamInstEnv
53 import Coercion
54 import TcType
55 import MkCore
56 import CoreUtils        ( exprType, mkCast )
57 import CoreUnfold
58 import Literal
59 import TyCon
60 import CoAxiom
61 import Class
62 import NameSet
63 import VarSet
64 import Name
65 import PrimOp
66 import ForeignCall
67 import DataCon
68 import Id
69 import Var              ( mkExportedLocalVar )
70 import IdInfo
71 import Demand
72 import CoreSyn
73 import Unique
74 import UniqSupply
75 import PrelNames
76 import BasicTypes       hiding ( SuccessFlag(..) )
77 import Util
78 import Pair
79 import DynFlags
80 import Outputable
81 import FastString
82 import ListSetOps
83
84 import Data.Maybe       ( maybeToList )
85 \end{code}
86
87 %************************************************************************
88 %*                                                                      *
89 \subsection{Wired in Ids}
90 %*                                                                      *
91 %************************************************************************
92
93 Note [Wired-in Ids]
94 ~~~~~~~~~~~~~~~~~~~
95 There are several reasons why an Id might appear in the wiredInIds:
96
97 (1) The ghcPrimIds are wired in because they can't be defined in
98     Haskell at all, although the can be defined in Core.  They have
99     compulsory unfoldings, so they are always inlined and they  have
100     no definition site.  Their home module is GHC.Prim, so they
101     also have a description in primops.txt.pp, where they are called
102     'pseudoops'.
103
104 (2) The 'error' function, eRROR_ID, is wired in because we don't yet have
105     a way to express in an interface file that the result type variable
106     is 'open'; that is can be unified with an unboxed type
107
108     [The interface file format now carry such information, but there's
109     no way yet of expressing at the definition site for these 
110     error-reporting functions that they have an 'open' 
111     result type. -- sof 1/99]
112
113 (3) Other error functions (rUNTIME_ERROR_ID) are wired in (a) because
114     the desugarer generates code that mentiones them directly, and
115     (b) for the same reason as eRROR_ID
116
117 (4) lazyId is wired in because the wired-in version overrides the
118     strictness of the version defined in GHC.Base
119
120 In cases (2-4), the function has a definition in a library module, and
121 can be called; but the wired-in version means that the details are 
122 never read from that module's interface file; instead, the full definition
123 is right here.
124
125 \begin{code}
126 wiredInIds :: [Id]
127 wiredInIds
128   =  [lazyId]
129   ++ errorIds           -- Defined in MkCore
130   ++ ghcPrimIds
131
132 -- These Ids are exported from GHC.Prim
133 ghcPrimIds :: [Id]
134 ghcPrimIds
135   = [   -- These can't be defined in Haskell, but they have
136         -- perfectly reasonable unfoldings in Core
137     realWorldPrimId,
138     voidPrimId,
139     unsafeCoerceId,
140     nullAddrId,
141     seqId,
142     magicDictId,
143     coerceId,
144     proxyHashId
145     ]
146 \end{code}
147
148 %************************************************************************
149 %*                                                                      *
150 \subsection{Data constructors}
151 %*                                                                      *
152 %************************************************************************
153
154 The wrapper for a constructor is an ordinary top-level binding that evaluates
155 any strict args, unboxes any args that are going to be flattened, and calls
156 the worker.
157
158 We're going to build a constructor that looks like:
159
160         data (Data a, C b) =>  T a b = T1 !a !Int b
161
162         T1 = /\ a b -> 
163              \d1::Data a, d2::C b ->
164              \p q r -> case p of { p ->
165                        case q of { q ->
166                        Con T1 [a,b] [p,q,r]}}
167
168 Notice that
169
170 * d2 is thrown away --- a context in a data decl is used to make sure
171   one *could* construct dictionaries at the site the constructor
172   is used, but the dictionary isn't actually used.
173
174 * We have to check that we can construct Data dictionaries for
175   the types a and Int.  Once we've done that we can throw d1 away too.
176
177 * We use (case p of q -> ...) to evaluate p, rather than "seq" because
178   all that matters is that the arguments are evaluated.  "seq" is 
179   very careful to preserve evaluation order, which we don't need
180   to be here.
181
182   You might think that we could simply give constructors some strictness
183   info, like PrimOps, and let CoreToStg do the let-to-case transformation.
184   But we don't do that because in the case of primops and functions strictness
185   is a *property* not a *requirement*.  In the case of constructors we need to
186   do something active to evaluate the argument.
187
188   Making an explicit case expression allows the simplifier to eliminate
189   it in the (common) case where the constructor arg is already evaluated.
190
191 Note [Wrappers for data instance tycons]
192 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
193 In the case of data instances, the wrapper also applies the coercion turning
194 the representation type into the family instance type to cast the result of
195 the wrapper.  For example, consider the declarations
196
197   data family Map k :: * -> *
198   data instance Map (a, b) v = MapPair (Map a (Pair b v))
199
200 The tycon to which the datacon MapPair belongs gets a unique internal
201 name of the form :R123Map, and we call it the representation tycon.
202 In contrast, Map is the family tycon (accessible via
203 tyConFamInst_maybe). A coercion allows you to move between
204 representation and family type.  It is accessible from :R123Map via
205 tyConFamilyCoercion_maybe and has kind
206
207   Co123Map a b v :: {Map (a, b) v ~ :R123Map a b v}
208
209 The wrapper and worker of MapPair get the types
210
211         -- Wrapper
212   $WMapPair :: forall a b v. Map a (Map a b v) -> Map (a, b) v
213   $WMapPair a b v = MapPair a b v `cast` sym (Co123Map a b v)
214
215         -- Worker
216   MapPair :: forall a b v. Map a (Map a b v) -> :R123Map a b v
217
218 This coercion is conditionally applied by wrapFamInstBody.
219
220 It's a bit more complicated if the data instance is a GADT as well!
221
222    data instance T [a] where
223         T1 :: forall b. b -> T [Maybe b]
224
225 Hence we translate to
226
227         -- Wrapper
228   $WT1 :: forall b. b -> T [Maybe b]
229   $WT1 b v = T1 (Maybe b) b (Maybe b) v
230                         `cast` sym (Co7T (Maybe b))
231
232         -- Worker
233   T1 :: forall c b. (c ~ Maybe b) => b -> :R7T c
234
235         -- Coercion from family type to representation type
236   Co7T a :: T [a] ~ :R7T a
237
238 Note [Newtype datacons]
239 ~~~~~~~~~~~~~~~~~~~~~~~
240 The "data constructor" for a newtype should always be vanilla.  At one
241 point this wasn't true, because the newtype arising from
242      class C a => D a
243 looked like
244        newtype T:D a = D:D (C a)
245 so the data constructor for T:C had a single argument, namely the
246 predicate (C a).  But now we treat that as an ordinary argument, not
247 part of the theta-type, so all is well.
248
249
250 %************************************************************************
251 %*                                                                      *
252 \subsection{Dictionary selectors}
253 %*                                                                      *
254 %************************************************************************
255
256 Selecting a field for a dictionary.  If there is just one field, then
257 there's nothing to do.  
258
259 Dictionary selectors may get nested forall-types.  Thus:
260
261         class Foo a where
262           op :: forall b. Ord b => a -> b -> b
263
264 Then the top-level type for op is
265
266         op :: forall a. Foo a => 
267               forall b. Ord b => 
268               a -> b -> b
269
270 This is unlike ordinary record selectors, which have all the for-alls
271 at the outside.  When dealing with classes it's very convenient to
272 recover the original type signature from the class op selector.
273
274 \begin{code}
275 mkDictSelId :: DynFlags
276             -> Bool          -- True <=> don't include the unfolding
277                              -- Little point on imports without -O, because the
278                              -- dictionary itself won't be visible
279             -> Name          -- Name of one of the *value* selectors 
280                              -- (dictionary superclass or method)
281             -> Class -> Id
282 mkDictSelId dflags no_unf name clas
283   = mkGlobalId (ClassOpId clas) name sel_ty info
284   where
285     sel_ty = mkForAllTys tyvars (mkFunTy (idType dict_id) (idType the_arg_id))
286         -- We can't just say (exprType rhs), because that would give a type
287         --      C a -> C a
288         -- for a single-op class (after all, the selector is the identity)
289         -- But it's type must expose the representation of the dictionary
290         -- to get (say)         C a -> (a -> a)
291
292     base_info = noCafIdInfo
293                 `setArityInfo`         1
294                 `setStrictnessInfo`    strict_sig
295                 `setUnfoldingInfo`     (if no_unf then noUnfolding
296                                         else mkImplicitUnfolding dflags rhs)
297                    -- In module where class op is defined, we must add
298                    -- the unfolding, even though it'll never be inlined
299                    -- because we use that to generate a top-level binding
300                    -- for the ClassOp
301
302     info | new_tycon = base_info `setInlinePragInfo` alwaysInlinePragma
303                    -- See Note [Single-method classes] in TcInstDcls
304                    -- for why alwaysInlinePragma
305          | otherwise = base_info  `setSpecInfo`       mkSpecInfo [rule]
306                                   `setInlinePragInfo` neverInlinePragma
307                    -- Add a magic BuiltinRule, and never inline it
308                    -- so that the rule is always available to fire.
309                    -- See Note [ClassOp/DFun selection] in TcInstDcls
310
311     n_ty_args = length tyvars
312
313     -- This is the built-in rule that goes
314     --      op (dfT d1 d2) --->  opT d1 d2
315     rule = BuiltinRule { ru_name = fsLit "Class op " `appendFS` 
316                                      occNameFS (getOccName name)
317                        , ru_fn    = name
318                        , ru_nargs = n_ty_args + 1
319                        , ru_try   = dictSelRule val_index n_ty_args }
320
321         -- The strictness signature is of the form U(AAAVAAAA) -> T
322         -- where the V depends on which item we are selecting
323         -- It's worth giving one, so that absence info etc is generated
324         -- even if the selector isn't inlined
325
326     strict_sig = mkStrictSig (mkTopDmdType [arg_dmd] topRes)
327     arg_dmd | new_tycon = evalDmd
328             | otherwise = mkManyUsedDmd $
329                           mkProdDmd [ if the_arg_id == id then evalDmd else absDmd
330                                     | id <- arg_ids ]
331
332     tycon          = classTyCon clas
333     new_tycon      = isNewTyCon tycon
334     [data_con]     = tyConDataCons tycon
335     tyvars         = dataConUnivTyVars data_con
336     arg_tys        = dataConRepArgTys data_con  -- Includes the dictionary superclasses
337
338     -- 'index' is a 0-index into the *value* arguments of the dictionary
339     val_index      = assoc "MkId.mkDictSelId" sel_index_prs name
340     sel_index_prs  = map idName (classAllSelIds clas) `zip` [0..]
341
342     the_arg_id     = getNth arg_ids val_index
343     pred           = mkClassPred clas (mkTyVarTys tyvars)
344     dict_id        = mkTemplateLocal 1 pred
345     arg_ids        = mkTemplateLocalsNum 2 arg_tys
346
347     rhs = mkLams tyvars  (Lam dict_id   rhs_body)
348     rhs_body | new_tycon = unwrapNewTypeBody tycon (map mkTyVarTy tyvars) (Var dict_id)
349              | otherwise = Case (Var dict_id) dict_id (idType the_arg_id)
350                                 [(DataAlt data_con, arg_ids, varToCoreExpr the_arg_id)]
351                                 -- varToCoreExpr needed for equality superclass selectors
352                                 --   sel a b d = case x of { MkC _ (g:a~b) _ -> CO g }
353
354 dictSelRule :: Int -> Arity -> RuleFun
355 -- Tries to persuade the argument to look like a constructor
356 -- application, using exprIsConApp_maybe, and then selects
357 -- from it
358 --       sel_i t1..tk (D t1..tk op1 ... opm) = opi
359 --
360 dictSelRule val_index n_ty_args _ id_unf _ args
361   | (dict_arg : _) <- drop n_ty_args args
362   , Just (_, _, con_args) <- exprIsConApp_maybe id_unf dict_arg
363   = Just (getNth con_args val_index)
364   | otherwise
365   = Nothing
366 \end{code}
367
368
369 %************************************************************************
370 %*                                                                      *
371         Boxing and unboxing
372 %*                                                                      *
373 %************************************************************************
374
375
376 \begin{code}
377 mkDataConWorkId :: Name -> DataCon -> Id
378 mkDataConWorkId wkr_name data_con
379   | isNewTyCon tycon
380   = mkGlobalId (DataConWrapId data_con) wkr_name nt_wrap_ty nt_work_info
381   | otherwise
382   = mkGlobalId (DataConWorkId data_con) wkr_name alg_wkr_ty wkr_info
383
384   where
385     tycon = dataConTyCon data_con
386
387         ----------- Workers for data types --------------
388     alg_wkr_ty = dataConRepType data_con
389     wkr_arity = dataConRepArity data_con
390     wkr_info  = noCafIdInfo
391                 `setArityInfo`       wkr_arity
392                 `setStrictnessInfo`  wkr_sig
393                 `setUnfoldingInfo`   evaldUnfolding  -- Record that it's evaluated,
394                                                      -- even if arity = 0
395
396     wkr_sig = mkStrictSig (mkTopDmdType (replicate wkr_arity topDmd) (dataConCPR data_con))
397         --      Note [Data-con worker strictness]
398         -- Notice that we do *not* say the worker is strict
399         -- even if the data constructor is declared strict
400         --      e.g.    data T = MkT !(Int,Int)
401         -- Why?  Because the *wrapper* is strict (and its unfolding has case
402         -- expresssions that do the evals) but the *worker* itself is not.
403         -- If we pretend it is strict then when we see
404         --      case x of y -> $wMkT y
405         -- the simplifier thinks that y is "sure to be evaluated" (because
406         --  $wMkT is strict) and drops the case.  No, $wMkT is not strict.
407         --
408         -- When the simplifer sees a pattern 
409         --      case e of MkT x -> ...
410         -- it uses the dataConRepStrictness of MkT to mark x as evaluated;
411         -- but that's fine... dataConRepStrictness comes from the data con
412         -- not from the worker Id.
413
414         ----------- Workers for newtypes --------------
415     (nt_tvs, _, nt_arg_tys, _) = dataConSig data_con
416     res_ty_args  = mkTyVarTys nt_tvs
417     nt_wrap_ty   = dataConUserType data_con
418     nt_work_info = noCafIdInfo          -- The NoCaf-ness is set by noCafIdInfo
419                   `setArityInfo` 1      -- Arity 1
420                   `setInlinePragInfo`    alwaysInlinePragma
421                   `setUnfoldingInfo`     newtype_unf
422     id_arg1      = mkTemplateLocal 1 (head nt_arg_tys)
423     newtype_unf  = ASSERT2( isVanillaDataCon data_con &&
424                             isSingleton nt_arg_tys, ppr data_con  )
425                               -- Note [Newtype datacons]
426                    mkCompulsoryUnfolding $ 
427                    mkLams nt_tvs $ Lam id_arg1 $ 
428                    wrapNewTypeBody tycon res_ty_args (Var id_arg1)
429
430 dataConCPR :: DataCon -> DmdResult
431 dataConCPR con
432   | isDataTyCon tycon     -- Real data types only; that is, 
433                           -- not unboxed tuples or newtypes
434   , isVanillaDataCon con  -- No existentials 
435   , wkr_arity > 0
436   , wkr_arity <= mAX_CPR_SIZE
437   = if is_prod then cprProdRes 
438                else cprSumRes (dataConTag con)
439   | otherwise
440   = topRes
441   where
442     is_prod = isProductTyCon tycon
443     tycon = dataConTyCon con
444     wkr_arity = dataConRepArity con
445
446     mAX_CPR_SIZE :: Arity
447     mAX_CPR_SIZE = 10
448     -- We do not treat very big tuples as CPR-ish:
449     --      a) for a start we get into trouble because there aren't 
450     --         "enough" unboxed tuple types (a tiresome restriction, 
451     --         but hard to fix), 
452     --      b) more importantly, big unboxed tuples get returned mainly
453     --         on the stack, and are often then allocated in the heap
454     --         by the caller.  So doing CPR for them may in fact make
455     --         things worse.
456 \end{code}
457
458 -------------------------------------------------
459 --         Data constructor representation
460 -- 
461 -- This is where we decide how to wrap/unwrap the 
462 -- constructor fields
463 --
464 --------------------------------------------------
465
466
467 \begin{code}
468 type Unboxer = Var -> UniqSM ([Var], CoreExpr -> CoreExpr)
469   -- Unbox: bind rep vars by decomposing src var
470
471 data Boxer = UnitBox | Boxer (TvSubst -> UniqSM ([Var], CoreExpr))
472   -- Box:   build src arg using these rep vars
473
474 newtype DataConBoxer = DCB ([Type] -> [Var] -> UniqSM ([Var], [CoreBind]))
475                        -- Bind these src-level vars, returning the
476                        -- rep-level vars to bind in the pattern
477
478 mkDataConRep :: DynFlags -> FamInstEnvs -> Name -> DataCon -> UniqSM DataConRep
479 mkDataConRep dflags fam_envs wrap_name data_con
480   | not wrapper_reqd
481   = return NoDataConRep
482
483   | otherwise
484   = do { wrap_args <- mapM newLocal wrap_arg_tys
485        ; wrap_body <- mk_rep_app (wrap_args `zip` dropList eq_spec unboxers) 
486                                  initial_wrap_app
487
488        ; let wrap_id = mkGlobalId (DataConWrapId data_con) wrap_name wrap_ty wrap_info
489              wrap_info = noCafIdInfo
490                          `setArityInfo`         wrap_arity
491                              -- It's important to specify the arity, so that partial
492                              -- applications are treated as values
493                          `setInlinePragInfo`    alwaysInlinePragma
494                          `setUnfoldingInfo`     wrap_unf
495                          `setStrictnessInfo`    wrap_sig
496                              -- We need to get the CAF info right here because TidyPgm
497                              -- does not tidy the IdInfo of implicit bindings (like the wrapper)
498                              -- so it not make sure that the CAF info is sane
499
500              wrap_sig = mkStrictSig (mkTopDmdType wrap_arg_dmds (dataConCPR data_con))
501              wrap_arg_dmds = map mk_dmd (dropList eq_spec wrap_bangs)
502              mk_dmd str | isBanged str = evalDmd
503                         | otherwise    = topDmd
504                  -- The Cpr info can be important inside INLINE rhss, where the
505                  -- wrapper constructor isn't inlined.
506                  -- And the argument strictness can be important too; we
507                  -- may not inline a contructor when it is partially applied.
508                  -- For example:
509                  --      data W = C !Int !Int !Int
510                  --      ...(let w = C x in ...(w p q)...)...
511                  -- we want to see that w is strict in its two arguments
512
513              wrap_unf = mkInlineUnfolding (Just wrap_arity) wrap_rhs
514              wrap_tvs = (univ_tvs `minusList` map fst eq_spec) ++ ex_tvs
515              wrap_rhs = mkLams wrap_tvs $ 
516                         mkLams wrap_args $
517                         wrapFamInstBody tycon res_ty_args $
518                         wrap_body
519
520        ; return (DCR { dcr_wrap_id = wrap_id
521                      , dcr_boxer   = mk_boxer boxers
522                      , dcr_arg_tys = rep_tys
523                      , dcr_stricts = rep_strs
524                      , dcr_bangs   = dropList ev_tys wrap_bangs }) }
525
526   where
527     (univ_tvs, ex_tvs, eq_spec, theta, orig_arg_tys, _) = dataConFullSig data_con
528     res_ty_args  = substTyVars (mkTopTvSubst eq_spec) univ_tvs
529     tycon        = dataConTyCon data_con       -- The representation TyCon (not family)
530     wrap_ty      = dataConUserType data_con
531     ev_tys       = eqSpecPreds eq_spec ++ theta
532     all_arg_tys  = ev_tys                         ++ orig_arg_tys
533     orig_bangs   = map mk_pred_strict_mark ev_tys ++ dataConStrictMarks data_con
534
535     wrap_arg_tys = theta ++ orig_arg_tys
536     wrap_arity   = length wrap_arg_tys
537              -- The wrap_args are the arguments *other than* the eq_spec
538              -- Because we are going to apply the eq_spec args manually in the
539              -- wrapper
540
541     (wrap_bangs, rep_tys_w_strs, wrappers)
542        = unzip3 (zipWith (dataConArgRep dflags fam_envs) all_arg_tys orig_bangs)
543     (unboxers, boxers) = unzip wrappers
544     (rep_tys, rep_strs) = unzip (concat rep_tys_w_strs)
545
546     wrapper_reqd = not (isNewTyCon tycon)  -- Newtypes have only a worker
547                 && (any isBanged orig_bangs   -- Some forcing/unboxing
548                                               -- (includes eq_spec)
549                     || isFamInstTyCon tycon)  -- Cast result
550
551     initial_wrap_app = Var (dataConWorkId data_con)
552                       `mkTyApps`  res_ty_args
553                       `mkVarApps` ex_tvs                 
554                       `mkCoApps`  map (mkReflCo Nominal . snd) eq_spec
555                         -- Dont box the eq_spec coercions since they are
556                         -- marked as HsUnpack by mk_dict_strict_mark
557
558     mk_boxer :: [Boxer] -> DataConBoxer
559     mk_boxer boxers = DCB (\ ty_args src_vars -> 
560                       do { let ex_vars = takeList ex_tvs src_vars
561                                subst1 = mkTopTvSubst (univ_tvs `zip` ty_args)
562                                subst2 = extendTvSubstList subst1 ex_tvs 
563                                                           (mkTyVarTys ex_vars)
564                          ; (rep_ids, binds) <- go subst2 boxers (dropList ex_tvs src_vars)
565                          ; return (ex_vars ++ rep_ids, binds) } )
566
567     go _ [] src_vars = ASSERT2( null src_vars, ppr data_con ) return ([], [])
568     go subst (UnitBox : boxers) (src_var : src_vars)
569       = do { (rep_ids2, binds) <- go subst boxers src_vars
570            ; return (src_var : rep_ids2, binds) }
571     go subst (Boxer boxer : boxers) (src_var : src_vars)
572       = do { (rep_ids1, arg)  <- boxer subst
573            ; (rep_ids2, binds) <- go subst boxers src_vars
574            ; return (rep_ids1 ++ rep_ids2, NonRec src_var arg : binds) }
575     go _ (_:_) [] = pprPanic "mk_boxer" (ppr data_con)
576
577     mk_rep_app :: [(Id,Unboxer)] -> CoreExpr -> UniqSM CoreExpr
578     mk_rep_app [] con_app 
579       = return con_app
580     mk_rep_app ((wrap_arg, unboxer) : prs) con_app 
581       = do { (rep_ids, unbox_fn) <- unboxer wrap_arg
582            ; expr <- mk_rep_app prs (mkVarApps con_app rep_ids)
583            ; return (unbox_fn expr) }
584
585 -------------------------
586 newLocal :: Type -> UniqSM Var
587 newLocal ty = do { uniq <- getUniqueUs 
588                  ; return (mkSysLocal (fsLit "dt") uniq ty) }
589
590 -------------------------
591 dataConArgRep
592    :: DynFlags 
593    -> FamInstEnvs
594    -> Type -> HsBang
595    -> ( HsBang   -- Like input but with HsUnpackFailed if necy
596       , [(Type, StrictnessMark)]   -- Rep types
597       , (Unboxer, Boxer) )
598
599 dataConArgRep _ _ arg_ty HsNoBang
600   = (HsNoBang, [(arg_ty, NotMarkedStrict)], (unitUnboxer, unitBoxer))
601
602 dataConArgRep _ _ arg_ty (HsUserBang _ False)  -- No '!'
603   = (HsNoBang, [(arg_ty, NotMarkedStrict)], (unitUnboxer, unitBoxer))
604
605 dataConArgRep dflags fam_envs arg_ty 
606     (HsUserBang unpk_prag True)  -- {-# UNPACK #-} !
607   | not (gopt Opt_OmitInterfacePragmas dflags) -- Don't unpack if -fomit-iface-pragmas
608           -- Don't unpack if we aren't optimising; rather arbitrarily, 
609           -- we use -fomit-iface-pragmas as the indication
610   , let mb_co   = topNormaliseType_maybe fam_envs arg_ty
611                      -- Unwrap type families and newtypes
612         arg_ty' = case mb_co of { Just (_,ty) -> ty; Nothing -> arg_ty }
613   , isUnpackableType fam_envs arg_ty'
614   , (rep_tys, wrappers) <- dataConArgUnpack arg_ty'
615   , case unpk_prag of
616       Nothing -> gopt Opt_UnboxStrictFields dflags
617               || (gopt Opt_UnboxSmallStrictFields dflags 
618                    && length rep_tys <= 1)  -- See Note [Unpack one-wide fields]
619       Just unpack_me -> unpack_me
620   = case mb_co of
621       Nothing          -> (HsUnpack Nothing,   rep_tys, wrappers)
622       Just (co,rep_ty) -> (HsUnpack (Just co), rep_tys, wrapCo co rep_ty wrappers)
623
624   | otherwise  -- Record the strict-but-no-unpack decision
625   = strict_but_not_unpacked arg_ty
626
627 dataConArgRep _ _ arg_ty HsStrict
628   = strict_but_not_unpacked arg_ty
629
630 dataConArgRep _ _ arg_ty (HsUnpack Nothing)
631   | (rep_tys, wrappers) <- dataConArgUnpack arg_ty
632   = (HsUnpack Nothing, rep_tys, wrappers)
633
634 dataConArgRep _ _ _ (HsUnpack (Just co))
635   | let co_rep_ty = pSnd (coercionKind co)
636   , (rep_tys, wrappers) <- dataConArgUnpack co_rep_ty
637   = (HsUnpack (Just co), rep_tys, wrapCo co co_rep_ty wrappers)
638
639 strict_but_not_unpacked :: Type -> (HsBang, [(Type,StrictnessMark)], (Unboxer, Boxer))
640 strict_but_not_unpacked arg_ty
641   = (HsStrict, [(arg_ty, MarkedStrict)], (seqUnboxer, unitBoxer))
642
643 -------------------------
644 wrapCo :: Coercion -> Type -> (Unboxer, Boxer) -> (Unboxer, Boxer)
645 wrapCo co rep_ty (unbox_rep, box_rep)  -- co :: arg_ty ~ rep_ty
646   = (unboxer, boxer)
647   where
648     unboxer arg_id = do { rep_id <- newLocal rep_ty
649                         ; (rep_ids, rep_fn) <- unbox_rep rep_id
650                         ; let co_bind = NonRec rep_id (Var arg_id `Cast` co)
651                         ; return (rep_ids, Let co_bind . rep_fn) }
652     boxer = Boxer $ \ subst -> 
653             do { (rep_ids, rep_expr) 
654                     <- case box_rep of
655                          UnitBox -> do { rep_id <- newLocal (TcType.substTy subst rep_ty)
656                                        ; return ([rep_id], Var rep_id) }
657                          Boxer boxer -> boxer subst
658                ; let sco = substCo (tvCvSubst subst) co
659                ; return (rep_ids, rep_expr `Cast` mkSymCo sco) }
660
661 ------------------------
662 seqUnboxer :: Unboxer
663 seqUnboxer v = return ([v], \e -> Case (Var v) v (exprType e) [(DEFAULT, [], e)])
664
665 unitUnboxer :: Unboxer
666 unitUnboxer v = return ([v], \e -> e)
667
668 unitBoxer :: Boxer
669 unitBoxer = UnitBox
670
671 -------------------------
672 dataConArgUnpack
673    :: Type
674    ->  ( [(Type, StrictnessMark)]   -- Rep types
675        , (Unboxer, Boxer) )
676
677 dataConArgUnpack arg_ty
678   | Just (tc, tc_args) <- splitTyConApp_maybe arg_ty
679   , Just con <- tyConSingleAlgDataCon_maybe tc
680       -- NB: check for an *algebraic* data type
681       -- A recursive newtype might mean that 
682       -- 'arg_ty' is a newtype
683   , let rep_tys = dataConInstArgTys con tc_args
684   = ASSERT( isVanillaDataCon con )
685     ( rep_tys `zip` dataConRepStrictness con
686     ,( \ arg_id ->
687        do { rep_ids <- mapM newLocal rep_tys
688           ; let unbox_fn body
689                   = Case (Var arg_id) arg_id (exprType body)
690                          [(DataAlt con, rep_ids, body)]
691           ; return (rep_ids, unbox_fn) }
692      , Boxer $ \ subst ->
693        do { rep_ids <- mapM (newLocal . TcType.substTy subst) rep_tys
694           ; return (rep_ids, Var (dataConWorkId con)
695                              `mkTyApps` (substTys subst tc_args)
696                              `mkVarApps` rep_ids ) } ) )
697   | otherwise
698   = pprPanic "dataConArgUnpack" (ppr arg_ty)
699     -- An interface file specified Unpacked, but we couldn't unpack it
700
701 isUnpackableType :: FamInstEnvs -> Type -> Bool
702 -- True if we can unpack the UNPACK the argument type 
703 -- See Note [Recursive unboxing]
704 -- We look "deeply" inside rather than relying on the DataCons
705 -- we encounter on the way, because otherwise we might well
706 -- end up relying on ourselves!
707 isUnpackableType fam_envs ty
708   | Just (tc, _) <- splitTyConApp_maybe ty
709   , Just con <- tyConSingleAlgDataCon_maybe tc
710   , isVanillaDataCon con
711   = ok_con_args (unitNameSet (getName tc)) con
712   | otherwise
713   = False
714   where
715     ok_arg tcs (ty, bang) = not (attempt_unpack bang) || ok_ty tcs norm_ty
716         where
717           norm_ty = topNormaliseType fam_envs 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,
1042    realWorldName, voidPrimIdName, coercionTokenName,
1043    magicDictName, coerceName, proxyName :: Name
1044 unsafeCoerceName  = mkWiredInIdName gHC_PRIM (fsLit "unsafeCoerce#") unsafeCoerceIdKey  unsafeCoerceId
1045 nullAddrName      = mkWiredInIdName gHC_PRIM (fsLit "nullAddr#")     nullAddrIdKey      nullAddrId
1046 seqName           = mkWiredInIdName gHC_PRIM (fsLit "seq")           seqIdKey           seqId
1047 realWorldName     = mkWiredInIdName gHC_PRIM (fsLit "realWorld#")    realWorldPrimIdKey realWorldPrimId
1048 voidPrimIdName    = mkWiredInIdName gHC_PRIM (fsLit "void#")         voidPrimIdKey      voidPrimId
1049 lazyIdName        = mkWiredInIdName gHC_MAGIC (fsLit "lazy")         lazyIdKey           lazyId
1050 coercionTokenName = mkWiredInIdName gHC_PRIM (fsLit "coercionToken#") coercionTokenIdKey coercionTokenId
1051 magicDictName     = mkWiredInIdName gHC_PRIM (fsLit "magicDict")     magicDictKey magicDictId
1052 coerceName        = mkWiredInIdName gHC_PRIM (fsLit "coerce")        coerceKey          coerceId
1053 proxyName         = mkWiredInIdName gHC_PRIM (fsLit "proxy#")        proxyHashKey       proxyHashId
1054 \end{code}
1055
1056 \begin{code}
1057
1058 ------------------------------------------------
1059 -- proxy# :: forall a. Proxy# a
1060 proxyHashId :: Id
1061 proxyHashId
1062   = pcMiscPrelId proxyName ty
1063        (noCafIdInfo `setUnfoldingInfo` evaldUnfolding) -- Note [evaldUnfoldings]
1064   where
1065     ty      = mkForAllTys [kv, tv] (mkProxyPrimTy k t)
1066     kv      = kKiVar
1067     k       = mkTyVarTy kv
1068     tv:_    = tyVarList k
1069     t       = mkTyVarTy tv
1070
1071 ------------------------------------------------
1072 -- unsafeCoerce# :: forall a b. a -> b
1073 unsafeCoerceId :: Id
1074 unsafeCoerceId
1075   = pcMiscPrelId unsafeCoerceName ty info
1076   where
1077     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1078                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1079            
1080
1081     ty  = mkForAllTys [openAlphaTyVar,openBetaTyVar]
1082                       (mkFunTy openAlphaTy openBetaTy)
1083     [x] = mkTemplateLocals [openAlphaTy]
1084     rhs = mkLams [openAlphaTyVar,openBetaTyVar,x] $
1085           Cast (Var x) (mkUnsafeCo openAlphaTy openBetaTy)
1086
1087 ------------------------------------------------
1088 nullAddrId :: Id
1089 -- nullAddr# :: Addr#
1090 -- The reason is is here is because we don't provide 
1091 -- a way to write this literal in Haskell.
1092 nullAddrId = pcMiscPrelId nullAddrName addrPrimTy info
1093   where
1094     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1095                        `setUnfoldingInfo`  mkCompulsoryUnfolding (Lit nullAddrLit)
1096
1097 ------------------------------------------------
1098 seqId :: Id     -- See Note [seqId magic]
1099 seqId = pcMiscPrelId seqName ty info
1100   where
1101     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1102                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1103                        `setSpecInfo`       mkSpecInfo [seq_cast_rule]
1104            
1105
1106     ty  = mkForAllTys [alphaTyVar,betaTyVar]
1107                       (mkFunTy alphaTy (mkFunTy betaTy betaTy))
1108               -- NB argBetaTyVar; see Note [seqId magic]
1109
1110     [x,y] = mkTemplateLocals [alphaTy, betaTy]
1111     rhs = mkLams [alphaTyVar,betaTyVar,x,y] (Case (Var x) x betaTy [(DEFAULT, [], Var y)])
1112
1113     -- See Note [Built-in RULES for seq]
1114     seq_cast_rule = BuiltinRule { ru_name  = fsLit "seq of cast"
1115                                 , ru_fn    = seqName
1116                                 , ru_nargs = 4
1117                                 , ru_try   = match_seq_of_cast
1118                                 }
1119
1120 match_seq_of_cast :: RuleFun
1121     -- See Note [Built-in RULES for seq]
1122 match_seq_of_cast _ _ _ [Type _, Type res_ty, Cast scrut co, expr]
1123   = Just (Var seqId `mkApps` [Type (pFst (coercionKind co)), Type res_ty,
1124                               scrut, expr])
1125 match_seq_of_cast _ _ _ _ = Nothing
1126
1127 ------------------------------------------------
1128 lazyId :: Id    -- See Note [lazyId magic]
1129 lazyId = pcMiscPrelId lazyIdName ty info
1130   where
1131     info = noCafIdInfo
1132     ty  = mkForAllTys [alphaTyVar] (mkFunTy alphaTy alphaTy)
1133
1134
1135 --------------------------------------------------------------------------------
1136 magicDictId :: Id  -- See Note [magicDictId magic]
1137 magicDictId = pcMiscPrelId magicDictName ty info
1138   where
1139   info = noCafIdInfo `setInlinePragInfo` neverInlinePragma
1140   ty   = mkForAllTys [alphaTyVar] alphaTy
1141
1142 --------------------------------------------------------------------------------
1143
1144 coerceId :: Id
1145 coerceId = pcMiscPrelId coerceName ty info
1146   where
1147     info = noCafIdInfo `setInlinePragInfo` alwaysInlinePragma
1148                        `setUnfoldingInfo`  mkCompulsoryUnfolding rhs
1149     kv = kKiVar
1150     k = mkTyVarTy kv
1151     a:b:_ = tyVarList k
1152     [aTy,bTy] = map mkTyVarTy [a,b]
1153     eqRTy     = mkTyConApp coercibleTyCon  [k, aTy, bTy]
1154     eqRPrimTy = mkTyConApp eqReprPrimTyCon [k, aTy, bTy]
1155     ty   = mkForAllTys [kv, a, b] (mkFunTys [eqRTy, aTy] bTy)
1156
1157     [eqR,x,eq] = mkTemplateLocals [eqRTy, aTy,eqRPrimTy]
1158     rhs = mkLams [kv,a,b,eqR,x] $
1159           mkWildCase (Var eqR) eqRTy bTy $
1160           [(DataAlt coercibleDataCon, [eq], Cast (Var x) (CoVarCo eq))]
1161 \end{code}
1162
1163 Note [Unsafe coerce magic]
1164 ~~~~~~~~~~~~~~~~~~~~~~~~~~
1165 We define a *primitive*
1166    GHC.Prim.unsafeCoerce#
1167 and then in the base library we define the ordinary function
1168    Unsafe.Coerce.unsafeCoerce :: forall (a:*) (b:*). a -> b
1169    unsafeCoerce x = unsafeCoerce# x
1170
1171 Notice that unsafeCoerce has a civilized (albeit still dangerous)
1172 polymorphic type, whose type args have kind *.  So you can't use it on
1173 unboxed values (unsafeCoerce 3#).
1174
1175 In contrast unsafeCoerce# is even more dangerous because you *can* use
1176 it on unboxed things, (unsafeCoerce# 3#) :: Int. Its type is
1177    forall (a:OpenKind) (b:OpenKind). a -> b
1178
1179 Note [seqId magic]
1180 ~~~~~~~~~~~~~~~~~~
1181 'GHC.Prim.seq' is special in several ways. 
1182
1183 a) Its second arg can have an unboxed type
1184       x `seq` (v +# w)
1185    Hence its second type variable has ArgKind
1186
1187 b) Its fixity is set in LoadIface.ghcPrimIface
1188
1189 c) It has quite a bit of desugaring magic. 
1190    See DsUtils.lhs Note [Desugaring seq (1)] and (2) and (3)
1191
1192 d) There is some special rule handing: Note [User-defined RULES for seq]
1193
1194 e) See Note [Typing rule for seq] in TcExpr.
1195
1196 Note [User-defined RULES for seq]
1197 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1198 Roman found situations where he had
1199       case (f n) of _ -> e
1200 where he knew that f (which was strict in n) would terminate if n did.
1201 Notice that the result of (f n) is discarded. So it makes sense to
1202 transform to
1203       case n of _ -> e
1204
1205 Rather than attempt some general analysis to support this, I've added
1206 enough support that you can do this using a rewrite rule:
1207
1208   RULE "f/seq" forall n.  seq (f n) e = seq n e
1209
1210 You write that rule.  When GHC sees a case expression that discards
1211 its result, it mentally transforms it to a call to 'seq' and looks for
1212 a RULE.  (This is done in Simplify.rebuildCase.)  As usual, the
1213 correctness of the rule is up to you.
1214
1215 To make this work, we need to be careful that the magical desugaring
1216 done in Note [seqId magic] item (c) is *not* done on the LHS of a rule.
1217 Or rather, we arrange to un-do it, in DsBinds.decomposeRuleLhs.
1218
1219 Note [Built-in RULES for seq]
1220 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~
1221 We also have the following built-in rule for seq
1222
1223   seq (x `cast` co) y = seq x y
1224
1225 This eliminates unnecessary casts and also allows other seq rules to
1226 match more often.  Notably,     
1227
1228    seq (f x `cast` co) y  -->  seq (f x) y
1229   
1230 and now a user-defined rule for seq (see Note [User-defined RULES for seq])
1231 may fire.
1232
1233
1234 Note [lazyId magic]
1235 ~~~~~~~~~~~~~~~~~~~
1236     lazy :: forall a?. a? -> a?   (i.e. works for unboxed types too)
1237
1238 Used to lazify pseq:   pseq a b = a `seq` lazy b
1239
1240 Also, no strictness: by being a built-in Id, all the info about lazyId comes from here,
1241 not from GHC.Base.hi.   This is important, because the strictness
1242 analyser will spot it as strict!
1243
1244 Also no unfolding in lazyId: it gets "inlined" by a HACK in CorePrep.
1245 It's very important to do this inlining *after* unfoldings are exposed 
1246 in the interface file.  Otherwise, the unfolding for (say) pseq in the
1247 interface file will not mention 'lazy', so if we inline 'pseq' we'll totally
1248 miss the very thing that 'lazy' was there for in the first place.
1249 See Trac #3259 for a real world example.
1250
1251 lazyId is defined in GHC.Base, so we don't *have* to inline it.  If it
1252 appears un-applied, we'll end up just calling it.
1253
1254
1255 Note [magicDictId magic]
1256 ~~~~~~~~~~~~~~~~~~~~~~~~~
1257
1258 The identifier `magicDict` is just a place-holder, which is used to
1259 implement a primitve that we cannot define in Haskell but we can write
1260 in Core.  It is declared with a place-holder type:
1261
1262     magicDict :: forall a. a
1263
1264 The intention is that the identifier will be used in a very specific way,
1265 to create dictionaries for classes with a single method.  Consider a class
1266 like this:
1267
1268    class C a where
1269      f :: T a
1270
1271 We are going to use `magicDict`, in conjunction with a built-in Prelude
1272 rule, to cast values of type `T a` into dictionaries for `C a`.  To do
1273 this, we define a function like this in the library:
1274
1275   data WrapC a b = WrapC (C a => Proxy a -> b)
1276
1277   withT :: (C a => Proxy a -> b)
1278         ->  T a -> Proxy a -> b
1279   withT f x y = magicDict (WrapC f) x y
1280
1281 The purpose of `WrapC` is to avoid having `f` instantiated.
1282 Also, it avoids impredicativity, because `magicDict`'s type
1283 cannot be instantiated with a forall.  The field of `WrapC` contains
1284 a `Proxy` parameter which is used to link the type of the constraint,
1285 `C a`, with the type of the `Wrap` value being made.
1286
1287 Next, we add a built-in Prelude rule (see prelude/PrelRules.hs),
1288 which will replace the RHS of this definition with the appropriate
1289 definition in Core.  The rewrite rule works as follows:
1290
1291 magicDict@t (wrap@a@b f) x y
1292 ---->
1293 f (x `cast` co a) y
1294
1295 The `co` coercion is the newtype-coercion extracted from the type-class.
1296 The type class is obtain by looking at the type of wrap.
1297
1298
1299
1300 -------------------------------------------------------------
1301 @realWorld#@ used to be a magic literal, \tr{void#}.  If things get
1302 nasty as-is, change it back to a literal (@Literal@).
1303
1304 voidArgId is a Local Id used simply as an argument in functions
1305 where we just want an arg to avoid having a thunk of unlifted type.
1306 E.g.
1307         x = \ void :: Void# -> (# p, q #)
1308
1309 This comes up in strictness analysis
1310
1311 Note [evaldUnfoldings]
1312 ~~~~~~~~~~~~~~~~~~~~~~
1313 The evaldUnfolding makes it look that some primitive value is
1314 evaluated, which in turn makes Simplify.interestingArg return True,
1315 which in turn makes INLINE things applied to said value likely to be
1316 inlined.
1317
1318
1319 \begin{code}
1320 realWorldPrimId :: Id   -- :: State# RealWorld
1321 realWorldPrimId = pcMiscPrelId realWorldName realWorldStatePrimTy
1322                      (noCafIdInfo `setUnfoldingInfo` evaldUnfolding)    -- Note [evaldUnfoldings]
1323
1324 voidPrimId :: Id     -- Global constant :: Void#
1325 voidPrimId  = pcMiscPrelId voidPrimIdName voidPrimTy
1326                 (noCafIdInfo `setUnfoldingInfo` evaldUnfolding)    -- Note [evaldUnfoldings]
1327
1328 voidArgId :: Id       -- Local lambda-bound :: Void#
1329 voidArgId = mkSysLocal (fsLit "void") voidArgIdKey voidPrimTy
1330
1331 coercionTokenId :: Id         -- :: () ~ ()
1332 coercionTokenId -- Used to replace Coercion terms when we go to STG
1333   = pcMiscPrelId coercionTokenName 
1334                  (mkTyConApp eqPrimTyCon [liftedTypeKind, unitTy, unitTy])
1335                  noCafIdInfo
1336 \end{code}
1337
1338
1339 \begin{code}
1340 pcMiscPrelId :: Name -> Type -> IdInfo -> Id
1341 pcMiscPrelId name ty info
1342   = mkVanillaGlobalWithInfo name ty info
1343     -- We lie and say the thing is imported; otherwise, we get into
1344     -- a mess with dependency analysis; e.g., core2stg may heave in
1345     -- random calls to GHCbase.unpackPS__.  If GHCbase is the module
1346     -- being compiled, then it's just a matter of luck if the definition
1347     -- will be in "the right place" to be in scope.
1348 \end{code}