@haskell binary0.7.0.0

Binary serialisation for Haskell values using lazy ByteStrings

binary: efficient, pure binary serialisation using lazy ByteStrings

The 'binary' package provides Data.Binary, containing the Binary class, and associated methods, for serialising values to and from lazy ByteStrings.

A key feature of 'binary' is that the interface is both pure, and efficient.

The 'binary' package is portable to GHC and Hugs.

Building:

runhaskell Setup.lhs configure
runhaskell Setup.lhs build
runhaskell Setup.lhs install

First: import Data.Binary

and then write an instance of Binary for the type you wish to serialise. More information in the haddock documentation.

Deriving:

It is possible to mechanically derive new instances of Binary for your types, if they support the Data and Typeable classes. A script is provided in tools/derive. Here's an example of its use.

$ cd binary 
$ cd tools/derive 

$ ghci -fglasgow-exts BinaryDerive.hs

*BinaryDerive> :l Example.hs 

*Main> deriveM (undefined :: Exp)

instance Binary Main.Exp where
  put (ExpOr a b) = putWord8 0 >> put a >> put b
  put (ExpAnd a b) = putWord8 1 >> put a >> put b
  put (ExpEq a b) = putWord8 2 >> put a >> put b
  put (ExpNEq a b) = putWord8 3 >> put a >> put b
  put (ExpAdd a b) = putWord8 4 >> put a >> put b
  put (ExpSub a b) = putWord8 5 >> put a >> put b
  put (ExpVar a) = putWord8 6 >> put a
  put (ExpInt a) = putWord8 7 >> put a
  get = do
    tag_ <- getWord8
    case tag_ of
      0 -> get >>= \a -> get >>= \b -> return (ExpOr a b)
      1 -> get >>= \a -> get >>= \b -> return (ExpAnd a b)
      2 -> get >>= \a -> get >>= \b -> return (ExpEq a b)
      3 -> get >>= \a -> get >>= \b -> return (ExpNEq a b)
      4 -> get >>= \a -> get >>= \b -> return (ExpAdd a b)
      5 -> get >>= \a -> get >>= \b -> return (ExpSub a b)
      6 -> get >>= \a -> return (ExpVar a)
      7 -> get >>= \a -> return (ExpInt a)
      _ -> fail "no decoding"

Contributors:

Lennart Kolmodin
Duncan Coutts
Don Stewart
Spencer Janssen
David Himmelstrup
Björn Bringert
Ross Paterson
Einar Karttunen
John Meacham
Ulf Norell
Tomasz Zielonka
Stefan Karrmann
Bryan O'Sullivan
Bas van Dijk
Florian Weimer