newtype workers
Simon Peyton Jones
simonpj at microsoft.com
Tue May 28 14:55:01 UTC 2019
| I'm working on unlifted newtypes.
|
| In MkId.mkDataConWorkId, I see
|
| > mkDataConWorkId wkr_name data_con
| > | isNewTyCon tycon
| > = mkGlobalId (DataConWrapId data_con) wkr_name wkr_ty nt_work_info
| > | otherwise
| > = mkGlobalId (DataConWorkId data_con) wkr_name wkr_ty alg_wkr_info
|
| Why is a newtype worker called a wrapper (DataConWrapId)? Note that some
| newtype constructors have separate wrappers (which is relatively new).
| This doesn't appear to be hurting anything right now, but it's odd, and
| there's no commentary on this.
That is indeed odd, I agree.
Some points
* Newtypes can have wrappers: see Note [Data con wrappers and GADT syntax]
in MkId.hs
* The "worker" for a newtype data constructor is just a function
with a compulsory unfolding, of form (\x. x |> co), where co
is the newtype coercion.
* I agree that it's not right to describe the "worker" for a newtype
data constructor as a "DataConWrapId"; after all, it may have
a wrapper too (see previous bullet).
* Bu not is it rigt to call it a regular DataConWorkId. Those are
*data* constructors, head normal forms, very very special.
The kosher thing would be to create a NewtypeWorkId. But that's seems a terrible fiddle, because these things are inlined compulsorily so they never exist for long.
Maybe it should just be a vanilla Id. While there are a few places where
we do test for data-con-wrap-ids -- eg in isImplicitId -- but remember that these things are inlined so aggressively that we will only see them very briefly.
Or leave it as-is, with the above commentary as a Note -- that might be the easiest thing! Might you make a little patch?
Simon
| -----Original Message-----
| From: Richard Eisenberg <rae at cs.brynmawr.edu>
| Sent: 25 May 2019 11:50
| To: Simon Peyton Jones <simonpj at microsoft.com>
| Subject: newtype workers
|
| Hi Simon,
|
| I'm working on unlifted newtypes.
|
| In MkId.mkDataConWorkId, I see
|
| > mkDataConWorkId wkr_name data_con
| > | isNewTyCon tycon
| > = mkGlobalId (DataConWrapId data_con) wkr_name wkr_ty nt_work_info
| > | otherwise
| > = mkGlobalId (DataConWorkId data_con) wkr_name wkr_ty alg_wkr_info
|
| Why is a newtype worker called a wrapper (DataConWrapId)? Note that some
| newtype constructors have separate wrappers (which is relatively new).
| This doesn't appear to be hurting anything right now, but it's odd, and
| there's no commentary on this.
|
| Thanks,
| Richard
More information about the ghc-devs
mailing list