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

TextBuilderDev

Synopsis

--

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
Eq TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Show TextBuilder Source # 
Instance details

Defined in TextBuilderDev

IsString TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Semigroup TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Monoid TextBuilder Source # 
Instance details

Defined in TextBuilderDev

IsomorphicToTextBuilder TextBuilder Source # 
Instance details

Defined in TextBuilderDev

IsomorphicTo String TextBuilder Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: TextBuilder -> String #

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 String Source # 
Instance details

Defined in TextBuilderDev

Methods

to :: String -> TextBuilder #

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

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

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.

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.