[Haskell-cafe] Re: Detecting system endianness

John Meacham john at repetae.net
Tue Dec 23 21:10:24 EST 2008

On Tue, Dec 23, 2008 at 07:44:14PM -0500, wren ng thornton wrote:
> AFAIK, Data.Word.Word is defined to be "the same size as Prelude.Int"  
> (which it isn't on GHC 6.8.2 on Intel OS X: 32bits vs 31bits) and Int is  
> defined to be at least 31bits but can be more. My interpretation of this  
> is that Int and Word will generally be implemented by the architecture's  
> natural word size in order to optimize performance, much like C's "int"  
> and "unsigned int" but with better definition of allowed sizes. This  
> seems to be supported by the existence of definite-sized variants Word8,  
> Word16, Word32...

Of course, natural word size can mean 'natural pointer size' or
'natural int size'. Which are different on many architectures. So, you
want to be careful about which you want.

> So yeah, I'm meaning the machine word, but I think Word is intended to  
> proxy for that. Maybe I'm wrong, but provided that Word contains (or can  
> be persuaded to contain) a round number of Word8 and that operations on  
> Word are cheaper than the analogous sequence of operations on the Word8  
> representation, that's good enough for my needs.

If you want to find out the 'natural' sizes, then look at the 'CInt',
'Ptr', and 'FunPtr' types, which follow the C 'int' 'void *' and 'void
(*fn)()' types. So they will conform to the architecture ABI for the
underlying spec/operating system. 

If you just want a type guarenteed to be able to hold a pointer or an
integer, use 'IntPtr' or 'WordPtr' which are provided for just that


John Meacham - ⑆repetae.net⑆john⑈

More information about the Haskell-Cafe mailing list