[Haskell-cafe] ANNOUNCE: binary: high performance,
pure binary serialisation
Bjorn Bringert
bringert at cs.chalmers.se
Mon Jan 29 15:00:30 EST 2007
On Jan 29, 2007, at 16:38 , Ross Paterson wrote:
> On Fri, Jan 26, 2007 at 01:51:01PM +1100, Donald Bruce Stewart wrote:
>>
>> Binary: high performance, pure binary serialisation for
>> Haskell
>>
>> ---------------------------------------------------------------------
>> -
>>
>> The Binary Strike Team is pleased to announce the release of a new,
>> pure, efficient binary serialisation library for Haskell, now
>> available
>> from Hackage:
>>
>> tarball: http://hackage.haskell.org/cgi-bin/hackage-scripts/
>> package/binary/0.2
>> darcs: darcs get http://darcs.haskell.org/binary
>> haddocks: http://www.cse.unsw.edu.au/~dons/binary/Data-Binary.html
>
> Remind me again: why do you need a Put monad, which always seems to
> have
> the argument type ()? Monoids really are underappreciated.
I don't know if that's the main reason, but monads give you do-
notation, which can be very nice when you are doing a long sequence
of puts. Here's an example from the tar package [1]:
putHeaderNoChkSum :: TarHeader -> Put
putHeaderNoChkSum hdr =
do let (filePrefix, fileSuffix) = splitLongPath 100 (tarFileName
hdr)
putString 100 $ fileSuffix
putOct 8 $ tarFileMode hdr
putOct 8 $ tarOwnerID hdr
putOct 8 $ tarGroupID hdr
putOct 12 $ tarFileSize hdr
putOct 12 $ let TOD s _ = tarModTime hdr in s
fill 8 $ ' ' -- dummy checksum
putTarFileType $ tarFileType hdr
putString 100 $ tarLinkTarget hdr -- FIXME: take suffix
split at / if too long
putString 6 $ "ustar "
putString 2 $ " " -- strange ustar version
putString 32 $ tarOwnerName hdr
putString 32 $ tarGroupName hdr
putOct 8 $ tarDeviceMajor hdr
putOct 8 $ tarDeviceMinor hdr
putString 155 $ filePrefix
fill 12 $ '\NUL'
I guess mconcat [putX, putY, ... ] would work too, but the syntax is
not quite as nice.
/Björn
[1] http://www.cs.chalmers.se/~bringert/darcs/tar/
More information about the Haskell-Cafe
mailing list