[Haskell-cafe] GHC.Ptr, Foreign.Storable, Data.Storable.Endian, looking for good examples of usage

Antoine Latter aslatter at gmail.com
Tue Jan 11 19:54:28 CET 2011


On Tue, Jan 11, 2011 at 10:22 AM, Aaron Gray <aaronngray.lists at gmail.com> wrote:
> On 11 January 2011 00:02, Antoine Latter <aslatter at gmail.com> wrote:
>>
>> On Mon, Jan 10, 2011 at 5:23 PM, Aaron Gray <aaronngray.lists at gmail.com>
>> wrote:
>> > On 10 January 2011 22:30, Henning Thielemann
>> > <lemming at henning-thielemann.de>
>> > wrote:
>> >>
>> >> John Lato schrieb:
>> >>
>> >> > You could use my "word24" package[1] (GHC only) to provide
>> >> > non-aligned
>> >> > 24-bit word and int types with Storable instances.  You should be
>> >> > able
>> >> > to write a binary instance (or whatever blaze-builder needs) fairly
>> >> > simply from this.  Little-endian only ATM, but BE could be added if
>> >> > necessary.
>> >>
>> >> Good to know that! However, I think for the original poster the binary
>> >> package is perfect. This way he does not worry about unsafe peeking and
>> >> poking around in memory.
>> >>
>> >
>> > Yes. I have came back to looking at the binary package, the only thing
>> > is I
>> > think I have to build my own primatives with it as it is big-endian,
>> > where
>> > ActionScript Byte Code format is little-endian. It does provide some
>> > little-endian functions but they are not brought to the surface. It also
>> > seems to roll its own serializations.
>>
>> The 'binary' package supports big-endian, little-endian and
>> host-endian construction in the Data.Binary.Builder module, so you
>> hopefully won't need to reimplement too much.
>>
>
> Are there any examples of usage anywhere ? It does not seem to have 24bit
> values either.
> I am still thinking of implementing my own following the straight
> Data.Binary package as an example.
> Aaron
>

I used Data.Binary.Builder in an implementation of the memcached
binary protocol:
http://hackage.haskell.org/packages/archive/starling/0.3.0/doc/html/Network-Starling-Core.html

I'm sure other folks can chime in with good examples if that one isn't
clear - the package 'binary' is pretty popular.

You'd have to write your own putWord24be/le or whatever you need out
of the 'singleton :: Word8 -> Builder' function. But that seems
simpler than reimplementing Data.Binary.

The package blaze-builder might have primitives for converting a
Storable instance into a Builder function, but I don't have any direct
experience with it.

Antoine



More information about the Haskell-Cafe mailing list