Unpacking sum types
Richard Eisenberg
eir at cis.upenn.edu
Tue Sep 8 12:05:26 UTC 2015
I just added two design notes to the wiki page:
1. If we're stealing syntax, we're stealing quite a few operators. Things like (#|), and (|#) in terms, along with the otherwise-quite-reasonable (x ||). We're also stealing things like (||) and (#||#|) in types. The fact that we're stealing (||) at the type level is quite unfortunate, to me. I won't fight against a growing tide on this issue, but I favor not changing the lexer here and requiring lots of spaces.
2. A previous email in this thread mentioned a (0 of 2 | ...) syntax for data constructors. This might be better than forcing writers and readers to count vertical bars. (Of course, we already require counting commas.)
Glad to see this coming together!
Richard
On Sep 8, 2015, at 7:48 AM, Simon Peyton Jones <simonpj at microsoft.com> wrote:
> | I see, but then you can't have multiple fields, like
> |
> | ( (# Int,Bool #) |)
> |
> | You'd have to box the inner tuple too. Ok, I suppose.
>
> Well of course! It's just a parameterised data type, like a tuple. But, just like unboxed tuples, you could have an unboxed tuple (or sum) inside an unboxed tuple.
>
> (# (# Int,Bool #) | Int #)
>
> Simon
>
> | -----Original Message-----
> | From: Simon Marlow [mailto:marlowsd at gmail.com]
> | Sent: 08 September 2015 09:55
> | To: Simon Peyton Jones; Johan Tibell; Ryan Newton
> | Cc: ghc-devs at haskell.org
> | Subject: Re: Unpacking sum types
> |
> | On 08/09/2015 09:31, Simon Peyton Jones wrote:
> | > | How did you envisage implementing anonymous boxed sums? What is
> | > | their heap representation?
> | >
> | > *Exactly* like tuples; that is, we have a family of data type
> | declarations:
> | >
> | > data (a|b) = (_|) a
> | > | (|_) b
> | >
> | > data (a|b|c) = (_||) a
> | > | (|_|) b
> | > | (||_) c
> | > ..etc.
> |
> | I see, but then you can't have multiple fields, like
> |
> | ( (# Int,Bool #) |)
> |
> | You'd have to box the inner tuple too. Ok, I suppose.
> |
> | Cheers
> | Simon
> |
> |
> | > Simon
> | >
> | > |
> | > | One option is to use some kind of generic object with a dynamic
> | > | number of pointers and non-pointers, and one field for the tag.
> | > | The layout would need to be stored in the object. This isn't a
> | > | particularly efficient representation, though. Perhaps there
> | could
> | > | be a family of smaller specialised versions for common sizes.
> | > |
> | > | Do we have a use case for the boxed version, or is it just for
> | > | consistency?
> | > |
> | > | Cheers
> | > | Simon
> | > |
> | > |
> | > | > Looks good to me!
> | > | >
> | > | > Simon
> | > | >
> | > | > *From:*Johan Tibell [mailto:johan.tibell at gmail.com] > *Sent:*
> | 01
> | > | September 2015 18:24 > *To:* Simon Peyton Jones; Simon Marlow;
> | Ryan
> | > | Newton > *Cc:* ghc-devs at haskell.org > *Subject:* RFC: Unpacking
> | > | sum types > > I have a draft design for unpacking sum types that
> | > | I'd like some > feedback on. In particular feedback both on:
> | > | >
> | > | > * the writing and clarity of the proposal and
> | > | >
> | > | > * the proposal itself.
> | > | >
> | > | > https://ghc.haskell.org/trac/ghc/wiki/UnpackedSumTypes
> | > | >
> | > | > -- Johan
> | > | >
> | >
> _______________________________________________
> ghc-devs mailing list
> ghc-devs at haskell.org
> http://mail.haskell.org/cgi-bin/mailman/listinfo/ghc-devs
More information about the ghc-devs
mailing list