[Haskell-cafe] What can be UNPACK'ed?

Tom Ellis tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Mon Jul 31 21:58:45 UTC 2017


On Mon, Jul 31, 2017 at 11:44:20PM +0200, Nick Smallbone wrote:
> Tom Ellis <tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk> writes:
> > Thanks, that's helpful info, but what I'm really after is a definitive
> > condition under which fields can be UNPACK'ed.  The docs are very vague:
> >
> >     https://downloads.haskell.org/~ghc/7.0.2/docs/html/users_guide/pragmas.html
> 
> As far as I know, the restrictions for UNPACKing a field are as follows:

Ah, very nice, thanks Nick.

>    * The field must be strict
>      (this is because otherwise, UNPACKing changes the semantics of the
>      data type you are declaring by making it more strict)

That makes sense.

>    * The type must not be just a type variable
>      (i.e., the constructor must be known at compile time)

Eventually I'd like to see if we can relax this condition but first ...

>    * The field's type must have only one constructor

Do you know the rationale for this?  It seems like there should be no
problem unpacking a constructor tag plus payload, even if the payload size
varies, as long as the maximum payload size in known.

Tom


More information about the Haskell-Cafe mailing list