{-# 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