text-builder-linear-0.1: Builder for Text based on linear types
Copyright(c) 2022 Andrew Lelechenko
LicenseBSD3
MaintainerAndrew Lelechenko <andrew.lelechenko@gmail.com>
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Text.Builder.Linear

Description

Builder for strict Text, based on linear types. It's consistently outperforms Data.Text.Lazy.Builder from text as well as a strict builder from text-builder, and scales better.

Synopsis

Documentation

newtype Builder Source #

Thin wrapper over Buffer with a handy Semigroup instance.

>>> :set -XOverloadedStrings -XMagicHash
>>> fromText "foo" <> fromChar '_' <> fromAddr "bar"#
"foo_bar"

Remember: this is a strict builder, so on contrary to Data.Text.Lazy.Builder for optimal performance you should use strict left folds instead of lazy right ones.

Note that (similar to other builders) concatenation of Builders allocates thunks. This is to a certain extent mitigated by aggressive inlining, but it is faster to use Buffer directly.

Constructors

Builder 

Fields

Instances

Instances details
IsString Builder Source # 
Instance details

Defined in Data.Text.Builder.Linear

Methods

fromStringStringBuilder #

Monoid Builder Source # 
Instance details

Defined in Data.Text.Builder.Linear

Semigroup Builder Source # 
Instance details

Defined in Data.Text.Builder.Linear

Methods

(<>)BuilderBuilderBuilder #

sconcatNonEmpty BuilderBuilder #

stimesIntegral b ⇒ b → BuilderBuilder #

Show Builder Source # 
Instance details

Defined in Data.Text.Builder.Linear

Methods

showsPrecIntBuilderShowS #

showBuilderString #

showList ∷ [Builder] → ShowS #

runBuilder ∷ ∀ m. Builder %m → Text Source #

Run Builder computation on an empty Buffer, returning Text.

>>> :set -XOverloadedStrings -XMagicHash
>>> runBuilder (fromText "foo" <> fromChar '_' <> fromAddr "bar"#)
"foo_bar"

This function has a polymorphic arrow and thus can be used both in usual and linear contexts.

fromTextTextBuilder Source #

Create Builder, containing a given Text.

>>> :set -XOverloadedStrings
>>> fromText "foo" <> fromText "bar"
"foobar"

fromCharCharBuilder Source #

Create Builder, containing a given Char.

>>> fromChar 'x' <> fromChar 'y'
"xy"

fromAddrAddr#Builder Source #

Create Builder, containing a null-terminated UTF-8 string, specified by Addr#.

>>> :set -XMagicHash
>>> fromAddr "foo"# <> fromAddr "bar"#
"foobar"

fromDec ∷ (Integral a, FiniteBits a) ⇒ a → Builder Source #

Create Builder, containing decimal representation of a given number.

>>> fromChar 'x' <> fromDec (123 :: Int)
"x123"

fromHex ∷ (Integral a, FiniteBits a) ⇒ a → Builder Source #

Create Builder, containing hexadecimal representation of a given number.

>>> :set -XMagicHash
>>> fromAddr "0x"# <> fromHex (0x123def :: Int)
"0x123def"

fromDoubleDoubleBuilder Source #

Create Builder, containing a given Double.

>>> :set -XMagicHash
>>> fromAddr "pi="# <> fromDouble pi
"pi=3.141592653589793"