on master help sign in
Add Functor and Applicative instances to BitPut.
1f9d92cLennart Kolmodin
Data/Binary/Bits/Put.hs+13
@@ -38,6 +38,7 @@ import Data.Binary.Put ( Put )
38
38
39import Data.ByteString
39import Data.ByteString
40
40
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
156
157
158+instance Functor BitPut where
159+ fmap f (BitPut k) = BitPut $ \s ->
160+ let PairS x s' = k s
161+ in PairS (f x) s'
162+
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
167+ PairS b s'' = g s'
168+ in PairS (a b) s''
169+
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