RE: #ifdef considered harmful (was: DData)

Hmm, wouldn't it be nice to have a "FastInt" library which re-bound the appropriate types and functions? Haskell libraries are chock-a-block with instances of "#ifdef __GHC__" which define things in terms of Int# instead of Int. We could simplify all those libraries if we did it just once, in one place.
The problem, of course, is that the naive non-GHC user could write a library which used "FastInt" polymorphically, and write code that wasn't portable to GHC. I don't think there's an easy, magic solution there. Perhaps such a library would be named FastIntWhichIPromiseToTestWithGHC.
Most of the time it's unnecessary to use an explicit Int#. If your Int is in a data structure, you can use {-# UNPACK #-} !Int which is portable, and compiles to an unboxed Int in GHC >= 6.2. However, depending on how you use the Int, GHC might need to insert reboxing code; e.g. if you store the Int in a list. The only reason to use an explicit Int# would be if you really wanted to be sure that no boxing was ever happening. The above trick is used in several places in the libraries currently: GHC's IO libraries and Data.HashTable are two good examples. Cheers, Simon

"Simon Marlow"
Most of the time it's unnecessary to use an explicit Int#. If your Int is in a data structure, you can use
{-# UNPACK #-} !Int
which is portable, and compiles to an unboxed Int in GHC >= 6.2.
Is this different from !Int and -funbox-strict ? (I.e., should I change from this to UNPACK pragmas?) -kzm -- If I haven't seen further, it is by standing in the footprints of giants
participants (2)
-
Ketil Malde
-
Simon Marlow