bytes-0.17: Sharing code for serialization between binary and cereal

Copyright(c) Edward Kmett 2013-2015
LicenseBSD3
MaintainerEdward Kmett <ekmett@gmail.com>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellSafe
LanguageHaskell98

Data.Bytes.Put

Description

This module generalizes the binary PutM and cereal PutM monads in an ad hoc fashion to permit code to be written that is compatible across them.

Moreover, this class permits code to be written to be portable over various monad transformers applied to these as base monads.

Synopsis

Documentation

class (Applicative m, Monad m) => MonadPut m where Source #

Minimal complete definition

Nothing

Methods

putWord8 :: Word8 -> m () Source #

Efficiently write a byte into the output buffer

putWord8 :: (m ~ t n, MonadTrans t, MonadPut n) => Word8 -> m () Source #

Efficiently write a byte into the output buffer

putByteString :: ByteString -> m () Source #

An efficient primitive to write a strict ByteString into the output buffer.

In binary this flushes the current buffer, and writes the argument into a new chunk.

putByteString :: (m ~ t n, MonadTrans t, MonadPut n) => ByteString -> m () Source #

An efficient primitive to write a strict ByteString into the output buffer.

In binary this flushes the current buffer, and writes the argument into a new chunk.

putLazyByteString :: ByteString -> m () Source #

Write a lazy ByteString efficiently.

With binary, this simply appends the chunks to the output buffer

putLazyByteString :: (m ~ t n, MonadTrans t, MonadPut n) => ByteString -> m () Source #

Write a lazy ByteString efficiently.

With binary, this simply appends the chunks to the output buffer

flush :: m () Source #

Pop the ByteString we have constructed so far, if any, yielding a new chunk in the result ByteString.

If we're building a strict ByteString with cereal then this does nothing.

flush :: (m ~ t n, MonadTrans t, MonadPut n) => m () Source #

Pop the ByteString we have constructed so far, if any, yielding a new chunk in the result ByteString.

If we're building a strict ByteString with cereal then this does nothing.

putWord16le :: Word16 -> m () Source #

Write a Word16 in little endian format

putWord16le :: (m ~ t n, MonadTrans t, MonadPut n) => Word16 -> m () Source #

Write a Word16 in little endian format

putWord16be :: Word16 -> m () Source #

Write a Word16 in big endian format

putWord16be :: (m ~ t n, MonadTrans t, MonadPut n) => Word16 -> m () Source #

Write a Word16 in big endian format

putWord16host :: Word16 -> m () Source #

O(1). Write a Word16 in native host order and host endianness. For portability issues see putWordhost.

putWord16host :: (m ~ t n, MonadTrans t, MonadPut n) => Word16 -> m () Source #

O(1). Write a Word16 in native host order and host endianness. For portability issues see putWordhost.

putWord32le :: Word32 -> m () Source #

Write a Word32 in little endian format

putWord32le :: (m ~ t n, MonadTrans t, MonadPut n) => Word32 -> m () Source #

Write a Word32 in little endian format

putWord32be :: Word32 -> m () Source #

Write a Word32 in big endian format

putWord32be :: (m ~ t n, MonadTrans t, MonadPut n) => Word32 -> m () Source #

Write a Word32 in big endian format

putWord32host :: Word32 -> m () Source #

O(1). Write a Word32 in native host order and host endianness. For portability issues see putWordhost.

putWord32host :: (m ~ t n, MonadTrans t, MonadPut n) => Word32 -> m () Source #

O(1). Write a Word32 in native host order and host endianness. For portability issues see putWordhost.

putWord64le :: Word64 -> m () Source #

Write a Word64 in little endian format

putWord64le :: (m ~ t n, MonadTrans t, MonadPut n) => Word64 -> m () Source #

Write a Word64 in little endian format

putWord64be :: Word64 -> m () Source #

Write a Word64 in big endian format

putWord64be :: (m ~ t n, MonadTrans t, MonadPut n) => Word64 -> m () Source #

Write a Word64 in big endian format

