text-builder-dev-0.3: Edge of developments for "text-builder"
Safe HaskellNone
LanguageHaskell2010

TextBuilderDev

Synopsis

Documentation

data TextBuilder Source #

Specification of how to efficiently construct strict Text. Provides instances of Semigroup and Monoid, which have complexity of O(1).

Accessors

buildText :: TextBuilder -> Text Source #

Execute a builder producing a strict text

length :: TextBuilder -> Int Source #

Get the amount of characters

null :: TextBuilder -> Bool Source #

Check whether the builder is empty

Output IO

putToStdOut :: TextBuilder -> IO () Source #

Put builder, to stdout

putToStdErr :: TextBuilder -> IO () Source #

Put builder, to stderr

putLnToStdOut :: TextBuilder -> IO () Source #

Put builder, followed by a line, to stdout

putLnToStdErr :: TextBuilder -> IO () Source #

Put builder, followed by a line, to stderr

Classes

class IsomorphicToTextBuilder a where Source #

Evidence that there exists an unambiguous way to convert a type to and from TextBuilder.

Unlike typical conversion classes this class is lawful. The law is:

a == "fromTextBuilder" ("toTextBuilder" a)

This class does not provide implicit rendering, such as from integer to its decimal representation. It should already be evident that there is multiple ways of how an integer can be represented in a textual form (e.g., hexadecimal). The non-ambiguity is further enforced by the presence of the inverse conversion. In the integer case there is no way to read it from a textual form without a possibility of failing. So that is enough to prove that it's not sufficient.

If you're looking for such conversion classes, this library is not a place for them, since there can be infinite amount of flavours of conversions. IOW, they are context-dependent and as such should be defined as part of the domain.

Constructors

Builder manipulators

force :: TextBuilder -> TextBuilder Source #

Run the builder and pack the produced text into a new builder.

Useful to have around builders that you reuse, because a forced builder is much faster, since it's virtually a single call memcopy.

intercalate :: Foldable foldable => TextBuilder -> foldable TextBuilder -> TextBuilder Source #

Intercalate builders

padFromLeft :: Int -> Char -> TextBuilder -> TextBuilder Source #

Pad a builder from the left side to the specified length with the specified character

padFromRight :: Int -> Char -> TextBuilder -> TextBuilder Source #

Pad a builder from the right side to the specified length with the specified character

Textual

text :: Text -> TextBuilder Source #

Strict text

hexData :: ByteString -> TextBuilder Source #

Hexadecimal readable representation of binary data.

Character

char :: Char -> TextBuilder Source #

Unicode character

Low-level character

unicodeCodePoint :: Int -> TextBuilder Source #

Unicode code point

utf16CodeUnits1 :: Word16 -> TextBuilder Source #

Single code-unit UTF-16 character

utf16CodeUnits2 :: Word16 -> Word16 -> TextBuilder Source #

Double code-unit UTF-16 character

utf8CodeUnits1 :: Word8 -> TextBuilder Source #

Single code-unit UTF-8 character

utf8CodeUnits2 :: Word8 -> Word8 -> TextBuilder Source #

Double code-unit UTF-8 character

utf8CodeUnits3 :: Word8 -> Word8 -> Word8 -> TextBuilder Source #

Triple code-unit UTF-8 character

utf8CodeUnits4 :: Word8 -> Word8 -> Word8 -> Word8 -> TextBuilder Source #

UTF-8 character out of 4 code units

Integers

Decimal

decimal :: Integral a => a -> TextBuilder Source #

Decimal representation of an integral value

unsignedDecimal :: Integral a => a -> TextBuilder Source #

Decimal representation of an unsigned integral value

thousandSeparatedDecimal :: Integral a => Char -> a -> TextBuilder Source #

Decimal representation of an integral value with thousands separated by the specified character

thousandSeparatedUnsignedDecimal :: Integral a => Char -> a -> TextBuilder Source #

Decimal representation of an unsigned integral value with thousands separated by the specified character

dataSizeInBytesInDecimal :: Integral a => Char -> a -> TextBuilder Source #

Data size in decimal notation over amount of bytes.

Binary

unsignedBinary :: Integral a => a -> TextBuilder Source #

Unsigned binary number

unsignedPaddedBinary :: (Integral a, FiniteBits a) => a -> TextBuilder Source #

Unsigned binary number

Hexadecimal

hexadecimal :: Integral a => a -> TextBuilder Source #

Hexadecimal representation of an integral value

unsignedHexadecimal :: Integral a => a -> TextBuilder Source #

Unsigned hexadecimal representation of an integral value

Digits

decimalDigit :: Integral a => a -> TextBuilder Source #

Decimal digit

hexadecimalDigit :: Integral a => a -> TextBuilder Source #

Hexadecimal digit

Real

fixedDouble Source #

Arguments

:: Int

Amount of decimals after point.

-> Double 
-> TextBuilder 

Double with a fixed number of decimal places.

doublePercent Source #

Arguments

:: Int

Amount of decimals after point.

-> Double 
-> TextBuilder 

Double multiplied by 100 with a fixed number of decimal places applied and followed by a percent-sign.

Time

utcTimestampInIso8601 Source #

Arguments

:: Int

Year.

-> Int

Month.

-> Int

Day.

-> Int

Hour.

-> Int

Minute.

-> Int

Second.

-> TextBuilder 

General template for formatting date values according to the ISO8601 standard. The format is the following:

2021-11-24T12:11:02Z

Integrations with various time-libraries can be easily derived from that.

intervalInSeconds :: RealFrac seconds => seconds -> TextBuilder Source #

Time interval in seconds. Directly applicable to DiffTime and NominalDiffTime.