bytebuild-0.3.9.0: src/Data/Bytes/Builder/Bounded/Class.hs
{-# language DataKinds #-}
{-# language TypeFamilies #-}
module Data.Bytes.Builder.Bounded.Class
( ToBoundedBuilder(..)
) where
import Data.Int
import Data.Word
import qualified Data.Bytes.Builder.Bounded as Bounded
import qualified GHC.TypeNats as GHC
-- | Variant of To 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 ToBoundedBuilder a where
type BoundedBuilderLength a :: GHC.Nat
toBuilder :: a -> Bounded.Builder (BoundedBuilderLength a)
-- | Identity
instance ToBoundedBuilder (Bounded.Builder n) where
type BoundedBuilderLength (Bounded.Builder n) = n
toBuilder = id
-- | Uses @int64Dec@.
instance ToBoundedBuilder Int64 where
type BoundedBuilderLength Int64 = 20
toBuilder = Bounded.int64Dec
-- | Uses @int32Dec@.
instance ToBoundedBuilder Int32 where
type BoundedBuilderLength Int32 = 11
toBuilder = Bounded.int32Dec
-- | Uses @int16Dec@.
instance ToBoundedBuilder Int16 where
type BoundedBuilderLength Int16 = 6
toBuilder = Bounded.int16Dec
-- | Uses @int8Dec@.
instance ToBoundedBuilder Int8 where
type BoundedBuilderLength Int8 = 4
toBuilder = Bounded.int8Dec
-- | Uses @intDec@.
instance ToBoundedBuilder Int where
type BoundedBuilderLength Int = 20
toBuilder = Bounded.intDec
-- | Uses @word64Dec@.
instance ToBoundedBuilder Word64 where
type BoundedBuilderLength Word64 = 19
toBuilder = Bounded.word64Dec
-- | Uses @word32Dec@.
instance ToBoundedBuilder Word32 where
type BoundedBuilderLength Word32 = 10
toBuilder = Bounded.word32Dec
-- | Uses @word16Dec@.
instance ToBoundedBuilder Word16 where
type BoundedBuilderLength Word16 = 5
toBuilder = Bounded.word16Dec
-- | Uses @word8Dec@.
instance ToBoundedBuilder Word8 where
type BoundedBuilderLength Word8 = 3
toBuilder = Bounded.word8Dec
-- | Uses @wordDec@.
instance ToBoundedBuilder Word where
type BoundedBuilderLength Word = 19
toBuilder = Bounded.wordDec