Unpacking sum types

Simon Marlow marlowsd at gmail.com
Tue Sep 8 08:54:48 UTC 2015


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
> |  >
>


More information about the ghc-devs mailing list