[Haskell-cafe] Daunting heap profile when using (<>)

Tom Ellis tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Sat Nov 14 16:32:19 UTC 2015

On Sat, Nov 14, 2015 at 05:17:41PM +0100, martin wrote:
> with lots of trial and error I believe I finally put the exclamation marks
> in the right spots, but I still don't understand.

It's pretty reasonable not to understand!  Understanding exactly what's
going with strictness annotations can be very mind-bending.

> I had previously put the marks inside the tuples as in (!log1', !lgr1')
> but that didn't help.  Can someone explain the difference between (!log1',
> !lgr1') and !(log1', lgr1').  I thought the former enforces more
> strictness than the later, but I must be missing something.

Those two are completely independent.

let !(a, b) = ... forces the tuple constructor immedately, but not the

let (!a, !b) = ... doesn't force the tuple constructor, but *when it is
forced* a and b will be forced at the same time.

Neither is more or less strict than the other.


More information about the Haskell-Cafe mailing list