module Text.Builder
( Builder,
run,
length,
null,
putToStdOut,
putToStdErr,
putLnToStdOut,
putLnToStdErr,
intercalate,
padFromLeft,
padFromRight,
text,
string,
asciiByteString,
hexData,
char,
unicodeCodePoint,
utf16CodeUnits1,
utf16CodeUnits2,
utf8CodeUnits1,
utf8CodeUnits2,
utf8CodeUnits3,
utf8CodeUnits4,
decimal,
unsignedDecimal,
thousandSeparatedDecimal,
thousandSeparatedUnsignedDecimal,
dataSizeInBytesInDecimal,
unsignedBinary,
unsignedPaddedBinary,
hexadecimal,
unsignedHexadecimal,
decimalDigit,
hexadecimalDigit,
fixedDouble,
doublePercent,
intervalInSeconds,
)
where
import Data.ByteString (ByteString)
import Data.Text (Text)
import Text.Builder.Prelude hiding (intercalate, length, null)
import qualified TextBuilderDev as Dev
newtype Builder
= Builder Dev.TextBuilder
deriving (Int -> Builder -> ShowS
[Builder] -> ShowS
Builder -> String
(Int -> Builder -> ShowS)
-> (Builder -> String) -> ([Builder] -> ShowS) -> Show Builder
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
showList :: [Builder] -> ShowS
$cshowList :: [Builder] -> ShowS
show :: Builder -> String
$cshow :: Builder -> String
showsPrec :: Int -> Builder -> ShowS
$cshowsPrec :: Int -> Builder -> ShowS
Show, String -> Builder
(String -> Builder) -> IsString Builder
forall a. (String -> a) -> IsString a
fromString :: String -> Builder
$cfromString :: String -> Builder
IsString, b -> Builder -> Builder
NonEmpty Builder -> Builder
Builder -> Builder -> Builder
(Builder -> Builder -> Builder)
-> (NonEmpty Builder -> Builder)
-> (forall b. Integral b => b -> Builder -> Builder)
-> Semigroup Builder
forall b. Integral b => b -> Builder -> Builder
forall a.
(a -> a -> a)
-> (NonEmpty a -> a)
-> (forall b. Integral b => b -> a -> a)
-> Semigroup a
stimes :: b -> Builder -> Builder
$cstimes :: forall b. Integral b => b -> Builder -> Builder
sconcat :: NonEmpty Builder -> Builder
$csconcat :: NonEmpty Builder -> Builder
<> :: Builder -> Builder -> Builder
$c<> :: Builder -> Builder -> Builder
Semigroup, Semigroup Builder
Builder
Semigroup Builder
-> Builder
-> (Builder -> Builder -> Builder)
-> ([Builder] -> Builder)
-> Monoid Builder
[Builder] -> Builder
Builder -> Builder -> Builder
forall a.
Semigroup a -> a -> (a -> a -> a) -> ([a] -> a) -> Monoid a
mconcat :: [Builder] -> Builder
$cmconcat :: [Builder] -> Builder
mappend :: Builder -> Builder -> Builder
$cmappend :: Builder -> Builder -> Builder
mempty :: Builder
$cmempty :: Builder
$cp1Monoid :: Semigroup Builder
Monoid)
{-# INLINE length #-}
length :: Builder -> Int
length :: Builder -> Int
length = (TextBuilder -> Int) -> Builder -> Int
coerce TextBuilder -> Int
Dev.length
{-# INLINE null #-}
null :: Builder -> Bool
null :: Builder -> Bool
null = (TextBuilder -> Bool) -> Builder -> Bool
coerce TextBuilder -> Bool
Dev.null
run :: Builder -> Text
run :: Builder -> Text
run = (TextBuilder -> Text) -> Builder -> Text
coerce TextBuilder -> Text
Dev.buildText
putToStdOut :: Builder -> IO ()
putToStdOut :: Builder -> IO ()
putToStdOut = (TextBuilder -> IO ()) -> Builder -> IO ()
coerce TextBuilder -> IO ()
Dev.putToStdOut
putToStdErr :: Builder -> IO ()
putToStdErr :: Builder -> IO ()
putToStdErr = (TextBuilder -> IO ()) -> Builder -> IO ()
coerce TextBuilder -> IO ()
Dev.putToStdErr
putLnToStdOut :: Builder -> IO ()
putLnToStdOut :: Builder -> IO ()
putLnToStdOut = (TextBuilder -> IO ()) -> Builder -> IO ()
coerce TextBuilder -> IO ()
Dev.putLnToStdOut
putLnToStdErr :: Builder -> IO ()
putLnToStdErr :: Builder -> IO ()
putLnToStdErr = (TextBuilder -> IO ()) -> Builder -> IO ()
coerce TextBuilder -> IO ()
Dev.putLnToStdErr
{-# INLINE char #-}
char :: Char -> Builder
char :: Char -> Builder
char = (Char -> TextBuilder) -> Char -> Builder
coerce Char -> TextBuilder
Dev.char
{-# INLINE unicodeCodePoint #-}
unicodeCodePoint :: Int -> Builder
unicodeCodePoint :: Int -> Builder
unicodeCodePoint = (Int -> TextBuilder) -> Int -> Builder
coerce Int -> TextBuilder
Dev.unicodeCodePoint
{-# INLINEABLE utf16CodeUnits1 #-}
utf16CodeUnits1 :: Word16 -> Builder
utf16CodeUnits1 :: Word16 -> Builder
utf16CodeUnits1 = (Word16 -> TextBuilder) -> Word16 -> Builder
coerce Word16 -> TextBuilder
Dev.utf16CodeUnits1
{-# INLINEABLE utf16CodeUnits2 #-}
utf16CodeUnits2 :: Word16 -> Word16 -> Builder
utf16CodeUnits2 :: Word16 -> Word16 -> Builder
utf16CodeUnits2 = (Word16 -> Word16 -> TextBuilder) -> Word16 -> Word16 -> Builder
coerce Word16 -> Word16 -> TextBuilder
Dev.utf16CodeUnits2
{-# INLINE utf8CodeUnits1 #-}
utf8CodeUnits1 :: Word8 -> Builder
utf8CodeUnits1 :: Word8 -> Builder
utf8CodeUnits1 = (Word8 -> TextBuilder) -> Word8 -> Builder
coerce Word8 -> TextBuilder
Dev.utf8CodeUnits1
{-# INLINE utf8CodeUnits2 #-}
utf8CodeUnits2 :: Word8 -> Word8 -> Builder
utf8CodeUnits2 :: Word8 -> Word8 -> Builder
utf8CodeUnits2 = (Word8 -> Word8 -> TextBuilder) -> Word8 -> Word8 -> Builder
coerce Word8 -> Word8 -> TextBuilder
Dev.utf8CodeUnits2
{-# INLINE utf8CodeUnits3 #-}
utf8CodeUnits3 :: Word8 -> Word8 -> Word8 -> Builder
utf8CodeUnits3 :: Word8 -> Word8 -> Word8 -> Builder
utf8CodeUnits3 = (Word8 -> Word8 -> Word8 -> TextBuilder)
-> Word8 -> Word8 -> Word8 -> Builder
coerce Word8 -> Word8 -> Word8 -> TextBuilder
Dev.utf8CodeUnits3
{-# INLINE utf8CodeUnits4 #-}
utf8CodeUnits4 :: Word8 -> Word8 -> Word8 -> Word8 -> Builder
utf8CodeUnits4 :: Word8 -> Word8 -> Word8 -> Word8 -> Builder
utf8CodeUnits4 = (Word8 -> Word8 -> Word8 -> Word8 -> TextBuilder)
-> Word8 -> Word8 -> Word8 -> Word8 -> Builder
coerce Word8 -> Word8 -> Word8 -> Word8 -> TextBuilder
Dev.utf8CodeUnits4
{-# INLINEABLE asciiByteString #-}
asciiByteString :: ByteString -> Builder
asciiByteString :: ByteString -> Builder
asciiByteString = (ByteString -> TextBuilder) -> ByteString -> Builder
coerce ByteString -> TextBuilder
Dev.asciiByteString
{-# INLINEABLE text #-}
text :: Text -> Builder
text :: Text -> Builder
text = (Text -> TextBuilder) -> Text -> Builder
coerce Text -> TextBuilder
Dev.text
{-# INLINE string #-}
string :: String -> Builder
string :: String -> Builder
string = (String -> TextBuilder) -> String -> Builder
coerce String -> TextBuilder
Dev.string
{-# INLINEABLE decimal #-}
decimal :: Integral a => a -> Builder
decimal :: a -> Builder
decimal = TextBuilder -> Builder
coerce (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> TextBuilder
forall a. Integral a => a -> TextBuilder
Dev.decimal
{-# INLINEABLE unsignedDecimal #-}
unsignedDecimal :: Integral a => a -> Builder
unsignedDecimal :: a -> Builder
unsignedDecimal = TextBuilder -> Builder
coerce (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> TextBuilder
forall a. Integral a => a -> TextBuilder
Dev.unsignedDecimal
{-# INLINEABLE thousandSeparatedDecimal #-}
thousandSeparatedDecimal :: Integral a => Char -> a -> Builder
thousandSeparatedDecimal :: Char -> a -> Builder
thousandSeparatedDecimal = (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TextBuilder -> Builder
coerce ((a -> TextBuilder) -> a -> Builder)
-> (Char -> a -> TextBuilder) -> Char -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Char -> a -> TextBuilder
forall a. Integral a => Char -> a -> TextBuilder
Dev.thousandSeparatedDecimal
{-# INLINEABLE thousandSeparatedUnsignedDecimal #-}
thousandSeparatedUnsignedDecimal :: Integral a => Char -> a -> Builder
thousandSeparatedUnsignedDecimal :: Char -> a -> Builder
thousandSeparatedUnsignedDecimal = (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TextBuilder -> Builder
coerce ((a -> TextBuilder) -> a -> Builder)
-> (Char -> a -> TextBuilder) -> Char -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Char -> a -> TextBuilder
forall a. Integral a => Char -> a -> TextBuilder
Dev.thousandSeparatedUnsignedDecimal
{-# INLINEABLE dataSizeInBytesInDecimal #-}
dataSizeInBytesInDecimal :: Integral a => Char -> a -> Builder
dataSizeInBytesInDecimal :: Char -> a -> Builder
dataSizeInBytesInDecimal = (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap TextBuilder -> Builder
coerce ((a -> TextBuilder) -> a -> Builder)
-> (Char -> a -> TextBuilder) -> Char -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Char -> a -> TextBuilder
forall a. Integral a => Char -> a -> TextBuilder
Dev.dataSizeInBytesInDecimal
{-# INLINE unsignedBinary #-}
unsignedBinary :: Integral a => a -> Builder
unsignedBinary :: a -> Builder
unsignedBinary = TextBuilder -> Builder
coerce (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> TextBuilder
forall a. Integral a => a -> TextBuilder
Dev.unsignedBinary
{-# INLINE unsignedPaddedBinary #-}
unsignedPaddedBinary :: (Integral a, FiniteBits a) => a -> Builder
unsignedPaddedBinary :: a -> Builder
unsignedPaddedBinary = TextBuilder -> Builder
coerce (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> TextBuilder
forall a. (Integral a, FiniteBits a) => a -> TextBuilder
Dev.unsignedPaddedBinary
{-# INLINE hexadecimal #-}
hexadecimal :: Integral a => a -> Builder
hexadecimal :: a -> Builder
hexadecimal = TextBuilder -> Builder
coerce (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> TextBuilder
forall a. Integral a => a -> TextBuilder
Dev.hexadecimal
{-# INLINE unsignedHexadecimal #-}
unsignedHexadecimal :: Integral a => a -> Builder
unsignedHexadecimal :: a -> Builder
unsignedHexadecimal = TextBuilder -> Builder
coerce (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> TextBuilder
forall a. Integral a => a -> TextBuilder
Dev.unsignedHexadecimal
{-# INLINE decimalDigit #-}
decimalDigit :: Integral a => a -> Builder
decimalDigit :: a -> Builder
decimalDigit = TextBuilder -> Builder
coerce (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> TextBuilder
forall a. Integral a => a -> TextBuilder
Dev.decimalDigit
{-# INLINE hexadecimalDigit #-}
hexadecimalDigit :: Integral a => a -> Builder
hexadecimalDigit :: a -> Builder
hexadecimalDigit = TextBuilder -> Builder
coerce (TextBuilder -> Builder) -> (a -> TextBuilder) -> a -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. a -> TextBuilder
forall a. Integral a => a -> TextBuilder
Dev.hexadecimalDigit
{-# INLINE intercalate #-}
intercalate :: Foldable foldable => Builder -> foldable Builder -> Builder
intercalate :: Builder -> foldable Builder -> Builder
intercalate Builder
a foldable Builder
b = TextBuilder -> Builder
coerce (TextBuilder -> [TextBuilder] -> TextBuilder
forall (foldable :: * -> *).
Foldable foldable =>
TextBuilder -> foldable TextBuilder -> TextBuilder
Dev.intercalate (Builder -> TextBuilder
coerce Builder
a) ((Builder -> [TextBuilder] -> [TextBuilder])
-> [TextBuilder] -> foldable Builder -> [TextBuilder]
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr ((:) (TextBuilder -> [TextBuilder] -> [TextBuilder])
-> (Builder -> TextBuilder)
-> Builder
-> [TextBuilder]
-> [TextBuilder]
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. Builder -> TextBuilder
coerce) [] foldable Builder
b))
{-# INLINEABLE padFromLeft #-}
padFromLeft :: Int -> Char -> Builder -> Builder
padFromLeft :: Int -> Char -> Builder -> Builder
padFromLeft = (Int -> Char -> TextBuilder -> TextBuilder)
-> Int -> Char -> Builder -> Builder
coerce Int -> Char -> TextBuilder -> TextBuilder
Dev.padFromLeft
{-# INLINEABLE padFromRight #-}
padFromRight :: Int -> Char -> Builder -> Builder
padFromRight :: Int -> Char -> Builder -> Builder
padFromRight = (Int -> Char -> TextBuilder -> TextBuilder)
-> Int -> Char -> Builder -> Builder
coerce Int -> Char -> TextBuilder -> TextBuilder
Dev.padFromRight
{-# INLINEABLE intervalInSeconds #-}
intervalInSeconds :: RealFrac seconds => seconds -> Builder
intervalInSeconds :: seconds -> Builder
intervalInSeconds = TextBuilder -> Builder
coerce (TextBuilder -> Builder)
-> (seconds -> TextBuilder) -> seconds -> Builder
forall k (cat :: k -> k -> *) (b :: k) (c :: k) (a :: k).
Category cat =>
cat b c -> cat a b -> cat a c
. seconds -> TextBuilder
forall seconds. RealFrac seconds => seconds -> TextBuilder
Dev.intervalInSeconds
{-# INLINE fixedDouble #-}
fixedDouble ::
Int ->
Double ->
Builder
fixedDouble :: Int -> Double -> Builder
fixedDouble = (Int -> Double -> TextBuilder) -> Int -> Double -> Builder
coerce Int -> Double -> TextBuilder
Dev.fixedDouble
{-# INLINE doublePercent #-}
doublePercent ::
Int ->
Double ->
Builder
doublePercent :: Int -> Double -> Builder
doublePercent = (Int -> Double -> TextBuilder) -> Int -> Double -> Builder
coerce Int -> Double -> TextBuilder
Dev.doublePercent
{-# INLINE hexData #-}
hexData :: ByteString -> Builder
hexData :: ByteString -> Builder
hexData = (ByteString -> TextBuilder) -> ByteString -> Builder
coerce ByteString -> TextBuilder
Dev.hexData