On 21/04/2010 09:45, Roman Leshchinskiy wrote:

After thinking about this for a while, I came up with two possible solutions. One is to 
provide a "pure" version of touch#:

   use# :: o ->  o' ->  o'

such that use# x y = y. This would change the code above to:

   I# (use# arr# (indexIntOffAddr# addr# i#))

I don't know how to implement this, though, because use# would have to be able 
to return arbitrary (unboxed) types and the code generator doesn't really seem 
to support this.
>
A perhaps simpler solution is to add a new set of primitives:

   indexIntOffAddrUsing# :: o ->  Addr# ->  Int# ->  Int#
   ...

These would take an additional argument which they'd touch and otherwise 
ignore. The code would then become:

   I# (indexIntOffAddrUsing# arr# addr# i#)

Seems like the way to go, I can't think of a better alternative.

Incidentally, the index*OffAddr# primitives don't seem to be used anywhere.

There are a handful of uses in libraries/base, mainly GHC.Base.

Cheers,
        Simon
_______________________________________________
Glasgow-haskell-users mailing list
Glasgow-haskell-users@haskell.org
http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
  • index*OffAddr Roman Leshchinskiy
    • Re: index*OffAddr Simon Marlow

Reply via email to