I’m only guessing, but I think that the reason why “return value allocation is definitely not pure
” is that it depends on where heap memory is available, and this is is a global state.
Example:
f() = []
f() === f() # returns false
The function f
is not pure, since calling it with the same (empty) set of immutable arguments does not return the same result.