Unpacking sum types

Dan Doel dan.doel at gmail.com
Wed Sep 9 04:14:25 UTC 2015


I don't think any #-based operators are stolen at the term level,
because # is required at both ends.

`(#| x #)` is not a legal operator section (nor is `(#| x |#)`), and
(#|_#) is not an operator name. The boxed version only steals
operators because you can shove the entire thing to one side.

I might have missed something, though.

The type level steals type operators involving #, though.

On Tue, Sep 8, 2015 at 8:05 AM, Richard Eisenberg <eir at cis.upenn.edu> wrote:
> 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
>
> _______________________________________________
> 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