Readme for binary-0.6.1.0
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
Florian Weimer