[Haskell-cafe] ANNOUNCE: storable-endian

Henk-Jan van Tuyl hjgtuyl at chello.nl
Fri Dec 24 15:08:25 CET 2010

On Fri, 24 Dec 2010 11:36:23 +0100, Eugene Kirpichov  
<ekirpichov at gmail.com> wrote:

> Hello,
> 2010/12/24 Henning Thielemann <lemming at henning-thielemann.de>:
>> Maybe you succeed to find out machine endianess at
>> compile time. Then you could use native memory access if the user  
>> requested
>> endianess is the one of the machine. If you achieve this, you could
>> implement peek and poke of Float and Double by just reversing the byte  
>> order
>> into an 'alloca'd memory area and peek from and poke into this one with  
>> a
>> native peek or poke, respectively. That is you would not need any
>> unsafeCoerce anymore.
> I don't think I'd like to allocate memory in these functions - I
> expect them to have very predictable and very high performance.
> I'm using unsafeCoerce because it allows me to treat all these types
> in the same fashion (which is good for correctness and readability),
> and unsafeCoerce's semantics is identical to what is expected of this
> code - interpret a memory area as a value of a different type.
> You're right however that some support could be added for host
> endianness - once I think something up, I'll do it; maybe this could
> be done with a couple unsafePerformIOs and runtime tests :)

You could use ADNS.Endian.endian from package hsdns in your Setup.hs to  
define endianness at compile time.

Henk-Jan van Tuyl


More information about the Haskell-Cafe mailing list