| Copyright | (c) 2022 Andrew Lelechenko |
|---|---|
| License | BSD3 |
| Maintainer | Andrew Lelechenko <andrew.lelechenko@gmail.com> |
| Safe Haskell | None |
| Language | GHC2021 |
Data.Text.Builder.Linear
Description
Builder for strict Text and ByteString, based on linear types. It consistently
outperforms Data.Text.Lazy.Builder
from text as well as a strict builder from text-builder,
and scales better.
Synopsis
- newtype Builder = Builder {}
- runBuilder :: forall (m :: Multiplicity). Builder %m -> Text
- runBuilderBS :: forall (m :: Multiplicity). Builder %m -> ByteString
- fromText :: Text -> Builder
- fromChar :: Char -> Builder
- fromAddr :: Addr# -> Builder
- fromDec :: (Integral a, FiniteBits a) => a -> Builder
- fromUnboundedDec :: Integral a => a -> Builder
- fromHex :: (Integral a, FiniteBits a) => a -> Builder
- fromDouble :: Double -> Builder
Documentation
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.
runBuilder :: forall (m :: Multiplicity). Builder %m -> Text Source #
runBuilderBS :: forall (m :: Multiplicity). Builder %m -> ByteString Source #
Same as runBuilder, but returning a UTF-8 encoded strict ByteString.
fromAddr :: Addr# -> Builder Source #
Create Builder, containing a null-terminated UTF-8 string, specified by Addr#.
>>>:set -XMagicHash>>>fromAddr "foo"# <> fromAddr "bar"#"foobar"
The literal string must not contain zero bytes \NUL and must be a valid UTF-8,
these conditions are not checked.
fromDec :: (Integral a, FiniteBits a) => a -> Builder Source #
Create Builder, containing decimal representation of a given bounded integer.
>>>fromChar 'x' <> fromDec (123 :: Int)"x123"
fromUnboundedDec :: Integral a => a -> Builder Source #
Create Builder, containing decimal representation of a given unbounded integer.
>>>fromChar 'x' <> fromUnboundedDec (1e24 :: Integer)"x1000000000000000000000000"
Since: 0.1.3
fromHex :: (Integral a, FiniteBits a) => a -> Builder Source #
Create Builder, containing hexadecimal representation of a given integer.
>>>:set -XMagicHash>>>fromAddr "0x"# <> fromHex (0x123def :: Int)"0x123def"
fromDouble :: Double -> Builder Source #
Create Builder, containing decimal representation of a given Double.
>>>:set -XMagicHash>>>fromAddr "pi="# <> fromDouble pi"pi=3.141592653589793"