# FW: Straightforward conversion from Int <-> Word

Simon Peyton-Jones simonpj@microsoft.com
Tue, 26 Feb 2002 00:53:25 -0800

```Dear library folk

Is this as Haskell library issue?  Shouldn't this be a blessed function?

Simon

-----Original Message-----
From: Julian Seward (Intl Vendor) [mailto:v-julsew@microsoft.com]=20
Sent: 25 February 2002 16:57
Subject: RE: Straightforward conversion from Int <-> Word

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]
| Sent: Monday, February 25, 2002 4:46 PM
| Subject: Straightforward conversion from Int <-> Word
|=20
|=20
| I've cast about a bit and haven't been able to find the appropriate=20
| 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 \$
| (minBound :: Int)
|=20
| One might think that "intToWord32" and "word32ToInt" in lang/Word=20
| would do what I want---but no!  These are depracated, and I must use=20
| 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
| _______________________________________________