<div dir="ltr"><div>Thanks for everyone's answers.</div><div><br></div><div>The concept of "boxed" and "unboxed" types seems to be in the correct direction. I found some relevant sections in GHC's user guide: <a href="https://downloads.haskell.org/~ghc/8.8.3/docs/users_guide.pdf#page=269">https://downloads.haskell.org/~ghc/8.8.3/docs/users_guide.pdf#page=269</a> . It might be an interesting read.</div><div><br></div><div>Best,</div><div>Kram<br></div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Sat, Apr 4, 2020 at 6:37 AM Will Yager <<a href="mailto:will.yager@gmail.com">will.yager@gmail.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">As a slight refinement on the previous responses,<br>
<br>
* you do not need to worry about this at all, at least not in the direction you’re thinking. <br>
* you don’t need to use IORef or anything for efficiency - almost everything is passed by reference already (one benefit of immutable data)<br>
* GHC can automatically switch to pass-by-value when appropriate <br>
<br>
In fact, the tricky part is actually getting your program to *stop* passing by reference when there’s a performance gain associated with pass-by-value. <br>
<br>
My mental model of GHC’s rule for when to use pass-by-value is approximately <br>
<br>
* it won’t change the semantics of the problem<br>
* the value is small<br>
<br>
E.g. if we’re writing a very fast small loop that operates over Int64s, there’s no point passing by reference when a value is the same size as a pointer anyway, and we can avoid extraneous dereferences and heap allocations. <br>
<br>
The interesting part is “won’t change the semantics of the program”. That basically boils down to the fact that pass-by-value is strict, so often times all you need to do is tell GHC that a function is strict on some of its arguments and GHC can choose to make those arguments PBV. See BangPatterns.  <br>
<br>
Haskellers don’t normally use the terminology PBV and PBR, however, but rather “unboxed” and “boxed” (referring to the values themselves). <br>
<br>
Will<br>
<br>
<br>
> On Apr 4, 2020, at 12:55 AM, KS <<a href="mailto:kramosik@gmail.com" target="_blank">kramosik@gmail.com</a>> wrote:<br>
> <br>
> Should I worry about this at all?<br>
</blockquote></div>