Unit unboxed tuples

Simon Marlow marlowsd at gmail.com
Tue Jan 10 11:01:47 CET 2012

On 09/01/2012 04:46, wren ng thornton wrote:
> On 12/23/11 8:34 AM, Simon Peyton-Jones wrote:
>> More uniform! If you the singleton-unboxed-tuple data constructor in
>> source code, as a function, you'd write (\x -> (# x #)). In a pattern,
>> or applied, you'd write (# x #).
> Shouldn't (# T #) be identical to T?

No, because (# T #) is unlifted, whereas T is lifted.  In operational 
terms, a function that returns (# T #) does not evaluate the T before 
returning it, but a function returning T does.  This is used in GHC for 
example to fetch a value from an array without evaluating it, for example:

   indexArray :: Array# e -> Int# -> (# e #)


> I know that a putative (T) would be different from T because it would
> introduce an additional bottom, but I don't think that would apply to
> the unboxed case. Or is there something in the semantics of unboxed
> tuples that I'm missing?

More information about the Glasgow-haskell-users mailing list