Straightforward conversion from Int <-> Word
Julian Seward (Intl Vendor)
v-julsew@microsoft.com
Mon, 25 Feb 2002 08:56:56 -0800
I've found this annoying in the past, and have resorted to hitting
it on the head (GHC-specifically) with a blunt instrument:
intToNat :: Int -> Word
intToNat (I# i#) =3D W# (unsafeCast# i#)
This probably defeats the good intentions of the FFI designers,
but it kinda seems like it'll work on all reasonable architectures.
J
| -----Original Message-----
| From: Jan-Willem Maessen [mailto:jmaessen@alum.mit.edu]=20
| Sent: Monday, February 25, 2002 4:46 PM
| To: glasgow-haskell-users@haskell.org
| Subject: Straightforward conversion from Int <-> Word
|=20
|=20
| I've cast about a bit and haven't been able to find the appropriate
| functionality, so I'm asking here.
|=20
| I'd like to convert Int32 to and from Word32 in the good old-fashioned
| bitwise fashion (perserving modular arithmetic). I have the following
| code to show what I mean:
|=20
| intToNat i
| | i >=3D 0 =3D fromIntegral i
| | otherwise =3D fromIntegral (i - minBound) + negBound
| where negBound =3D fromInteger . negate . toInteger $=20
| (minBound :: Int)
|=20
| One might think that "intToWord32" and "word32ToInt" in lang/Word
| would do what I want---but no! These are depracated, and I must use
| fromIntegral, which will only perform the conversion correctly for the
| portions of the numeric range which overlap.
|=20
| How do I do the straightforward conversion module 2^32? I'm sure it's
| buried in there somewhere... I can't even turn up an appropriate type
| signature, though.
|=20
| -Jan-Willem Maessen
|=20
| _______________________________________________
| Glasgow-haskell-users mailing list
| Glasgow-haskell-users@haskell.org
| http://www.haskell.org/mailman/listinfo/glasgow-haskell-users
|=20