[Haskell-cafe] Higher order functions and strictness

Tom Ellis tom-lists-haskell-cafe-2013 at jaguarpaw.co.uk
Fri Dec 6 20:52:59 UTC 2013


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


More information about the Haskell-Cafe mailing list