module Data.Binary.Bits.Codec ( BitCodec , bool , word8, word16be, word32be, word64be , toBytes ) where import Control.Applicative import qualified Data.Binary.Bits.Get as G import Data.Binary.Bits.Put import qualified Data.Binary.Codec as B import Data.Codec import Data.Word type BitCodec a = Codec G.Block BitPut a bool :: BitCodec Bool bool = Codec G.bool putBool word8 :: Int -> BitCodec Word8 word8 = Codec <$> G.word8 <*> putWord8 word16be :: Int -> BitCodec Word16 word16be = Codec <$> G.word16be <*> putWord16be word32be :: Int -> BitCodec Word32 word32be = Codec <$> G.word32be <*> putWord32be word64be :: Int -> BitCodec Word64 word64be = Codec <$> G.word64be <*> putWord64be -- | Convert a `BitCodec` into a `B.BinaryCodec`. toBytes :: BitCodec a -> B.BinaryCodec a toBytes (Codec r w) = Codec (G.runBitGet $ G.block r) (runBitPut . w)