From e083553a455d30374f21aa0c34d9ae827470d490 Mon Sep 17 00:00:00 2001 From: Joshua Rahm Date: Fri, 4 Apr 2014 19:38:15 -0600 Subject: intiial commit --- Data/ByteStringBuilder.hs | 32 ++++++++++++++++++++++++++++++++ 1 file changed, 32 insertions(+) create mode 100644 Data/ByteStringBuilder.hs (limited to 'Data') 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 -- cgit