packages feed

MicroHs-0.15.0.0: lib/Data/ByteString/Builder/Internal.hs

module Data.ByteString.Builder.Internal where

import qualified Prelude ()
import MiniPrelude

import Data.ByteString.Internal (StrictByteString)
import Data.ByteString.Lazy (LazyByteString, append, empty, fromStrict)

newtype Builder = Builder (LazyByteString -> LazyByteString)

instance Semigroup Builder where
    Builder f <> Builder g = Builder (f . g)

instance Monoid Builder where
    mempty = Builder id

instance IsString Builder where
    fromString = stringUtf8

instance Show Builder where
    show = show . toLazyByteString

toLazyByteString :: Builder -> LazyByteString
toLazyByteString (Builder f) = f empty

byteString :: StrictByteString -> Builder
byteString bs = Builder (fromStrict bs `append`)

lazyByteString :: LazyByteString -> Builder
lazyByteString bs = Builder (bs `append`)

stringUtf8 :: String -> Builder
stringUtf8 = byteString . _primitive "toUTF8"