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