
On Tuesday 05 August 2003 4:00 pm, Simon Peyton-Jones wrote:
| > id# :: (a :: # ) -> a | > id# x = x
That should really be rejected. You couldn't call it because you'd have to instantiate 'a' to Int# or Double#, and that would mean different code for different calls.
GHC (after modifying the parser to allow # to stand for the kind of unlifted type) seems to behave very nicely with this definition - it does not generate any code for it, and inlines its uses; so the problem never actually arises (but I expect it would for more complex code). I guess I shouldn't rely on that, anyhow.
One clue: take a look at the UArray library.
http://www.haskell.org/ghc/docs/latest/html/base/Data.Array.Unboxed.html
UArray is parameterised by Int, Float, Double, but it describes arrays that hold Int#, Float#, Double# respectively. Maybe you could re-use ideas from there?
Interesting! It seems that just writing wrappers around my new primitive operations, that do boxing and unboxing as appropriate, works out just fine - GHC does all the expected unboxing. So it is not worth trying to work with boxed values directly. Great, thanks! :-) -- Sebastien