diff options
| author | Joshua Rahm <joshua.rahm@colorado.edu> | 2014-04-04 19:38:15 -0600 |
|---|---|---|
| committer | Joshua Rahm <joshua.rahm@colorado.edu> | 2014-04-04 19:38:15 -0600 |
| commit | e083553a455d30374f21aa0c34d9ae827470d490 (patch) | |
| tree | 0313b29e5ff36efa76a53dbe63169c9d18b4433f /Data | |
| download | terralloc-e083553a455d30374f21aa0c34d9ae827470d490.tar.gz terralloc-e083553a455d30374f21aa0c34d9ae827470d490.tar.bz2 terralloc-e083553a455d30374f21aa0c34d9ae827470d490.zip | |
intiial commit
Diffstat (limited to 'Data')
| -rw-r--r-- | Data/ByteStringBuilder.hs | 32 |
1 files changed, 32 insertions, 0 deletions
diff --git a/Data/ByteStringBuilder.hs b/Data/ByteStringBuilder.hs new file mode 100644 index 0000000..859d710 --- /dev/null +++ b/Data/ByteStringBuilder.hs @@ -0,0 +1,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 |