@@ -38,6 +38,7 @@ import Data.Binary.Put ( Put )
39import Data.ByteString
39import Data.ByteString
41+import Control.Applicative
41import Data.Bits
42import Data.Bits
42import Data.Monoid
43import Data.Monoid
43import Data.Word
44import Data.Word
@@ -154,6 +155,18 @@ runBitPut m = Put.putBuilder b
154 PairS _ s = run m (S mempty 0 0)
155 PairS _ s = run m (S mempty 0 0)
155 (S b _ _) = flushIncomplete s
156 (S b _ _) = flushIncomplete s
158+instance Functor BitPut where
159+ fmap f (BitPut k) = BitPut $ \s ->
160+ let PairS x s' = k s
163+instance Applicative BitPut where
164+ pure a = BitPut (\s -> PairS a s)
165+ (BitPut f) <*> (BitPut g) = BitPut $ \s ->
166+ let PairS a s' = f s
157instance Monad BitPut where
170instance Monad BitPut where
158 m >>= k = BitPut $ \s ->
171 m >>= k = BitPut $ \s ->
159 let PairS a s' = run m s
172 let PairS a s' = run m s