RFC: Unpacking sum types

Dan Doel dan.doel at gmail.com
Tue Sep 1 18:31:14 UTC 2015

I wonder: are there issues with strict/unpacked fields in the sum
type, with regard to the 'fill in stuff' behavior?

For example:

    data C = C1 !Int | C2 ![Int]

    data D = D1 !Double {-# UNPACK #-} !C

Naively we might think:

    data D' = D1 !Double !Tag !Int ![Int]

But this is obviously not going to work at the
Haskell-implemented-level. Since we're at a lower level, we could just
not seq the things from the opposite constructor, but are there
problems that arise from that? Also of course the !Int will probably
also be unpacked, so such prim types need different handling (fill
with 0, I guess).


Also, I guess this is orthogonal, but having primitive, unboxed sums
(analogous to unboxed tuples) would be nice as well. Conceivably they
could be used as part of the specification of unpacked sums, since we
can apparently put unboxed tuples in data types now. I'm not certain
if they would cover all cases, though (like the strictness concerns

-- Dan

On Tue, Sep 1, 2015 at 1:23 PM, Johan Tibell <johan.tibell at gmail.com> wrote:
> 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