text-builder-dev-0.3.4.2: Edge of developments for "text-builder"
Safe HaskellSafe-Inferred
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).

Instances

Instances details
Arbitrary TextBuilder Source # 
Instance details

Defined in TextBuilderDev

IsString TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Monoid TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Semigroup TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Show TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Eq TextBuilder Source # 
Instance details

Defined in TextBuilderDev

IsomorphicToTextBuilder TextBuilder Source # 
Instance details

Defined in TextBuilderDev

IsomorphicTo Text TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: TextBuilder -> Text #

IsomorphicTo Builder TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: TextBuilder -> Builder #

IsomorphicTo Text TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: TextBuilder -> Text #

IsomorphicTo TextBuilder Text Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: Text -> TextBuilder #

IsomorphicTo TextBuilder Builder Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: Builder -> TextBuilder #

IsomorphicTo TextBuilder Text Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: Text -> TextBuilder #

IsomorphicTo TextBuilder TextBuilder Source # 
Instance details

Defined in TextBuilderDev

IsomorphicTo TextBuilder String Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: String -> TextBuilder #

IsomorphicTo String TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: TextBuilder -> String #

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.

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 f => TextBuilder -> f TextBuilder -> TextBuilder Source #

Intercalate builders.

intercalateMap :: Foldable f => TextBuilder -> (a -> TextBuilder) -> f a -> TextBuilder Source #

Intercalate projecting values to builder.

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.

lazyText :: Text -> TextBuilder Source #

Lazy text.

asciiByteString :: ByteString -> TextBuilder Source #

ASCII byte string.

It's your responsibility to ensure that the bytes are in proper range, otherwise the produced text will be broken.

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.

finiteBitsUnsignedBinary :: FiniteBits a => a -> TextBuilder Source #

A less general but faster alternative to unsignedBinary.

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.

Classes

class IsomorphicToTextBuilder a where Source #

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

Unlike conversion classes from other libs this class is lawful. The law is:

fromTextBuilder . toTextBuilder = id

This class does not provide implicit rendering, such as from integer to its decimal representation. There are multiple ways of representing an integer as text (e.g., hexadecimal, binary). 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 (e.g., when the input string cannot be parsed as an integer).

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. They are context-dependent and as such should be defined as part of the domain.