
On Fri, Dec 06, 2013 at 05:51:03PM +0000, Joachim Breitner wrote:
But since I had been looking at some unboxed tuples recently, I noticed that the singleton unboxed tuple allows for exactly that: Call a function in a way that it has control (i.e. can force stuff), but do not necessarily evaluate its result, and all that without extra allocations.
This is a very, very neat observation! It seems that the unboxed singleton allows fine grained control over order of evaluation without imposing any datastructure overhead. I am (very slowly) working on an alternative type-system for GHC which will make it look like a strict language with explicit thunk datatype (although it will still be good old GHC under the hood). Your observation will be helpful for performance.
Of course (#..#) has it downsides, e.g. you cannot make a newtype for it (newtype Box a = (# x #)) does not work...
This is a shame, although it seems like in principle it may be possible https://ghc.haskell.org/trac/ghc/ticket/1311 Still if SPJ's 'brain is too small to figure out all the ramifications of dropping the "newtypes are always boxed" assumption' then I don't hold out much hope that /anyone/ will be able to do anything about this restriction :) Tom