[Haskell-cafe] Why am I not allowed to use CStringLen inforeignexport?

Brian Hulley brianh at metamilk.com
Fri Sep 22 14:03:16 EDT 2006

Andreas Marth wrote:
>     low_l :: Word8 = fromIntegral (len .&. 0xFFFF)
>     low_h :: Word8 = fromIntegral (shiftR len 8 .&. 0xFFFF)
>     high_l :: Word8 = fromIntegral (shiftR len 16 .&. 0xFFFF)
>     high_h :: Word8 = fromIntegral (shiftR len 24 .&. 0xFFFF)

Hi -
I just noticed the mask should be changed to 0xFF for the BSTR8 version 
Also, I'm not actually sure if a mask is needed at all. I just used one to 
make sure there would be no chance of an overflow exception being thrown, 
but the Haskell report doesn't seem to specify anything at all about the 
behaviour of (fromIntegral) when converting between types of different 

Perhaps someone on the list can clarify whether or not a mask is needed ie 
is fromIntegral allowed to throw exceptions or does it always just silently 
discard unwanted bits of the argument being converted?

Thanks, Brian.
Logic empowers us and Love gives us purpose.
Yet still phantoms restless for eras long past,
congealed in the present in unthought forms,
strive mightily unseen to destroy us.


More information about the Haskell-Cafe mailing list