packages feed

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

module Data.ByteString.Builder.Extra where

import qualified Prelude ()
import MiniPrelude

import Control.Monad.ST
import Data.ByteString.Builder
import Data.ByteString.Builder.Internal
import Data.Double
import Data.Float
import Data.Int
import Data.Word
import Foreign.Storable
import Mhs.MutUArr
import Mhs.UArr

flush :: Builder
flush = Builder id

host :: (Storable a) => a -> Builder
host x = runST $ do
    arr <- newMutSTUArr 1
    unsafeWriteMutSTUArr arr 0 x
    UArr bs <- unsafeFreezeMutSTUArr arr
    pure (byteString bs)

intHost :: Int -> Builder
intHost = host

int16Host :: Int16 -> Builder
int16Host = host

int32Host :: Int32 -> Builder
int32Host = host

int64Host :: Int64 -> Builder
int64Host = host

wordHost :: Word -> Builder
wordHost = host

word16Host :: Word16 -> Builder
word16Host = host

word32Host :: Word32 -> Builder
word32Host = host

word64Host :: Word64 -> Builder
word64Host = host

floatHost :: Float -> Builder
floatHost = host

doubleHost :: Double -> Builder
doubleHost = host