putWord64host :: Word64 -> m () Source #

O(1). Write a Word64 in native host order and host endianness. For portability issues see putWordhost.

putWord64host :: (m ~ t n, MonadTrans t, MonadPut n) => Word64 -> m () Source #

O(1). Write a Word64 in native host order and host endianness. For portability issues see putWordhost.

putWordhost :: Word -> m () Source #

O(1). Write a single native machine word. The word is written in host order, host endian form, for the machine you're on. On a 64 bit machine the Word is an 8 byte value, on a 32 bit machine, 4 bytes. Values written this way are not portable to different endian or word sized machines, without conversion.

putWordhost :: (m ~ t n, MonadTrans t, MonadPut n) => Word -> m () Source #

O(1). Write a single native machine word. The word is written in host order, host endian form, for the machine you're on. On a 64 bit machine the Word is an 8 byte value, on a 32 bit machine, 4 bytes. Values written this way are not portable to different endian or word sized machines, without conversion.

Instances
MonadPut PutM Source # 
Instance details

Defined in Data.Bytes.Put

MonadPut PutM Source # 
Instance details

Defined in Data.Bytes.Put

MonadPut m => MonadPut (ExceptT e m) Source # 
Instance details

Defined in Data.Bytes.Put

MonadPut m => MonadPut (StateT s m) Source # 
Instance details

Defined in Data.Bytes.Put

MonadPut m => MonadPut (StateT s m) Source # 
Instance details

Defined in Data.Bytes.Put

(MonadPut m, Monoid w) => MonadPut (WriterT w m) Source # 
Instance details

Defined in Data.Bytes.Put

(MonadPut m, Monoid w) => MonadPut (WriterT w m) Source # 
Instance details

Defined in Data.Bytes.Put

MonadPut m => MonadPut (ReaderT e m) Source # 
Instance details

Defined in Data.Bytes.Put

(MonadPut m, Monoid w) => MonadPut (RWST r w s m) Source # 
Instance details

Defined in Data.Bytes.Put

Methods

putWord8 :: Word8 -> RWST r w s m () Source #

putByteString :: ByteString -> RWST r w s m () Source #

putLazyByteString :: ByteString -> RWST r w s m () Source #

flush :: RWST r w s m () Source #

putWord16le :: Word16 -> RWST r w s m () Source #

putWord16be :: Word16 -> RWST r w s m () Source #

putWord16host :: Word16 -> RWST r w s m () Source #

putWord32le :: Word32 -> RWST r w s m () Source #

putWord32be :: Word32 -> RWST r w s m () Source #

putWord32host :: Word32 -> RWST r w s m () Source #

putWord64le :: Word64 -> RWST r w s m () Source #

putWord64be :: Word64 -> RWST r w s m () Source #

putWord64host :: Word64 -> RWST r w s m () Source #

putWordhost :: Word -> RWST r w s m () Source #

(MonadPut m, Monoid w) => MonadPut (RWST r w s m) Source # 
Instance details

Defined in Data.Bytes.Put

Methods

putWord8 :: Word8 -> RWST r w s m () Source #

putByteString :: ByteString -> RWST r w s m () Source #

putLazyByteString :: ByteString -> RWST r w s m () Source #

flush :: RWST r w s m () Source #

putWord16le :: Word16 -> RWST r w s m () Source #

putWord16be :: Word16 -> RWST r w s m () Source #

putWord16host :: Word16 -> RWST r w s m () Source #

putWord32le :: Word32 -> RWST r w s m () Source #

putWord32be :: Word32 -> RWST r w s m () Source #

putWord32host :: Word32 -> RWST r w s m () Source #

putWord64le :: Word64 -> RWST r w s m () Source #

putWord64be :: Word64 -> RWST r w s m () Source #

putWord64host :: Word64 -> RWST r w s m () Source #

putWordhost :: Word -> RWST r w s m () Source #

runPutL :: Put -> ByteString Source #

Put a value into a lazy ByteString using runPut.

runPutS :: Put -> ByteString Source #

Put a value into a strict ByteString using runPut.