Unpacking single-field, single-strict-constructor GADTs and existentials
Simon Peyton Jones
simonpj at microsoft.com
Wed May 25 08:47:10 UTC 2016
Oh, that's helpful thank you. I have added comments!
SImon
| -----Original Message-----
| From: David Feuer [mailto:david.feuer at gmail.com]
| Sent: 25 May 2016 09:01
| To: Simon Peyton Jones <simonpj at microsoft.com>
| Cc: Carter Schonwald <carter.schonwald at gmail.com>; ghc-devs <ghc-
| devs at haskell.org>
| Subject: Re: Unpacking single-field, single-strict-constructor GADTs
| and existentials
|
| I've started a wiki page at
| https://ghc.haskell.org/trac/ghc/wiki/NewtypeOptimizationForGADTS
|
| On Wed, May 25, 2016 at 3:27 AM, Simon Peyton Jones
| <simonpj at microsoft.com> wrote:
| > I'm not following the details of this discussion. Would it be
| possible to write a compact summary, with the key examples, in the
| appropriate ticket?
| >
| > I think that https://ghc.haskell.org/trac/ghc/ticket/10016 is one
| such ticket, but I think there may be more than one issue at stake
| here. For example, #10016 can be done in a strongly typed way in
| Core; but #1965 cannot (so far as I know).
| >
| > It could also help to have a wiki page to summarise the cluster of
| issues, pointing to the appropriate tickets for individual cases.
| >
| > An articulate summary will make it much more likely that progress is
| made! Thanks.
| >
| > Simon
| >
| > | -----Original Message-----
| > | From: ghc-devs [mailto:ghc-devs-bounces at haskell.org] On Behalf Of
| > | David Feuer
| > | Sent: 24 May 2016 23:14
| > | To: Carter Schonwald <carter.schonwald at gmail.com>
| > | Cc: ghc-devs <ghc-devs at haskell.org>
| > | Subject: Re: Unpacking single-field, single-strict-constructor
| GADTs
| > | and existentials
| > |
| > | Unboxing, per se, is not required; only newtype optimization. I
| > | believe Ed would probably have mentioned something when I
| discussed
| > | the issue with him if he'd already had an idea for hacking around
| it.
| > | Instead, he said he wanted the feature too.
| > |
| > | On Tue, May 24, 2016 at 6:03 PM, Carter Schonwald
| > | <carter.schonwald at gmail.com> wrote:
| > | > Phrased differently: there's a subclass of existential data
| types
| > | > which
| > | have
| > | > a well behaved unboxed memory layout?
| > | >
| > | > @ David : have you tried simulating this in userland using eds
| > | > structs / structures lib?
| > | >
| > | > On Tuesday, May 24, 2016, David Feuer <david.feuer at gmail.com>
| wrote:
| > | >>
| > | >> I should mention that while this does not require UNPACKing sum
| > | >> types (or any of the difficult trade-offs that involves), it
| lets
| > | >> programmers accomplish such unpacking by hand under
| sufficiently
| > | >> general conditions to be quite useful in practice. As long as
| the
| > | >> set of types involved is
| > | closed,
| > | >> it'll do.
| > | >>
| > | >> David Feuer <david.feuer at gmail.com> writes:
| > | >>
| > | >> > Given
| > | >> >
| > | >> > data Big a = B1 !(Small1 a) | B2 !(Small2 a) | B3 !(Small3
| a),
| > | >> > where the Small types are (possibly recursive) sums, it's
| > | >> > generally possible to express that as something like
| > | >> >
| > | >> > data Selector = One | Two | Three data Big a = forall (x ::
| > | >> > Selector) .
| > | >> > Big !(BigG x a)
| > | >> > data BigG x a where
| > | >> > GB1a :: some -> fields -> BigG 'One a
| > | >> > GB1b :: fields -> BigG 'One a
| > | >> > GB2a :: whatever -> BigG 'Two a
| > | >> > GB3a :: yeah -> BigG 'Three a
| > | >> >
| > | >> > Making one big GADT from all the constructors of the "small"
| > | >> > types, and then wrapping it up in an existential. That's what
| I
| > | >> > meant about "unpacking". But for efficiency purposes, that
| > | >> > wrapper needs the newtype optimization.
| > | >>
| > | >> Yes, but you'd need to unbox a sum in this case, no? I think
| this
| > | >> is the first issue that you need to solve before you can talk
| > | >> about dealing with the polymorphism issue (although hopefully
| > | >> Ömer will make progress on this for 8.2).
| > | >>
| > | >> Cheers,
| > | >>
| > | >> - Ben
| > | _______________________________________________
| > | ghc-devs mailing list
| > | ghc-devs at haskell.org
| > |
| https://na01.safelinks.protection.outlook.com/?url=http%3a%2f%2fmail.h
| askell.
| > | org%2fcgi-bin%2fmailman%2flistinfo%2fghc-
| > |
| devs&data=01%7c01%7csimonpj%40064d.mgd.microsoft.com%7ce98f7b01dbeb4
| > | 7cc8d3908
| > |
| d38420b38b%7c72f988bf86f141af91ab2d7cd011db47%7c1&sdata=gFnWAB1of%2f
| > | p%2b0IXkD
| > | CgcBbyxHkS7%2b4BusMl%2fs0rUySM%3d
More information about the ghc-devs
mailing list