bytebuild-0.3.9.0: src/Data/Bytes/Builder/Class.hs
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE TypeSynonymInstances #-}
module Data.Bytes.Builder.Class
( ToBuilder(..)
) where
import Data.Bytes (Bytes)
import Data.Bytes.Builder (Builder)
import Data.ByteString.Short (ShortByteString)
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