Unlifted data types
Dan Doel
dan.doel at gmail.com
Fri Sep 4 21:48:49 UTC 2015
On Fri, Sep 4, 2015 at 5:23 PM, Edward Z. Yang <ezyang at mit.edu> wrote:
> But this kind of special handling is a bit bothersome. Consider:
>
> data SPair a b = SPair (!a, !b)
>
> The constructor has what type? Probably
>
> SPair :: (Force a, Force b) -> SPair a
>
> and not:
>
> SPair :: (a, b) -> SPair a
I don't really understand what this example is showing. I don't think
SPair is a legal
declaration in any scenario.
- In current Haskell it's illegal; you can only put ! directly on fields
- If !a :: Unlifted, then (,) (!a) is a kind error (same with Force a)
> I don't think it interacts any differently than with unpacked/unboxed
> products today.
I meant like:
If T :: Unlifted, then am I allowed to do:
data U = MkU {-# UNPACK #-} T ...
and what are its semantics? If T is a sum, presumably it's related to
the unpacked
sums proposal from a couple days ago. Does stuff from this proposal
make that proposal
simpler? Should they reference things in one another?
Will there be optimizations that turn:
data E a b :: Unlifted where
L :: a -> E a b
R :: b -> E a b
into |# a , b #| (or whatever the agreed upon syntax is)? Presumably yes.
-- Dan
More information about the ghc-devs
mailing list