blob: 859d7109e0b7b542151d55c9bf1dcd2d438862c9 (
plain) (
blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
module Data.ByteStringBuilder where
import Data.ByteString.Lazy as BSL
import Data.ByteString.Lazy.Char8 as BSLC
import Data.Word
data ByteStringBuilder a = ByteStringBuilder ByteString a
type Builder = ByteStringBuilder ()
put :: ByteString -> Builder
put = flip ByteStringBuilder ()
putS :: String -> Builder
putS = put . BSLC.pack
putSLn :: String -> Builder
putSLn str = putS str >> putC '\n'
putC :: Char -> Builder
putC = put . BSLC.singleton
putB :: Word8 -> Builder
putB = put . BSL.singleton
runBuilder :: Builder -> ByteString
runBuilder (ByteStringBuilder bs _) = bs
instance Monad ByteStringBuilder where
ByteStringBuilder a _ >> ByteStringBuilder b c = ByteStringBuilder (a `append` b) c
a@(ByteStringBuilder _ b) >>= func = a >> func b
return = ByteStringBuilder BSL.empty
fail = error
|