<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jul 31, 2017 at 5:58 PM, Tom Ellis <span dir="ltr"><<a href="mailto:tom-lists-haskell-cafe-2013@jaguarpaw.co.uk" target="_blank">tom-lists-haskell-cafe-2013@jaguarpaw.co.uk</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">On Mon, Jul 31, 2017 at 11:44:20PM +0200, Nick Smallbone wrote:<br>
> Tom Ellis <<a href="mailto:tom-lists-haskell-cafe-2013@jaguarpaw.co.uk">tom-lists-haskell-cafe-2013@<wbr>jaguarpaw.co.uk</a>> writes:<br>
> > Thanks, that's helpful info, but what I'm really after is a definitive<br>
> > condition under which fields can be UNPACK'ed.  The docs are very vague:<br>
> ><br>
> >     <a href="https://downloads.haskell.org/~ghc/7.0.2/docs/html/users_guide/pragmas.html" rel="noreferrer" target="_blank">https://downloads.haskell.org/<wbr>~ghc/7.0.2/docs/html/users_<wbr>guide/pragmas.html</a><br>
><br>
> As far as I know, the restrictions for UNPACKing a field are as follows:<br>
<br>
</span>Ah, very nice, thanks Nick.</blockquote><div><br></div><div>I think this might be in the Commentary somewhere, as I've seen essentially that list. </div><div><br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><span class="">>    * The type must not be just a type variable<br>
>      (i.e., the constructor must be known at compile time)<br>
<br>
</span>Eventually I'd like to see if we can relax this condition but first ...<br>
<span class=""><br>
>    * The field's type must have only one constructor<br>
<br>
</span>Do you know the rationale for this?  It seems like there should be no<br>
problem unpacking a constructor tag plus payload, even if the payload size<br>
varies, as long as the maximum payload size in known.</blockquote></div><div class="gmail_extra"><br></div>UNPACK means unbox, and the constructor tag is part of the box. I suspect something (gc?) assumes that a constructor tag is always the first thing in a memory chunk, so having a constructor tag unpacked into the middle of something else causes problems (e.g. it will try to gc the middle of the containing memory object).<br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature"><div dir="ltr"><div>brandon s allbery kf8nh                               sine nomine associates</div><div><a href="mailto:allbery.b@gmail.com" target="_blank">allbery.b@gmail.com</a>                                  <a href="mailto:ballbery@sinenomine.net" target="_blank">ballbery@sinenomine.net</a></div><div>unix, openafs, kerberos, infrastructure, xmonad        <a href="http://sinenomine.net" target="_blank">http://sinenomine.net</a></div></div></div>
</div></div>