bytebuild-0.3.16.1: src/Data/Bytes/Builder/Class.hs
{-# LANGUAGE FlexibleInstances #-}
module Data.Bytes.Builder.Class
( ToBuilder (..)
) where
import Data.ByteString.Short (ShortByteString)
import Data.Bytes (Bytes)
import Data.Bytes.Builder (Builder)
import Data.Int
import Data.Primitive.ByteArray (ByteArray)
import Data.Text.Short (ShortText)
import Data.Word
import qualified Data.Bytes.Builder as Builder
{- | Types that can be encoded as a builder. Human-readable encodings
are used when possible. For example, numbers are encoded an ascii-encoded
decimal characters. UTF-8 is preferred for textual types. For types
that represent arbitrary bytes (e.g. Bytes, ByteString), the bytes
are preserved.
The goal of this typeclass is to reduce the size of builders produced
by quasiquotation.
-}
class ToBuilder a where
toBuilder :: a -> Builder
-- | Identity
instance ToBuilder Builder where
toBuilder = id
-- | Uses @bytes@.
instance ToBuilder Bytes where
toBuilder = Builder.bytes
-- | Uses @byteArray@
instance ToBuilder ByteArray where
toBuilder = Builder.byteArray
-- | Uses @shortByteString@
instance ToBuilder ShortByteString where
toBuilder = Builder.shortByteString
-- | Uses @shortTextUtf8@.
instance ToBuilder ShortText where
toBuilder = Builder.shortTextUtf8
-- | Uses @stringUtf8@
instance ToBuilder String where
toBuilder = Builder.stringUtf8
-- | Uses @int64Dec@.
instance ToBuilder Int64 where
toBuilder = Builder.int64Dec
-- | Uses @int32Dec@.
instance ToBuilder Int32 where
toBuilder = Builder.int32Dec
-- | Uses @int16Dec@.
instance ToBuilder Int16 where
toBuilder = Builder.int16Dec
-- | Uses @int8Dec@.
instance ToBuilder Int8 where
toBuilder = Builder.int8Dec
-- | Uses @intDec@.
instance ToBuilder Int where
toBuilder = Builder.intDec
-- | Uses @word64Dec@.
instance ToBuilder Word64 where
toBuilder = Builder.word64Dec
-- | Uses @word32Dec@.
instance ToBuilder Word32 where
toBuilder = Builder.word32Dec
-- | Uses @word16Dec@.
instance ToBuilder Word16 where
toBuilder = Builder.word16Dec
-- | Uses @word8Dec@.
instance ToBuilder Word8 where
toBuilder = Builder.word8Dec
-- | Uses @wordDec@.
instance ToBuilder Word where
toBuilder = Builder.wordDec
-- | uses @doubleDec@
instance ToBuilder Double where
toBuilder = Builder.doubleDec