Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Share empty Text values #493

Merged
merged 1 commit into from
Jan 7, 2024
Merged

Share empty Text values #493

merged 1 commit into from
Jan 7, 2024

Conversation

TeofilC
Copy link
Contributor

@TeofilC TeofilC commented Jan 20, 2023

This MR ensures that empty Text values are shared.
This required:

  • making sure that empty values are NOINLINE.
  • In turn inlining cannot optimise length checks for empty text, so, we add a RULE for optimising null empty and try to use null more.
  • Lazy Text has a separate constructor for empty values. This means we need to be careful with code shared between strict and lazy text that we don't check for emptiness twice or when we can guarantee that they're non-empty.

Resolves #492

@Bodigrim
Copy link
Contributor

This needs a regression test: please generate empty texts by various means and check unsafe pointer equality.

Copy link
Contributor

@Lysxia Lysxia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

A lot of these checks could be moved to before the main loop of their respective functions.

@@ -252,6 +252,6 @@ pack xs = runST $ do
go (off + d) cs
len <- go 0 xs
arr <- A.unsafeFreeze marr
return (Text arr 0 len)
return (text arr 0 len)
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

It would be better to add a case pack [] = empty, skipping the A.new altogether.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in 8a60cdf

src/Data/Text.hs Outdated Show resolved Hide resolved
@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 4, 2023

Thanks for the comments! I haven't had a lot of time to work on this recently, but I'll get back to it soon, and push sone commits to address your points

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 4, 2023

I've pushed some changes. There's still a bit to do to optimise things and update docs/etc.

I've added a mapNonEmpty function that has the side-condition that the input is non-empty. This helps the Lazy code avoid doing impossible checks. I'll also have to do something similar for caseConvert, and some others that are monotonic increasing on length. Any opinions about where these should live? I'm thinking either Data.Text.Unsafe or Data.Text.Internal.

I've added a bunch of regression tests in their own file but do let me know if you'd like me to move them somewhere else.

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 4, 2023

Also do you have any tips for getting stable benchmark results. I'm aware of compiling with -fproc-alignment=64 but even with that I'm getting a lot of +/-10% variations

src/Data/Text/Foreign.hs Outdated Show resolved Hide resolved
Copy link
Contributor

@Lysxia Lysxia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

That's some great work!

Any opinions about where these should live? I'm thinking either Data.Text.Unsafe or Data.Text.Internal.

I would say Data.Text.Internal.

I don't have an answer regarding the benchmarking issue, but yeah I also find that the results tend to be quite volatile.

src/Data/Text.hs Outdated Show resolved Hide resolved
src/Data/Text.hs Outdated Show resolved Hide resolved
src/Data/Text.hs Outdated Show resolved Hide resolved
@Bodigrim
Copy link
Contributor

Bodigrim commented Feb 4, 2023

Also do you have any tips for getting stable benchmark results. I'm aware of compiling with -fproc-alignment=64 but even with that I'm getting a lot of +/-10% variations

Pass --stdev 1?

@Bodigrim
Copy link
Contributor

Bodigrim commented Feb 7, 2023

@TeofilC we are heading to a release, so it's high time to wrap up once you get a spare moment.

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 8, 2023

Thanks for the heads up @Bodigrim . I'll try to dedicate some time today

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 8, 2023

I've pushed another round of changes.

I tried to put the non-empty variants into Data.Text.Internal but they required functions from other internal modules.
Instead I've created a new module, Data.Text.Internal.Transformation with some of the worker functions I needed to extract to keep generated code nice. Let me know if you'd like me to fold that into something else or rename it.

@TeofilC TeofilC changed the title Draft: Share empty Text values Share empty Text values Feb 8, 2023
@TeofilC TeofilC marked this pull request as ready for review February 8, 2023 21:53
src/Data/Text.hs Outdated Show resolved Hide resolved
src/Data/Text.hs Outdated Show resolved Hide resolved
src/Data/Text/Internal.hs Outdated Show resolved Hide resolved
@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 9, 2023

You can move the last case earlier as | len == 0 = empty to avoid that awkward condition. Also add a comment to be careful to not let ww rebox empty.

Done in 22675d7

src/Data/Text.hs Outdated Show resolved Hide resolved
src/Data/Text.hs Outdated Show resolved Hide resolved
src/Data/Text.hs Outdated Show resolved Hide resolved
src/Data/Text/Lazy.hs Outdated Show resolved Hide resolved
tests/Tests/ShareEmpty.hs Outdated Show resolved Hide resolved
@Lysxia Lysxia added internal No API-level changes fix:performance labels Feb 9, 2023
@Lysxia
Copy link
Contributor

Lysxia commented Feb 9, 2023

Can you do the global Rank2Types to RankNTypes renaming in a separate PR?

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 9, 2023

Sure that makes sense. Split it out here: #502

Copy link
Contributor

@Lysxia Lysxia left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Ready to go

text.cabal Outdated
@@ -170,6 +170,7 @@ library
Data.Text.Internal.Read
Data.Text.Internal.Search
Data.Text.Internal.StrictBuilder
Data.Text.Internal.Transformation
Copy link
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Let's stop pollution of the global namespace. Please make this internal module only.

Copy link
Contributor Author

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Done in c3fe10f

@Bodigrim
Copy link
Contributor

Bodigrim commented Feb 9, 2023

Is there any performance change according to benchmarks?

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 10, 2023

I'm going to revert 51dd99c.
It looks like fully applying chunk leads to slightly worse Core. The only difference is now we allocate an extra closure

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 10, 2023

My last comment got it wrong there was something slowing the lazy filter down but it wasnt that.

The correct thing to do is f51caa3. We need to be careful to not check for emptiness twice, but we also need to be careful not to check for emptiness inside the inner loop. With this change the core before and after this branch is basically identical.

I'm rerunning the benchmark now, but my impression is that that was the only regression, and it's now fixed. And additionally toLower/toUpper improved significantly (strange)

@Bodigrim
Copy link
Contributor

To be honest, I'm not quite sold on this approach. It is a big amount of changes, and still the result is fairly fragile and requires a commitment to maintain the invisible invariant in every future change.

If it is really important to have only one heap object, representing an empty text, then the systematic way to achieve it is to redefine

data Text = Empty | NEText Array Int Int

together with a pattern synonym for backwards compatibility.

I suggest we do not rush with this change in the current release cycle.

@TeofilC could you elaborate a bit more on your use case? What's the reason that your application ends up with a multitude of empty texts?

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 10, 2023

I'm sympathetic to that. I I initially thought this would be a relatively small change but it has really grown into something quite large. And as you say this is all a bit fragile and hard to enforce.

I think having an explicit empty constructor would be quite good and that would create symmetry with the Lazy case. Though I thought GHC was much better at optimising single constructor data types, so maybe it would be quite expensive.

To be honest, I think my use case could be satisfied without this change. We have a lot of empty text because we parse a lot of data that has that. We could avoid this by improving our parsing code.

Investigating that made me think about the general case and I thought other people would benefit from the memory savings if this was optimised at the library level.

So I won't be disappointed if this doesn't work out.

In any case it sounds reasonable not to rush this

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 11, 2023

FWIW I think this library already had attempts at enforcing an empty text invariant to avoid leaking backing arrays. What this MR does is enforce that more strictly and improve the benefits by sharing heap objects as well.

In my mind, this is only a "best effort" invariant. It's something we try to enforce but can't guarantee. I think that makes it a bit less onerous but gets much of the benefit.

I'd also be happy to split up this MR if that helps

@TeofilC
Copy link
Contributor Author

TeofilC commented Feb 11, 2023

Here's the benchmark results I promised. My system is still not as quiet as I'd like.
There seems to be a regression in reverse that I'll investigate at some point if this is still something we want.

benchmark results
Build profile: -w ghc-9.4.4 -O1
In order, the following will be built (use -v for more details):
 - text-2.0.1 (lib) (configuration changed)
 - text-2.0.1 (bench:text-benchmarks) (configuration changed)
Configuring library for text-2.0.1..
Preprocessing library for text-2.0.1..
Building library for text-2.0.1..
Configuring benchmark 'text-benchmarks' for text-2.0.1..
Preprocessing benchmark 'text-benchmarks' for text-2.0.1..
Building benchmark 'text-benchmarks' for text-2.0.1..
Running 1 benchmarks...
Benchmark text-benchmarks: RUNNING...
All
  Builder
    Comparison
      LazyText:                      OK (5.89s)
        1.44 ms ± 3.5 μs, 2.0 MB allocated, 259 B  copied, 158 MB peak memory,  5% less than baseline
    Int
      Decimal
        Positive
          1:                         OK (1.27s)
            38.4 ns ± 696 ps, 363 B  allocated,   0 B  copied, 158 MB peak memory,  5% more than baseline
          2:                         OK (2.77s)
            42.1 ns ± 258 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  5% more than baseline
          3:                         OK (2.78s)
            42.3 ns ± 720 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  4% more than baseline
          4:                         OK (2.83s)
            43.2 ns ± 324 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  5% more than baseline
          5:                         OK (1.44s)
            44.2 ns ± 824 ps, 376 B  allocated,   0 B  copied, 158 MB peak memory,  4% more than baseline
          6:                         OK (1.46s)
            44.6 ns ± 772 ps, 376 B  allocated,   0 B  copied, 158 MB peak memory,  4% more than baseline
          7:                         OK (2.93s)
            45.2 ns ± 504 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  4% more than baseline
          8:                         OK (2.95s)
            45.5 ns ± 174 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  4% more than baseline
          9:                         OK (48.69s)
            46.1 ns ±  18 ps, 383 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          10:                        OK (3.13s)
            48.5 ns ± 310 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          11:                        OK (3.22s)
            49.9 ns ± 416 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  1% more than baseline
          12:                        OK (1.72s)
            53.3 ns ± 540 ps, 376 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          13:                        OK (1.89s)
            58.3 ns ± 898 ps, 376 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
          14:                        OK (2.00s)
            61.8 ns ± 1.2 ns, 376 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
          15:                        OK (2.19s)
            67.2 ns ± 942 ps, 376 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
          16:                        OK (2.26s)
            69.8 ns ± 442 ps, 376 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
          17:                        OK (1.25s)
            77.1 ns ± 874 ps, 370 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          18:                        OK (2.57s)
            78.8 ns ± 658 ps, 376 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
          19:                        OK (1.43s)
            87.5 ns ± 1.7 ns, 370 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
        Negative
          2:                         OK (2.75s)
            43.4 ns ± 688 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          3:                         OK (2.77s)
            43.8 ns ± 594 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          4:                         OK (2.80s)
            44.2 ns ± 324 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          5:                         OK (2.85s)
            45.1 ns ± 470 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          6:                         OK (1.47s)
            46.1 ns ± 744 ps, 376 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
          7:                         OK (2.94s)
            46.1 ns ± 496 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
          8:                         OK (3.00s)
            47.0 ns ± 218 ps, 380 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          9:                         OK (3.01s)
            47.2 ns ± 826 ps, 380 B  allocated,   1 B  copied, 158 MB peak memory,  2% more than baseline
          10:                        OK (3.10s)
            48.5 ns ± 266 ps, 380 B  allocated,   1 B  copied, 158 MB peak memory,  1% more than baseline
          11:                        OK (1.61s)
            50.3 ns ± 678 ps, 376 B  allocated,   1 B  copied, 158 MB peak memory,  2% more than baseline
          12:                        OK (3.36s)
            52.4 ns ± 384 ps, 380 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          13:                        OK (3.55s)
            55.3 ns ± 800 ps, 380 B  allocated,   1 B  copied, 158 MB peak memory,  1% more than baseline
          14:                        OK (1.93s)
            59.7 ns ± 834 ps, 376 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          15:                        OK (4.04s)
            62.7 ns ± 366 ps, 380 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          16:                        OK (2.23s)
            68.8 ns ± 580 ps, 376 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          17:                        OK (2.31s)
            71.1 ns ± 1.1 ns, 376 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          18:                        OK (2.57s)
            79.0 ns ± 492 ps, 376 B  allocated,   1 B  copied, 158 MB peak memory,  1% more than baseline
          19:                        OK (2.64s)
            80.9 ns ± 934 ps, 376 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          20:                        OK (2.90s)
            88.8 ns ± 568 ps, 376 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
        Empty:                       OK (3.63s)
          28.4 ns ± 184 ps, 222 B  allocated,   0 B  copied, 158 MB peak memory,  4% less than baseline
        Show
          1:                         OK (3.18s)
            12.3 ns ± 214 ps,  79 B  allocated,   0 B  copied, 158 MB peak memory,  4% more than baseline
          2:                         OK (2.12s)
            16.5 ns ± 148 ps, 119 B  allocated,   0 B  copied, 158 MB peak memory,  4% more than baseline
          3:                         OK (2.70s)
            21.1 ns ± 344 ps, 158 B  allocated,   0 B  copied, 158 MB peak memory,  3% more than baseline
          4:                         OK (1.68s)
            26.1 ns ± 418 ps, 197 B  allocated,   0 B  copied, 158 MB peak memory,  2% more than baseline
          5:                         OK (4.01s)
            31.4 ns ± 546 ps, 238 B  allocated,   0 B  copied, 158 MB peak memory,  3% more than baseline
          6:                         OK (2.50s)
            39.0 ns ± 282 ps, 277 B  allocated,   1 B  copied, 158 MB peak memory,  1% more than baseline
          7:                         OK (5.93s)
            46.5 ns ± 424 ps, 318 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          8:                         OK (1.81s)
            56.1 ns ± 926 ps, 352 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          9:                         OK (2.06s)
            64.2 ns ± 490 ps, 395 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          10:                        OK (2.30s)
            71.5 ns ± 1.2 ns, 432 B  allocated,   1 B  copied, 158 MB peak memory,       same as baseline
          11:                        OK (2.58s)
            80.1 ns ± 440 ps, 476 B  allocated,   2 B  copied, 158 MB peak memory,  1% less than baseline
          12:                        OK (2.97s)
            92.0 ns ± 1.5 ns, 519 B  allocated,   2 B  copied, 158 MB peak memory,       same as baseline
          13:                        OK (1.66s)
            102  ns ± 1.6 ns, 548 B  allocated,   2 B  copied, 158 MB peak memory,       same as baseline
          14:                        OK (3.67s)
            113  ns ± 1.2 ns, 597 B  allocated,   2 B  copied, 158 MB peak memory,       same as baseline
          15:                        OK (2.05s)
            126  ns ± 2.4 ns, 634 B  allocated,   2 B  copied, 158 MB peak memory,       same as baseline
          16:                        OK (2.22s)
            136  ns ± 2.6 ns, 675 B  allocated,   3 B  copied, 158 MB peak memory,       same as baseline
          17:                        OK (2.43s)
            149  ns ± 912 ps, 704 B  allocated,   3 B  copied, 158 MB peak memory,       same as baseline
          18:                        OK (2.61s)
            160  ns ± 2.9 ns, 750 B  allocated,   3 B  copied, 158 MB peak memory,       same as baseline
          19:                        OK (2.86s)
            176  ns ± 2.6 ns, 790 B  allocated,   3 B  copied, 158 MB peak memory,       same as baseline
  Concat
    append:                          OK (3.70s)
      56.1 ns ± 920 ps, 165 B  allocated,   0 B  copied, 158 MB peak memory,       same as baseline
    concat:                          OK (3.02s)
      185  ns ± 3.4 ns, 814 B  allocated,   4 B  copied, 158 MB peak memory,       same as baseline
    write:                           OK (3.74s)
      56.8 ns ± 776 ps, 165 B  allocated,   0 B  copied, 158 MB peak memory,  3% less than baseline
  DecodeUtf8
    html
      Strict:                        OK (4.18s)
        70.9 μs ± 565 ns, 301 KB allocated, 5.5 KB copied, 208 MB peak memory,  1% more than baseline
      Stream:                        OK (2.09s)
        70.9 μs ± 1.0 μs, 307 KB allocated, 5.6 KB copied, 208 MB peak memory,  1% less than baseline
      StrictLength:                  OK (3.21s)
        105  μs ± 567 ns, 301 KB allocated, 5.6 KB copied, 208 MB peak memory,  6% less than baseline
      StrictInitLength:              OK (6.36s)
        104  μs ± 441 ns, 301 KB allocated, 5.7 KB copied, 208 MB peak memory,  8% less than baseline
      Lazy:                          OK (4.18s)
        71.7 μs ± 646 ns, 307 KB allocated, 5.8 KB copied, 208 MB peak memory,       same as baseline
      LazyLength:                    OK (3.19s)
        105  μs ± 1.4 μs, 307 KB allocated, 5.9 KB copied, 208 MB peak memory,  8% less than baseline
      LazyInitLength:                OK (3.21s)
        106  μs ± 622 ns, 307 KB allocated, 5.9 KB copied, 208 MB peak memory,  7% less than baseline
    xml
      Strict:                        OK (9.24s)
        9.89 ms ±  67 μs,  48 MB allocated, 649 KB copied, 305 MB peak memory,  2% more than baseline
      Stream:                        OK (1.99s)
        22.6 ms ± 125 μs,  48 MB allocated, 1.0 MB copied, 419 MB peak memory,  6% more than baseline
      StrictLength:                  OK (7.94s)
        16.2 ms ± 121 μs,  48 MB allocated, 633 KB copied, 419 MB peak memory,  3% more than baseline
      StrictInitLength:              OK (4.04s)
        16.5 ms ± 201 μs,  48 MB allocated, 640 KB copied, 419 MB peak memory,  5% more than baseline
      Lazy:                          OK (1.99s)
        21.9 ms ± 347 μs,  48 MB allocated, 979 KB copied, 419 MB peak memory,  2% more than baseline
      LazyLength:                    OK (2.20s)
        18.6 ms ± 114 μs,  48 MB allocated, 926 KB copied, 419 MB peak memory,  8% less than baseline
      LazyInitLength:                OK (2.20s)
        18.6 ms ± 324 μs,  48 MB allocated, 938 KB copied, 419 MB peak memory,  7% less than baseline
    ascii
      Strict:                        OK (4.16s)
        8.78 ms ± 155 μs,  58 MB allocated, 639 KB copied, 443 MB peak memory,  3% more than baseline
      Stream:                        OK (2.26s)
        23.7 ms ± 457 μs,  58 MB allocated, 1.2 MB copied, 594 MB peak memory,       same as baseline
      StrictLength:                  OK (7.87s)
        16.0 ms ± 123 μs,  58 MB allocated, 624 KB copied, 594 MB peak memory, 11% more than baseline
      StrictInitLength:              OK (8.14s)
        16.5 ms ± 279 μs,  58 MB allocated, 630 KB copied, 594 MB peak memory, 14% more than baseline
      Lazy:                          OK (2.28s)
        23.6 ms ± 368 μs,  58 MB allocated, 1.2 MB copied, 594 MB peak memory, 22% more than baseline
      LazyLength:                    OK (2.41s)
        20.3 ms ± 295 μs,  58 MB allocated, 1.1 MB copied, 594 MB peak memory, 14% more than baseline
      LazyInitLength:                OK (4.83s)
        20.3 ms ± 168 μs,  59 MB allocated, 1.1 MB copied, 594 MB peak memory, 14% more than baseline
    russian
      Strict:                        OK (4.37s)
        1.17 ms ±  15 μs, 4.8 MB allocated,  88 KB copied, 594 MB peak memory, 39% more than baseline
      Stream:                        OK (1.13s)
        1.23 ms ±  16 μs, 4.9 MB allocated,  94 KB copied, 594 MB peak memory, 42% more than baseline
      StrictLength:                  OK (3.42s)
        1.76 ms ±  14 μs, 4.8 MB allocated,  88 KB copied, 594 MB peak memory, 17% more than baseline
      StrictInitLength:              OK (1.76s)
        1.79 ms ±  26 μs, 4.8 MB allocated,  89 KB copied, 594 MB peak memory, 18% more than baseline
      Lazy:                          OK (2.24s)
        1.21 ms ±  19 μs, 4.9 MB allocated,  96 KB copied, 594 MB peak memory, 37% more than baseline
      LazyLength:                    OK (1.67s)
        1.75 ms ±  30 μs, 4.9 MB allocated,  94 KB copied, 594 MB peak memory, 12% more than baseline
      LazyInitLength:                OK (3.34s)
        1.75 ms ±  28 μs, 4.9 MB allocated,  95 KB copied, 594 MB peak memory, 11% more than baseline
    japanese
      Strict:                        OK (0.73s)
        3.03 μs ±  58 ns,  12 KB allocated, 243 B  copied, 594 MB peak memory, 40% more than baseline
      Stream:                        OK (1.47s)
        3.09 μs ±  47 ns,  13 KB allocated, 249 B  copied, 594 MB peak memory, 30% more than baseline
      StrictLength:                  OK (2.14s)
        4.37 μs ±  86 ns,  12 KB allocated, 251 B  copied, 594 MB peak memory, 10% more than baseline
      StrictInitLength:              OK (2.14s)
        4.39 μs ±  50 ns,  12 KB allocated, 253 B  copied, 594 MB peak memory, 11% more than baseline
      Lazy:                          OK (1.47s)
        3.13 μs ±  43 ns,  13 KB allocated, 255 B  copied, 594 MB peak memory, 31% more than baseline
      LazyLength:                    OK (2.18s)
        4.51 μs ±  67 ns,  13 KB allocated, 258 B  copied, 594 MB peak memory, 10% more than baseline
      LazyInitLength:                OK (2.17s)
        4.50 μs ±  22 ns,  13 KB allocated, 260 B  copied, 594 MB peak memory,  8% more than baseline
    ascii
      strict decodeUtf8:             OK (8.13s)
        8.83 ms ±  36 μs,  58 MB allocated, 666 KB copied, 594 MB peak memory, 24% more than baseline
      strict decodeLatin1:           OK (8.87s)
        9.63 ms ±  69 μs, 115 MB allocated, 670 KB copied, 629 MB peak memory, 22% more than baseline
      strict decodeASCII:            OK (4.50s)
        9.72 ms ± 182 μs,  58 MB allocated, 674 KB copied, 629 MB peak memory, 23% more than baseline
      lazy decodeUtf8:               OK (2.29s)
        24.5 ms ± 267 μs,  58 MB allocated, 1.2 MB copied, 629 MB peak memory, 14% more than baseline
      lazy decodeLatin1:             OK (0.80s)
        39.5 ms ± 586 μs, 114 MB allocated, 2.3 MB copied, 629 MB peak memory, 31% more than baseline
      lazy decodeASCII:              OK (131.32s)
        21.4 ms ±  81 μs,  58 MB allocated, 102 KB copied, 629 MB peak memory, 11% more than baseline
  EncodeUtf8
    non-ASCII
      Text:                          OK (2.88s)
        370  μs ± 4.6 μs, 3.2 MB allocated, 2.5 KB copied, 629 MB peak memory,  9% less than baseline
      LazyText:                      OK (1.46s)
        390  μs ± 3.4 μs, 3.3 MB allocated, 3.7 KB copied, 629 MB peak memory,  2% more than baseline
      Text/encodeUtf8Builder:        OK (3.06s)
        407  μs ± 5.4 μs, 3.3 MB allocated, 5.2 KB copied, 629 MB peak memory,  5% less than baseline
      Text/encodeUtf8BuilderEscaped: OK (1.62s)
        1.63 ms ±  26 μs, 3.3 MB allocated, 6.4 KB copied, 629 MB peak memory,       same as baseline
    ASCII
      Text:                          OK (3.86s)
        129  μs ± 898 ns, 1.0 MB allocated, 2.3 KB copied, 629 MB peak memory,  1% more than baseline
      LazyText:                      OK (2.04s)
        140  μs ± 2.3 μs, 1.1 MB allocated, 2.7 KB copied, 629 MB peak memory,  2% more than baseline
      Text/encodeUtf8Builder:        OK (2.08s)
        143  μs ± 1.6 μs, 1.1 MB allocated, 3.2 KB copied, 629 MB peak memory,  2% more than baseline
      Text/encodeUtf8BuilderEscaped: OK (2.10s)
        530  μs ± 7.6 μs, 1.1 MB allocated, 3.6 KB copied, 629 MB peak memory,       same as baseline
  Equality
    Text:                            OK (2.37s)
      8.93 ns ±  52 ps,  31 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
    LazyText:                        OK (1.66s)
      12.5 ns ± 166 ps,  30 B  allocated,   0 B  copied, 629 MB peak memory,  6% less than baseline
  FileRead
    Text:                            OK (1.18s)
      19.0 ms ± 276 μs,  14 MB allocated,  76 KB copied, 629 MB peak memory,  1% more than baseline
    LazyText:                        OK (4.53s)
      17.9 ms ± 331 μs, 9.4 MB allocated,  22 KB copied, 629 MB peak memory,       same as baseline
    TextByteString:                  OK (5.01s)
      2.53 ms ±  44 μs, 9.7 MB allocated,  45 KB copied, 629 MB peak memory,       same as baseline
    LazyTextByteString:              OK (4.84s)
      2.50 ms ±  19 μs, 9.9 MB allocated,  52 KB copied, 629 MB peak memory,  5% less than baseline
  ReadLines
    Text:                            OK (0.85s)
      27.9 ms ± 366 μs,  29 MB allocated,  42 KB copied, 629 MB peak memory,  2% more than baseline
  Multilang
    find_first:                      OK (2.22s)
      17.6 ms ± 265 μs,  33 MB allocated,  49 KB copied, 629 MB peak memory,  3% less than baseline
    find_index:                      OK (2.87s)
      694  ns ± 4.1 ns, 3.2 KB allocated,   5 B  copied, 629 MB peak memory,  1% more than baseline
  Pure
    tiny
      append
        Text:                        OK (3.49s)
          26.3 ns ± 204 ps,  95 B  allocated,   0 B  copied, 629 MB peak memory,  1% more than baseline
        LazyText:                    OK (1.30s)
          19.6 ns ± 362 ps, 100 B  allocated,   0 B  copied, 629 MB peak memory,  6% more than baseline
      concat
        Text:                        OK (2.21s)
          16.6 ns ± 260 ps,  79 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (4.72s)
          17.9 ns ± 138 ps,  95 B  allocated,   0 B  copied, 629 MB peak memory,  1% more than baseline
      cons
        Text:                        OK (1.86s)
          56.3 ns ± 882 ps, 289 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (4.41s)
          16.7 ns ± 276 ps,  87 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      decode
        Text:                        OK (1.92s)
          28.9 ns ± 216 ps,  93 B  allocated,   0 B  copied, 629 MB peak memory, 10% more than baseline
        LazyText:                    OK (3.54s)
          108  ns ± 900 ps, 538 B  allocated,   1 B  copied, 629 MB peak memory, 27% less than baseline
      decode'
        Text:                        OK (1.33s)
          40.3 ns ± 734 ps, 150 B  allocated,   0 B  copied, 629 MB peak memory,  5% more than baseline
        LazyText:                    OK (4.26s)
          130  ns ± 636 ps, 637 B  allocated,   1 B  copied, 629 MB peak memory,  6% less than baseline
      drop
        Text:                        OK (2.37s)
          17.9 ns ± 312 ps,  63 B  allocated,   0 B  copied, 629 MB peak memory,  2% more than baseline
        LazyText:                    OK (3.04s)
          23.0 ns ± 202 ps,  69 B  allocated,   0 B  copied, 629 MB peak memory, 15% less than baseline
      encode
        Text:                        OK (4.78s)
          18.3 ns ±  90 ps, 103 B  allocated,   0 B  copied, 629 MB peak memory,  5% less than baseline
        LazyText:                    OK (4.81s)
          36.7 ns ± 624 ps, 174 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      filter
        Text:                        OK (2.04s)
          31.0 ns ± 572 ps, 110 B  allocated,   0 B  copied, 629 MB peak memory,  7% more than baseline
        LazyText:                    OK (2.00s)
          30.3 ns ± 488 ps,  85 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      filter.filter
        Text:                        OK (2.04s)
          31.0 ns ± 344 ps, 110 B  allocated,   0 B  copied, 629 MB peak memory,  6% more than baseline
        LazyText:                    OK (2.01s)
          30.4 ns ± 514 ps,  85 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      foldl'
        Text:                        OK (2.22s)
          34.5 ns ± 442 ps, 197 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (2.06s)
          64.1 ns ± 1.0 ns, 423 B  allocated,   1 B  copied, 629 MB peak memory,  3% more than baseline
      foldr
        Text:                        OK (2.20s)
          68.6 ns ± 1.1 ns, 417 B  allocated,   1 B  copied, 629 MB peak memory,  2% more than baseline
        LazyText:                    OK (1.74s)
          110  ns ± 1.4 ns, 717 B  allocated,   2 B  copied, 629 MB peak memory,  2% more than baseline
      head
        Text:                        OK (2.28s)
          8.84 ns ± 134 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (2.17s)
          17.1 ns ± 280 ps, 101 B  allocated,   0 B  copied, 629 MB peak memory,  3% more than baseline
      init
        Text:                        OK (4.22s)
          8.39 ns ±  32 ps,  55 B  allocated,   0 B  copied, 629 MB peak memory,  3% less than baseline
        LazyText:                    OK (0.84s)
          13.1 ns ± 206 ps,  60 B  allocated,   0 B  copied, 629 MB peak memory,  1% more than baseline
      intercalate
        Text:                        OK (3.40s)
          26.5 ns ± 346 ps, 126 B  allocated,   0 B  copied, 629 MB peak memory,  2% less than baseline
        LazyText:                    OK (5.66s)
          22.2 ns ± 138 ps, 110 B  allocated,   0 B  copied, 629 MB peak memory,  8% more than baseline
      intersperse
        Text:                        OK (5.80s)
          44.2 ns ± 284 ps,  95 B  allocated,   0 B  copied, 629 MB peak memory,  4% less than baseline
        LazyText:                    OK (4.14s)
          264  ns ± 2.0 ns, 1.4 KB allocated,   5 B  copied, 629 MB peak memory,  2% more than baseline
      isInfixOf
        Text:                        OK (3.23s)
          102  ns ± 1.7 ns, 480 B  allocated,   1 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (2.67s)
          85.7 ns ± 784 ps, 491 B  allocated,   1 B  copied, 629 MB peak memory,  3% more than baseline
      last
        Text:                        OK (3.52s)
          7.06 ns ±  82 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (2.28s)
          9.03 ns ±  82 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory,  4% more than baseline
      map
        Text:                        OK (2.69s)
          41.7 ns ± 412 ps, 125 B  allocated,   0 B  copied, 629 MB peak memory,  2% more than baseline
        LazyText:                    OK (1.67s)
          51.8 ns ± 570 ps, 159 B  allocated,   0 B  copied, 629 MB peak memory,  3% more than baseline
      mapAccumL
        Text:                        OK (2.81s)
          43.8 ns ± 632 ps, 151 B  allocated,   0 B  copied, 629 MB peak memory,  3% more than baseline
        LazyText:                    OK (2.92s)
          93.1 ns ± 350 ps, 421 B  allocated,   1 B  copied, 629 MB peak memory,  2% more than baseline
      mapAccumR
        Text:                        OK (2.58s)
          40.5 ns ± 630 ps, 151 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (2.53s)
          80.9 ns ± 1.2 ns, 392 B  allocated,   1 B  copied, 629 MB peak memory,  3% more than baseline
      map.map
        Text:                        OK (2.75s)
          42.7 ns ± 666 ps, 125 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (1.69s)
          52.6 ns ± 722 ps, 159 B  allocated,   0 B  copied, 629 MB peak memory,  4% more than baseline
      replicate char
        Text:                        OK (1.36s)
          41.8 ns ± 824 ps,  92 B  allocated,   0 B  copied, 629 MB peak memory,  5% more than baseline
        LazyText:                    OK (2.49s)
          77.9 ns ± 1.5 ns, 243 B  allocated,   1 B  copied, 629 MB peak memory,       same as baseline
      replicate string
        Text:                        OK (2.62s)
          10.2 ns ± 200 ps,  31 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (3.17s)
          50.8 ns ± 192 ps, 214 B  allocated,   1 B  copied, 629 MB peak memory,  3% more than baseline
      reverse
        Text:                        OK (4.84s)
          19.4 ns ±  70 ps,  87 B  allocated,   0 B  copied, 629 MB peak memory, 11% more than baseline
        LazyText:                    OK (3.87s)
          30.9 ns ± 378 ps, 134 B  allocated,   0 B  copied, 629 MB peak memory,  7% more than baseline
      take
        Text:                        OK (4.23s)
          16.8 ns ± 290 ps,  63 B  allocated,   0 B  copied, 629 MB peak memory,  9% less than baseline
        LazyText:                    OK (2.73s)
          21.5 ns ± 288 ps,  71 B  allocated,   0 B  copied, 629 MB peak memory, 11% less than baseline
      tail
        Text:                        OK (2.97s)
          12.1 ns ± 124 ps,  63 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (6.20s)
          12.6 ns ±  38 ps,  63 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      toLower
        Text:                        OK (5.02s)
          39.6 ns ±  90 ps, 142 B  allocated,   0 B  copied, 629 MB peak memory, 75% less than baseline
        LazyText:                    OK (3.39s)
          53.1 ns ± 626 ps, 172 B  allocated,   0 B  copied, 629 MB peak memory, 75% less than baseline
      toUpper
        Text:                        OK (2.55s)
          40.2 ns ± 178 ps, 140 B  allocated,   0 B  copied, 629 MB peak memory, 78% less than baseline
        LazyText:                    OK (3.27s)
          51.6 ns ± 412 ps, 172 B  allocated,   0 B  copied, 629 MB peak memory, 78% less than baseline
      uncons
        Text:                        OK (1.14s)
          18.7 ns ± 202 ps, 109 B  allocated,   0 B  copied, 629 MB peak memory,  4% more than baseline
        LazyText:                    OK (2.34s)
          37.9 ns ± 744 ps, 197 B  allocated,   1 B  copied, 629 MB peak memory,  3% more than baseline
      words
        Text:                        OK (3.06s)
          24.6 ns ±  90 ps, 109 B  allocated,   0 B  copied, 629 MB peak memory,  2% more than baseline
        LazyText:                    OK (4.63s)
          73.3 ns ± 624 ps, 275 B  allocated,   1 B  copied, 629 MB peak memory,  9% more than baseline
      zipWith
        Text:                        OK (2.09s)
          133  ns ± 2.6 ns, 578 B  allocated,   3 B  copied, 629 MB peak memory,  3% less than baseline
        LazyText:                    OK (2.29s)
          296  ns ± 4.2 ns, 1.5 KB allocated,   8 B  copied, 629 MB peak memory,  2% more than baseline
      length
        cons
          Text:                      OK (4.78s)
            18.3 ns ± 236 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory, 11% less than baseline
          LazyText:                  OK (5.43s)
            20.7 ns ± 248 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory,  6% less than baseline
        decode
          Text:                      OK (5.29s)
            41.0 ns ± 220 ps, 109 B  allocated,   0 B  copied, 629 MB peak memory, 12% more than baseline
          LazyText:                  OK (3.98s)
            127  ns ± 1.2 ns, 552 B  allocated,   3 B  copied, 629 MB peak memory, 23% less than baseline
        drop
          Text:                      OK (3.18s)
            24.2 ns ± 438 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory, 13% less than baseline
          LazyText:                  OK (56.30s)
            27.0 ns ± 122 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory, 10% less than baseline
        filter
          Text:                      OK (1.38s)
            21.0 ns ± 300 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  3% more than baseline
          LazyText:                  OK (4.08s)
            31.7 ns ± 418 ps,  94 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        filter.filter
          Text:                      OK (2.71s)
            20.7 ns ± 402 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
          LazyText:                  OK (4.11s)
            31.9 ns ± 354 ps,  94 B  allocated,   0 B  copied, 629 MB peak memory,  2% more than baseline
        init
          Text:                      OK (4.75s)
            18.4 ns ±  54 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory, 10% less than baseline
          LazyText:                  OK (3.34s)
            26.0 ns ± 494 ps,  86 B  allocated,   0 B  copied, 629 MB peak memory,  4% less than baseline
        intercalate
          Text:                      OK (1.46s)
            22.1 ns ± 296 ps,  38 B  allocated,   0 B  copied, 629 MB peak memory,  4% less than baseline
          LazyText:                  OK (3.07s)
            23.2 ns ± 444 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory,  5% less than baseline
        intersperse
          Text:                      OK (1.43s)
            21.6 ns ± 424 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  4% less than baseline
          LazyText:                  OK (2.93s)
            22.3 ns ± 432 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  6% less than baseline
        map
          Text:                      OK (10.17s)
            19.6 ns ±  72 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory, 10% less than baseline
          LazyText:                  OK (2.84s)
            21.7 ns ± 408 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  7% less than baseline
        map.map
          Text:                      OK (5.14s)
            19.7 ns ±  62 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory,  9% less than baseline
          LazyText:                  OK (2.85s)
            21.7 ns ± 392 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  7% less than baseline
        replicate char
          Text:                      OK (1.52s)
            22.9 ns ± 444 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  4% less than baseline
          LazyText:                  OK (4.43s)
            17.0 ns ± 246 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory,  8% less than baseline
        replicate string
          Text:                      OK (3.10s)
            23.4 ns ± 448 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  9% less than baseline
          LazyText:                  OK (2.58s)
            19.7 ns ± 264 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  6% less than baseline
        take
          Text:                      OK (5.45s)
            20.7 ns ± 334 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory, 14% less than baseline
          LazyText:                  OK (7.25s)
            28.0 ns ± 246 ps,  87 B  allocated,   0 B  copied, 629 MB peak memory, 12% less than baseline
        tail
          Text:                      OK (2.76s)
            21.0 ns ± 386 ps,  46 B  allocated,   0 B  copied, 629 MB peak memory,  9% less than baseline
          LazyText:                  OK (6.13s)
            23.4 ns ±  56 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory,  5% less than baseline
        toLower
          Text:                      OK (3.20s)
            49.0 ns ± 162 ps, 125 B  allocated,   0 B  copied, 629 MB peak memory, 66% less than baseline
          LazyText:                  OK (4.02s)
            62.0 ns ± 634 ps, 189 B  allocated,   1 B  copied, 629 MB peak memory, 72% less than baseline
        toUpper
          Text:                      OK (3.24s)
            49.4 ns ± 628 ps, 125 B  allocated,   0 B  copied, 629 MB peak memory, 71% less than baseline
          LazyText:                  OK (4.11s)
            63.5 ns ± 212 ps, 189 B  allocated,   1 B  copied, 629 MB peak memory, 74% less than baseline
        words
          Text:                      OK (3.45s)
            27.3 ns ± 258 ps, 134 B  allocated,   0 B  copied, 629 MB peak memory,  1% more than baseline
          LazyText:                  OK (3.47s)
            54.3 ns ± 838 ps, 238 B  allocated,   1 B  copied, 629 MB peak memory, 10% more than baseline
        zipWith
          Text:                      OK (5.31s)
            20.0 ns ± 390 ps,  31 B  allocated,   0 B  copied, 629 MB peak memory, 11% less than baseline
          LazyText:                  OK (5.77s)
            21.7 ns ± 140 ps,  31 B  allocated,   0 B  copied, 629 MB peak memory,  9% less than baseline
      Builder
        mappend char:                OK (3.77s)
          14.6 μs ± 165 ns,  25 KB allocated, 168 B  copied, 629 MB peak memory,  2% less than baseline
        mappend 8 char:              OK (1.96s)
          61.3 ns ± 456 ps, 285 B  allocated,   1 B  copied, 629 MB peak memory,  5% less than baseline
        mappend text:                OK (3.82s)
          59.6 μs ± 397 ns, 132 KB allocated, 892 B  copied, 629 MB peak memory,  5% less than baseline
    ascii-small
      append
        Text:                        OK (3.22s)
          30.4 μs ± 403 ns, 137 KB allocated, 3.2 KB copied, 629 MB peak memory,  9% more than baseline
        LazyText:                    OK (4.16s)
          66.3 ns ± 406 ps, 389 B  allocated,   2 B  copied, 629 MB peak memory,  2% more than baseline
      concat
        Text:                        OK (4.12s)
          34.1 μs ± 382 ns, 161 KB allocated, 1.6 KB copied, 629 MB peak memory,  4% more than baseline
        LazyText:                    OK (4.12s)
          8.27 μs ± 132 ns,  38 KB allocated, 261 B  copied, 629 MB peak memory,  2% more than baseline
      cons
        Text:                        OK (4.14s)
          530  μs ± 7.0 μs, 2.2 MB allocated,  14 KB copied, 629 MB peak memory,  1% more than baseline
        LazyText:                    OK (5.44s)
          21.1 ns ± 186 ps,  87 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      decode
        Text:                        OK (6.78s)
          15.7 μs ± 259 ns,  68 KB allocated, 1.6 KB copied, 629 MB peak memory,  7% more than baseline
        LazyText:                    OK (3.71s)
          16.9 μs ±  96 ns,  71 KB allocated, 1.6 KB copied, 629 MB peak memory,  3% more than baseline
      decode'
        Text:                        OK (3.45s)
          15.9 μs ± 246 ns,  68 KB allocated, 1.7 KB copied, 629 MB peak memory,  7% more than baseline
        LazyText:                    OK (1.89s)
          17.2 μs ±  99 ns,  70 KB allocated, 1.7 KB copied, 629 MB peak memory,  2% more than baseline
      drop
        Text:                        OK (2.65s)
          2.50 μs ±  46 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory,  8% less than baseline
        LazyText:                    OK (2.69s)
          2.54 μs ±  33 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 18% less than baseline
      encode
        Text:                        OK (3.34s)
          15.6 μs ± 211 ns,  68 KB allocated, 1.7 KB copied, 629 MB peak memory,  5% more than baseline
        LazyText:                    OK (3.52s)
          16.3 μs ± 190 ns,  69 KB allocated, 1.7 KB copied, 629 MB peak memory,  5% more than baseline
      filter
        Text:                        OK (2.64s)
          161  μs ± 870 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory,  1% more than baseline
        LazyText:                    OK (5.23s)
          159  μs ± 619 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      filter.filter
        Text:                        OK (5.25s)
          159  μs ± 1.5 μs,   0 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (2.64s)
          160  μs ± 3.0 μs,   0 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      foldl'
        Text:                        OK (6.28s)
          409  μs ± 5.1 μs, 2.1 MB allocated,  15 KB copied, 629 MB peak memory,  2% more than baseline
        LazyText:                    OK (6.23s)
          819  μs ± 2.6 μs, 4.8 MB allocated,  34 KB copied, 629 MB peak memory,  2% more than baseline
      foldr
        Text:                        OK (3.50s)
          912  μs ±  18 μs, 4.8 MB allocated,  34 KB copied, 629 MB peak memory,  3% more than baseline
        LazyText:                    OK (5.91s)
          1.55 ms ±  15 μs, 9.0 MB allocated,  64 KB copied, 629 MB peak memory,  2% more than baseline
      head
        Text:                        OK (4.88s)
          9.46 ns ±  84 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory,  1% more than baseline
        LazyText:                    OK (2.41s)
          18.8 ns ± 344 ps, 101 B  allocated,   0 B  copied, 629 MB peak memory,  3% more than baseline
      init
        Text:                        OK (2.39s)
          9.40 ns ± 108 ps,  54 B  allocated,   0 B  copied, 629 MB peak memory,  2% less than baseline
        LazyText:                    OK (4.35s)
          68.8 ns ± 504 ps, 413 B  allocated,   2 B  copied, 629 MB peak memory,  2% more than baseline
      intercalate
        Text:                        OK (5.37s)
          85.1 μs ± 909 ns, 404 KB allocated, 2.3 KB copied, 629 MB peak memory,  1% more than baseline
        LazyText:                    OK (2.05s)
          32.9 μs ± 566 ns, 175 KB allocated, 1.3 KB copied, 629 MB peak memory,  3% more than baseline
      intersperse
        Text:                        OK (3.61s)
          227  μs ± 3.7 μs, 204 KB allocated, 5.1 KB copied, 629 MB peak memory,  4% less than baseline
        LazyText:                    OK (5.36s)
          2.79 ms ± 8.2 μs,  15 MB allocated, 103 KB copied, 629 MB peak memory,  1% more than baseline
      isInfixOf
        Text:                        OK (3.72s)
          891  ns ±  11 ns, 1.2 KB allocated,   8 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (2.40s)
          2.26 μs ±  29 ns, 640 B  allocated,   4 B  copied, 629 MB peak memory,  5% less than baseline
      last
        Text:                        OK (3.90s)
          7.62 ns ±  74 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory,  2% more than baseline
        LazyText:                    OK (3.86s)
          14.6 ns ± 220 ps,  39 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
      map
        Text:                        OK (4.89s)
          299  μs ± 3.6 μs,  67 KB allocated, 1.7 KB copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (4.88s)
          299  μs ± 2.7 μs,  68 KB allocated, 1.7 KB copied, 629 MB peak memory,       same as baseline
      mapAccumL
        Text:                        OK (6.14s)
          1.72 ms ± 7.5 μs, 5.8 MB allocated, 149 KB copied, 629 MB peak memory,  3% more than baseline
        LazyText:                    OK (2.32s)
          1.29 ms ± 8.1 μs, 3.9 MB allocated, 100 KB copied, 629 MB peak memory,  3% more than baseline
      mapAccumR
        Text:                        OK (3.13s)
          1.75 ms ± 9.8 μs, 6.0 MB allocated, 154 KB copied, 629 MB peak memory,  4% more than baseline
        LazyText:                    OK (4.68s)
          1.30 ms ± 4.0 μs, 4.2 MB allocated, 108 KB copied, 629 MB peak memory,  2% more than baseline
      map.map
        Text:                        OK (5.18s)
          317  μs ± 3.1 μs,  67 KB allocated, 1.7 KB copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (5.19s)
          318  μs ± 2.1 μs,  68 KB allocated, 1.7 KB copied, 629 MB peak memory,       same as baseline
      replicate char
        Text:                        OK (3.51s)
          32.1 μs ± 294 ns, 137 KB allocated, 3.4 KB copied, 629 MB peak memory,  4% more than baseline
        LazyText:                    OK (2.94s)
          6.59 μs ±  87 ns,  27 KB allocated, 637 B  copied, 629 MB peak memory,  3% more than baseline
      replicate string
        Text:                        OK (3.52s)
          32.4 μs ± 220 ns, 137 KB allocated, 3.4 KB copied, 629 MB peak memory,  4% more than baseline
        LazyText:                    OK (1.46s)
          6.54 μs ± 126 ns,  26 KB allocated, 636 B  copied, 629 MB peak memory,  4% more than baseline
      reverse
        Text:                        OK (2.75s)
          44.4 μs ± 726 ns,  68 KB allocated, 1.7 KB copied, 629 MB peak memory, 30% more than baseline
        LazyText:                    OK (5.53s)
          44.9 μs ± 130 ns,  68 KB allocated, 1.7 KB copied, 629 MB peak memory, 29% more than baseline
      take
        Text:                        OK (5.24s)
          2.48 μs ±  41 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory,  8% less than baseline
        LazyText:                    OK (5.32s)
          2.52 μs ±  16 ns,  91 B  allocated,   0 B  copied, 629 MB peak memory, 24% less than baseline
      tail
        Text:                        OK (6.51s)
          12.7 ns ±  70 ps,  63 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (4.04s)
          15.6 ns ± 130 ps,  63 B  allocated,   0 B  copied, 629 MB peak memory,  1% less than baseline
      toLower
        Text:                        OK (3.54s)
          217  μs ± 3.4 μs,  67 KB allocated, 1.7 KB copied, 629 MB peak memory, 87% less than baseline
        LazyText:                    OK (3.55s)
          218  μs ± 4.2 μs,  68 KB allocated, 1.7 KB copied, 629 MB peak memory, 89% less than baseline
      toUpper
        Text:                        OK (8.17s)
          251  μs ± 741 ns,  68 KB allocated, 1.7 KB copied, 629 MB peak memory, 88% less than baseline
        LazyText:                    OK (4.21s)
          258  μs ± 1.8 μs,  68 KB allocated, 1.7 KB copied, 629 MB peak memory, 90% less than baseline
      uncons
        Text:                        OK (4.77s)
          18.7 ns ±  80 ps, 111 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (6.29s)
          24.4 ns ± 126 ps, 119 B  allocated,   0 B  copied, 629 MB peak memory,  3% more than baseline
      words
        Text:                        OK (4.34s)
          275  μs ± 2.7 μs, 974 KB allocated, 9.3 KB copied, 629 MB peak memory,  1% more than baseline
        LazyText:                    OK (3.90s)
          993  μs ± 3.4 μs, 3.7 MB allocated,  38 KB copied, 629 MB peak memory,       same as baseline
      zipWith
        Text:                        OK (5.88s)
          1.49 ms ± 8.8 μs, 5.9 MB allocated,  41 KB copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (6.16s)
          3.16 ms ±  14 μs,  17 MB allocated, 119 KB copied, 629 MB peak memory,       same as baseline
      length
        cons
          Text:                      OK (3.91s)
            7.39 μs ±  98 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
          LazyText:                  OK (3.94s)
            7.45 μs ±  75 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
        decode
          Text:                      OK (2.82s)
            23.5 μs ± 447 ns,  68 KB allocated, 1.7 KB copied, 629 MB peak memory,  4% less than baseline
          LazyText:                  OK (2.92s)
            24.5 μs ± 114 ns,  70 KB allocated, 1.7 KB copied, 629 MB peak memory,  7% less than baseline
        drop
          Text:                      OK (3.94s)
            7.45 μs ±  77 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 19% less than baseline
          LazyText:                  OK (7.88s)
            7.48 μs ±  41 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
        filter
          Text:                      OK (2.46s)
            149  μs ± 1.8 μs,   0 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
          LazyText:                  OK (2.65s)
            160  μs ± 2.2 μs,   0 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        filter.filter
          Text:                      OK (2.47s)
            150  μs ± 782 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
          LazyText:                  OK (5.25s)
            159  μs ± 1.1 μs,   0 B  allocated,   0 B  copied, 629 MB peak memory,       same as baseline
        init
          Text:                      OK (7.77s)
            7.37 μs ±  35 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
          LazyText:                  OK (2.03s)
            7.64 μs ±  59 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 17% less than baseline
        intercalate
          Text:                      OK (4.02s)
            15.2 μs ± 137 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 18% less than baseline
          LazyText:                  OK (8.30s)
            15.8 μs ±  26 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 16% less than baseline
        intersperse
          Text:                      OK (1.99s)
            7.49 μs ±  98 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 18% less than baseline
          LazyText:                  OK (3.93s)
            7.41 μs ± 132 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
        map
          Text:                      OK (7.77s)
            7.36 μs ±  61 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
          LazyText:                  OK (3.94s)
            7.43 μs ±  65 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
        map.map
          Text:                      OK (3.91s)
            7.38 μs ± 109 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 19% less than baseline
          LazyText:                  OK (3.96s)
            7.45 μs ± 133 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 19% less than baseline
        replicate char
          Text:                      OK (5.98s)
            22.5 ns ± 186 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory,  8% less than baseline
          LazyText:                  OK (4.55s)
            17.1 ns ± 178 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory,  9% less than baseline
        replicate string
          Text:                      OK (6.31s)
            23.7 ns ±  56 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory, 10% less than baseline
          LazyText:                  OK (5.25s)
            19.8 ns ± 162 ps,  47 B  allocated,   0 B  copied, 629 MB peak memory,  8% less than baseline
        take
          Text:                      OK (5.22s)
            4.95 μs ±  63 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 19% less than baseline
          LazyText:                  OK (5.28s)
            5.00 μs ±  20 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 19% less than baseline
        tail
          Text:                      OK (3.94s)
            7.45 μs ±  88 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 19% less than baseline
          LazyText:                  OK (3.96s)
            7.47 μs ± 137 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
        toLower
          Text:                      OK (7.25s)
            222  μs ± 676 ns,  68 KB allocated, 1.6 KB copied, 629 MB peak memory, 85% less than baseline
          LazyText:                  OK (3.66s)
            225  μs ± 2.7 μs,  68 KB allocated, 1.6 KB copied, 629 MB peak memory, 88% less than baseline
        toUpper
          Text:                      OK (8.41s)
            258  μs ± 2.2 μs,  68 KB allocated, 1.6 KB copied, 629 MB peak memory, 87% less than baseline
          LazyText:                  OK (8.38s)
            257  μs ± 2.0 μs,  69 KB allocated, 1.6 KB copied, 629 MB peak memory, 89% less than baseline
        words
          Text:                      OK (4.15s)
            263  μs ± 1.4 μs, 974 KB allocated, 6.4 KB copied, 629 MB peak memory,       same as baseline
          LazyText:                  OK (3.00s)
            762  μs ±  15 μs, 3.1 MB allocated,  21 KB copied, 629 MB peak memory,       same as baseline
        zipWith
          Text:                      OK (7.76s)
            7.37 μs ±  77 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 19% less than baseline
          LazyText:                  OK (3.93s)
            7.44 μs ±  54 ns,   0 B  allocated,   0 B  copied, 629 MB peak memory, 20% less than baseline
      Builder
        mappend char:                OK (3.81s)
          14.7 μs ± 251 ns,  25 KB allocated, 167 B  copied, 629 MB peak memory,  3% less than baseline
        mappend 8 char:              OK (7.85s)
          61.0 ns ± 194 ps, 286 B  allocated,   1 B  copied, 629 MB peak memory,  6% less than baseline
        mappend text:                OK (3.88s)
          60.2 μs ± 779 ns, 132 KB allocated, 878 B  copied, 629 MB peak memory,  5% less than baseline
    ascii
      append
        Text:                        OK (20.51s)
          11.1 ms ±  57 μs, 115 MB allocated, 761 KB copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (24.40s)
          49.6 μs ± 750 ns, 259 KB allocated, 1.8 KB copied, 629 MB peak memory,  4% more than baseline
      concat
        Text:                        OK (33.18s)
          33.8 ms ± 268 μs, 136 MB allocated, 1.0 MB copied, 629 MB peak memory,       same as baseline
        LazyText:                    OK (18.96s)
          10.4 ms ± 191 μs,  32 MB allocated, 2.9 MB copied, 629 MB peak memory,  4% more than baseline
      cons
        Text:                        OK (13.93s)
          494  ms ± 5.4 ms, 1.8 GB allocated,  12 MB copied, 855 MB peak memory,  1% more than baseline
        LazyText:                    OK (20.68s)
          4.96 μs ±  72 ns,  46 B  allocated,   0 B  copied, 855 MB peak memory,  4% less than baseline
      decode
        Text:                        OK (19.27s)
          10.4 ms ± 156 μs,  58 MB allocated, 744 KB copied, 855 MB peak memory,  3% more than baseline
        LazyText:                    OK (5.12s)
          31.4 ms ± 603 μs,  59 MB allocated, 1.4 MB copied, 1.4 GB peak memory,       same as baseline
      decode'
        Text:                        OK (19.18s)
          10.3 ms ± 167 μs,  58 MB allocated, 718 KB copied, 1.4 GB peak memory,  2% more than baseline
        LazyText:                    OK (5.16s)
          31.4 ms ± 261 μs,  59 MB allocated, 1.4 MB copied, 1.4 GB peak memory,       same as baseline
      drop
        Text:                        OK (20.71s)
          2.54 ms ±  32 μs,   0 B  allocated,   0 B  copied, 1.4 GB peak memory,  1% more than baseline
        LazyText:                    OK (21.27s)
          2.61 ms ±  29 μs,   0 B  allocated,   0 B  copied, 1.4 GB peak memory,  8% less than baseline
      encode
        Text:                        OK (13.82s)
          7.62 ms ± 103 μs,  58 MB allocated, 694 KB copied, 1.4 GB peak memory,  2% more than baseline
        LazyText:                    OK (0.60s)
          30.7 ms ± 460 μs,  56 MB allocated, 1.4 MB copied, 1.4 GB peak memory,       same as baseline
      filter
        Text:                        OK (34.81s)
          137  ms ± 1.1 ms,   0 B  allocated,   0 B  copied, 1.4 GB peak memory,       same as baseline
        LazyText:                    OK (17.41s)
          138  ms ± 2.3 ms,   0 B  allocated,   0 B  copied, 1.4 GB peak memory,       same as baseline
      filter.filter
        Text:                        OK (34.85s)
          137  ms ± 696 μs,   0 B  allocated,   0 B  copied, 1.4 GB peak memory,       same as baseline
        LazyText:                    OK (17.38s)
          138  ms ± 1.4 ms,   0 B  allocated,   0 B  copied, 1.4 GB peak memory,       same as baseline
      foldl'
        Text:                        OK (21.17s)
          353  ms ± 5.0 ms, 1.8 GB allocated,  11 MB copied, 1.4 GB peak memory,  1% more than baseline
        LazyText:                    OK (20.66s)
          703  ms ±  13 ms, 4.0 GB allocated,  24 MB copied, 1.4 GB peak memory,       same as baseline
      foldr
        Text:                        OK (11.18s)
          789  ms ±  12 ms, 4.0 GB allocated,  25 MB copied, 1.4 GB peak memory,  3% more than baseline
        LazyText:                    OK (18.94s)
          1.333 s ±  16 ms, 7.6 GB allocated,  46 MB copied, 1.4 GB peak memory,  1% more than baseline
      head
        Text:                        OK (19.64s)
          9.47 ns ± 166 ps,  39 B  allocated,   0 B  copied, 1.4 GB peak memory,       same as baseline
        LazyText:                    OK (19.03s)
          18.6 ns ± 224 ps, 103 B  allocated,   0 B  copied, 1.4 GB peak memory,  1% more than baseline
      init
        Text:                        OK (18.91s)
          9.26 ns ± 152 ps,  55 B  allocated,   0 B  copied, 1.4 GB peak memory,  4% less than baseline
        LazyText:                    OK (12.96s)
          52.4 μs ± 909 ns, 317 KB allocated, 2.1 KB copied, 1.4 GB peak memory,  2% more than baseline
      intercalate
        Text:                        OK (9.17s)
          199  ms ± 3.8 ms, 340 MB allocated,  41 MB copied, 1.4 GB peak memory,  2% less than baseline
        LazyText:                    OK (3.28s)
          70.0 ms ± 281 μs, 147 MB allocated,  36 MB copied, 1.4 GB peak memory,  8% less than baseline
      intersperse
        Text:                        OK (44.34s)
          175  ms ± 2.2 ms, 173 MB allocated, 682 KB copied, 1.4 GB peak memory,  4% less than baseline
        LazyText:                    OK (16.22s)
          2.531 s ±  19 ms,  12 GB allocated,  73 MB copied, 1.4 GB peak memory,  2% more than baseline
      isInfixOf
        Text:                        OK (39.14s)
          2.40 ms ±  17 μs,   0 B  allocated,   0 B  copied, 1.4 GB peak memory,  3% more than baseline
        LazyText:                    OK (24.48s)
          3.01 ms ±  39 μs,  58 KB allocated, 338 B  copied, 1.4 GB peak memory,  1% more than baseline
      last
        Text:                        OK (15.52s)
          7.53 ns ± 124 ps,  39 B  allocated,   0 B  copied, 1.4 GB peak memory,  1% more than baseline
        LazyText:                    OK (23.55s)
          5.65 μs ±  61 ns,   0 B  allocated,   0 B  copied, 1.4 GB peak memory,       same as baseline
      map
        Text:                        OK (32.10s)
          254  ms ± 2.9 ms,  58 MB allocated, 679 KB copied, 1.4 GB peak memory,       same as baseline
        LazyText:                    OK (16.45s)
          296  ms ± 4.0 ms,  57 MB allocated, 1.3 MB copied, 1.4 GB peak memory,       same as baseline
      mapAccumL
        Text:                        OK (19.51s)
          1.437 s ±  17 ms,  12 GB allocated,  37 MB copied, 1.5 GB peak memory,       same as baseline
        LazyText:                    OK (22.19s)
          1.840 s ± 1.6 ms, 5.9 GB allocated, 118 MB copied, 1.5 GB peak memory,  2% more than baseline
      mapAccumR
        Text:                        OK (17.86s)
          1.315 s ±  26 ms,  12 GB allocated,  35 MB copied, 1.7 GB peak memory,       same as baseline
        LazyText:                    OK (20.93s)
          1.763 s ± 9.1 ms, 6.1 GB allocated, 116 MB copied, 1.7 GB peak memory,  3% more than baseline
      map.map
        Text:                        OK (33.80s)
          268  ms ± 1.8 ms,  58 MB allocated, 599 KB copied, 1.7 GB peak memory,       same as baseline
        LazyText:                    OK (17.31s)
          310  ms ± 3.6 ms,  57 MB allocated, 1.2 MB copied, 1.7 GB peak memory,       same as baseline
      replicate char
        Text:                        OK (22.54s)
          12.1 ms ± 196 μs, 115 MB allocated, 579 KB copied, 1.7 GB peak memory,       same as baseline
        LazyText:                    OK (33.86s)
          276  μs ± 1.4 μs, 1.4 MB allocated, 8.8 KB copied, 1.7 GB peak memory,       same as baseline
      replicate string
        Text:                        OK (23.52s)
          12.7 ms ± 131 μs, 115 MB allocated, 578 KB copied, 1.7 GB peak memory,       same as baseline
        LazyText:                    OK (16.84s)
          277  μs ± 3.9 μs, 1.4 MB allocated, 8.9 KB copied, 1.7 GB peak memory,       same as baseline
      reverse
        Text:                        OK (16.26s)
          33.4 ms ± 665 μs,  58 MB allocated, 581 KB copied, 1.7 GB peak memory, 34% more than baseline
        LazyText:                    OK (20.86s)
          60.3 ms ± 1.2 ms,  58 MB allocated, 1.2 MB copied, 1.7 GB peak memory, 23% more than baseline
      take
        Text:                        OK (10.44s)
          2.59 ms ±  25 μs,   0 B  allocated,   0 B  copied, 1.7 GB peak memory,  3% more than baseline
        LazyText:                    OK (21.40s)
          2.63 ms ± 6.6 μs,  81 KB allocated, 359 B  copied, 1.7 GB peak memory,  7% less than baseline
      tail
        Text:                        OK (24.37s)
          12.1 ns ±  98 ps,  63 B  allocated,   0 B  copied, 1.7 GB peak memory,       same as baseline
        LazyText:                    OK (20.63s)
          4.96 μs ±  67 ns,  46 B  allocated,   0 B  copied, 1.7 GB peak memory,  4% less than baseline
      toLower
        Text:                        OK (45.70s)
          181  ms ± 328 μs,  58 MB allocated, 492 KB copied, 1.7 GB peak memory, 87% less than baseline
        LazyText:                    OK (23.71s)
          221  ms ± 1.9 ms,  58 MB allocated, 992 KB copied, 1.7 GB peak memory, 87% less than baseline
      toUpper
        Text:                        OK (27.55s)
          219  ms ± 3.1 ms,  58 MB allocated, 454 KB copied, 1.7 GB peak memory, 88% less than baseline
        LazyText:                    OK (14.39s)
          265  ms ± 3.5 ms,  57 MB allocated, 945 KB copied, 1.7 GB peak memory, 88% less than baseline
      uncons
        Text:                        OK (17.30s)
          17.6 ns ± 290 ps, 111 B  allocated,   0 B  copied, 1.7 GB peak memory,  3% less than baseline
        LazyText:                    OK (20.76s)
          4.99 μs ±  51 ns, 115 B  allocated,   0 B  copied, 1.7 GB peak memory,  3% less than baseline
      words
        Text:                        OK (21.78s)
          938  ms ± 4.8 ms, 822 MB allocated, 566 MB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (99.63s)
          2.050 s ± 6.3 ms, 3.1 GB allocated, 625 MB copied, 4.1 GB peak memory,       same as baseline
      zipWith
        Text:                        OK (17.28s)
          1.238 s ± 3.5 ms, 5.0 GB allocated,  17 MB copied, 4.1 GB peak memory,  1% less than baseline
        LazyText:                    OK (7.17s)
          2.635 s ±  41 ms,  14 GB allocated,  49 MB copied, 4.1 GB peak memory,       same as baseline
      length
        cons
          Text:                      OK (64.10s)
            7.84 ms ±  71 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% more than baseline
          LazyText:                  OK (8.23s)
            8.21 ms ± 118 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  5% less than baseline
        decode
          Text:                      OK (31.62s)
            16.8 ms ± 153 μs,  58 MB allocated, 391 KB copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (18.61s)
            20.7 ms ± 305 μs,  59 MB allocated, 710 KB copied, 4.1 GB peak memory, 11% less than baseline
        drop
          Text:                      OK (31.98s)
            7.85 ms ±  61 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (16.32s)
            8.07 ms ±  94 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  5% less than baseline
        filter
          Text:                      OK (32.40s)
            128  ms ± 1.4 ms,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (34.72s)
            137  ms ± 793 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        filter.filter
          Text:                      OK (16.16s)
            129  ms ± 2.4 ms,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (17.32s)
            138  ms ± 2.6 ms,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        init
          Text:                      OK (16.03s)
            7.95 ms ±  13 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  2% more than baseline
          LazyText:                  OK (32.92s)
            8.08 ms ± 116 μs, 275 KB allocated, 956 B  copied, 4.1 GB peak memory,  6% less than baseline
        intercalate
          Text:                      OK (13.82s)
            13.7 ms ± 236 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 17% less than baseline
          LazyText:                  OK (15.29s)
            15.1 ms ± 276 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 14% less than baseline
        intersperse
          Text:                      OK (31.95s)
            7.83 ms ± 115 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (16.35s)
            8.07 ms ±  85 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  5% less than baseline
        map
          Text:                      OK (16.09s)
            7.96 ms ±  35 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  3% more than baseline
          LazyText:                  OK (16.32s)
            8.07 ms ±  33 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  6% less than baseline
        map.map
          Text:                      OK (31.98s)
            7.84 ms ±  33 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (65.11s)
            7.96 ms ±  19 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  6% less than baseline
        replicate char
          Text:                      OK (23.08s)
            22.1 ns ± 164 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  7% less than baseline
          LazyText:                  OK (17.36s)
            16.7 ns ± 126 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  9% less than baseline
        replicate string
          Text:                      OK (24.30s)
            23.2 ns ± 184 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory, 11% less than baseline
          LazyText:                  OK (20.18s)
            19.3 ns ± 210 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  8% less than baseline
        take
          Text:                      OK (20.75s)
            5.10 ms ±  28 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% less than baseline
          LazyText:                  OK (37.84s)
            4.64 ms ±  15 μs,  81 KB allocated, 295 B  copied, 4.1 GB peak memory, 16% less than baseline
        tail
          Text:                      OK (64.05s)
            7.82 ms ±  71 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (16.48s)
            8.14 ms ± 129 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  5% less than baseline
        toLower
          Text:                      OK (47.71s)
            188  ms ± 1.1 ms,  58 MB allocated, 427 KB copied, 4.1 GB peak memory, 85% less than baseline
          LazyText:                  OK (23.92s)
            191  ms ± 3.2 ms,  58 MB allocated, 773 KB copied, 4.1 GB peak memory, 88% less than baseline
        toUpper
          Text:                      OK (28.63s)
            227  ms ± 4.2 ms,  58 MB allocated, 434 KB copied, 4.1 GB peak memory, 87% less than baseline
          LazyText:                  OK (28.53s)
            227  ms ± 2.0 ms,  58 MB allocated, 785 KB copied, 4.1 GB peak memory, 89% less than baseline
        words
          Text:                      OK (13.27s)
            219  ms ± 3.7 ms, 826 MB allocated, 3.1 MB copied, 4.1 GB peak memory,  2% less than baseline
          LazyText:                  OK (18.80s)
            630  ms ± 9.0 ms, 2.6 GB allocated,  10 MB copied, 4.1 GB peak memory,       same as baseline
        zipWith
          Text:                      OK (32.22s)
            7.92 ms ± 155 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (16.34s)
            8.06 ms ±  38 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  6% less than baseline
      Builder
        mappend char:                OK (29.69s)
          14.4 μs ± 129 ns,  25 KB allocated,  99 B  copied, 4.1 GB peak memory,  4% less than baseline
        mappend 8 char:              OK (30.15s)
          58.0 ns ± 434 ps, 287 B  allocated,   1 B  copied, 4.1 GB peak memory,  9% less than baseline
        mappend text:                OK (30.07s)
          58.4 μs ± 774 ns, 135 KB allocated, 536 B  copied, 4.1 GB peak memory,  7% less than baseline
    english
      append
        Text:                        OK (10.53s)
          1.40 ms ± 6.5 μs, 7.7 MB allocated,  90 KB copied, 4.1 GB peak memory,  5% less than baseline
        LazyText:                    OK (6.35s)
          3.11 μs ±  53 ns,  17 KB allocated,  68 B  copied, 4.1 GB peak memory,       same as baseline
      concat
        Text:                        OK (8.10s)
          2.04 ms ±  23 μs, 9.0 MB allocated,  84 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (3.82s)
          482  μs ± 3.6 μs, 2.1 MB allocated,  20 KB copied, 4.1 GB peak memory,  1% more than baseline
      cons
        Text:                        OK (3.66s)
          29.5 ms ± 430 μs, 125 MB allocated, 476 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.32s)
          257  ns ± 4.4 ns,  86 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      decode
        Text:                        OK (5.64s)
          742  μs ± 2.4 μs, 3.8 MB allocated,  51 KB copied, 4.1 GB peak memory,  6% less than baseline
        LazyText:                    OK (6.32s)
          836  μs ± 5.0 μs, 4.0 MB allocated,  56 KB copied, 4.1 GB peak memory,  8% less than baseline
      decode'
        Text:                        OK (5.73s)
          753  μs ± 5.0 μs, 3.8 MB allocated,  52 KB copied, 4.1 GB peak memory,  6% less than baseline
        LazyText:                    OK (3.23s)
          850  μs ±  12 μs, 4.0 MB allocated,  57 KB copied, 4.1 GB peak memory,  7% less than baseline
      drop
        Text:                        OK (9.21s)
          140  μs ± 1.6 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 11% less than baseline
        LazyText:                    OK (4.71s)
          143  μs ± 2.7 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
      encode
        Text:                        OK (5.41s)
          704  μs ± 7.5 μs, 3.8 MB allocated,  51 KB copied, 4.1 GB peak memory,  8% less than baseline
        LazyText:                    OK (1.50s)
          792  μs ±  14 μs, 3.9 MB allocated,  57 KB copied, 4.1 GB peak memory,  5% less than baseline
      filter
        Text:                        OK (4.67s)
          9.17 ms ±  46 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.70s)
          9.21 ms ±  71 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      filter.filter
        Text:                        OK (4.68s)
          9.17 ms ± 156 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.68s)
          9.17 ms ± 162 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      foldl'
        Text:                        OK (5.54s)
          22.2 ms ± 183 μs, 122 MB allocated, 498 KB copied, 4.1 GB peak memory,  2% less than baseline
        LazyText:                    OK (5.44s)
          43.9 ms ± 252 μs, 275 MB allocated, 1.1 MB copied, 4.1 GB peak memory,  2% less than baseline
      foldr
        Text:                        OK (6.08s)
          49.0 ms ± 350 μs, 276 MB allocated, 1.1 MB copied, 4.1 GB peak memory,  2% less than baseline
        LazyText:                    OK (5.10s)
          82.9 ms ± 971 μs, 519 MB allocated, 2.1 MB copied, 4.1 GB peak memory,  3% less than baseline
      head
        Text:                        OK (4.83s)
          9.08 ns ±  50 ps,  39 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% less than baseline
        LazyText:                    OK (4.66s)
          17.6 ns ±  88 ps, 102 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      init
        Text:                        OK (4.60s)
          8.70 ns ±  64 ps,  55 B  allocated,   0 B  copied, 4.1 GB peak memory,  8% less than baseline
        LazyText:                    OK (6.75s)
          3.29 μs ±  24 ns,  21 KB allocated,  91 B  copied, 4.1 GB peak memory,  1% less than baseline
      intercalate
        Text:                        OK (13.18s)
          6.68 ms ±  25 μs,  23 MB allocated, 248 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (3.85s)
          1.98 ms ±  21 μs, 9.9 MB allocated, 185 KB copied, 4.1 GB peak memory,       same as baseline
      intersperse
        Text:                        OK (6.33s)
          12.4 ms ± 247 μs,  11 MB allocated, 164 KB copied, 4.1 GB peak memory,  5% less than baseline
        LazyText:                    OK (4.63s)
          162  ms ± 2.1 ms, 852 MB allocated, 3.5 MB copied, 4.1 GB peak memory,  2% less than baseline
      isInfixOf
        Text:                        OK (5.45s)
          41.5 μs ± 232 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (5.30s)
          80.8 μs ± 320 ns, 2.9 KB allocated,  12 B  copied, 4.1 GB peak memory,  1% less than baseline
      last
        Text:                        OK (3.81s)
          7.15 ns ± 108 ps,  39 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% less than baseline
        LazyText:                    OK (5.54s)
          328  ns ± 3.7 ns,  28 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      map
        Text:                        OK (17.33s)
          16.9 ms ±  32 μs, 3.8 MB allocated,  54 KB copied, 4.1 GB peak memory,  1% less than baseline
        LazyText:                    OK (2.19s)
          17.4 ms ± 306 μs, 3.4 MB allocated,  54 KB copied, 4.1 GB peak memory,       same as baseline
      mapAccumL
        Text:                        OK (4.81s)
          167  ms ± 755 μs, 674 MB allocated, 7.3 MB copied, 4.1 GB peak memory,  9% less than baseline
        LazyText:                    OK (1.46s)
          114  ms ± 1.6 ms, 395 MB allocated, 6.1 MB copied, 4.1 GB peak memory,       same as baseline
      mapAccumR
        Text:                        OK (4.75s)
          165  ms ± 618 μs, 702 MB allocated, 7.7 MB copied, 4.1 GB peak memory,  7% less than baseline
        LazyText:                    OK (5.89s)
          109  ms ± 1.1 ms, 412 MB allocated, 6.1 MB copied, 4.1 GB peak memory,       same as baseline
      map.map
        Text:                        OK (4.63s)
          18.1 ms ± 303 μs, 3.8 MB allocated,  51 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.61s)
          18.2 ms ± 179 μs, 3.7 MB allocated,  55 KB copied, 4.1 GB peak memory,       same as baseline
      replicate char
        Text:                        OK (5.40s)
          1.36 ms ± 7.5 μs, 7.7 MB allocated,  95 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (5.30s)
          20.5 μs ± 128 ns, 121 KB allocated, 409 B  copied, 4.1 GB peak memory,       same as baseline
      replicate string
        Text:                        OK (5.36s)
          1.36 ms ±  24 μs, 7.7 MB allocated,  96 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (5.41s)
          20.9 μs ± 392 ns, 125 KB allocated, 436 B  copied, 4.1 GB peak memory,       same as baseline
      reverse
        Text:                        OK (9.35s)
          2.31 ms ±  18 μs, 3.8 MB allocated,  53 KB copied, 4.1 GB peak memory, 30% more than baseline
        LazyText:                    OK (2.42s)
          2.43 ms ±  28 μs, 3.8 MB allocated,  59 KB copied, 4.1 GB peak memory, 30% more than baseline
      take
        Text:                        OK (4.63s)
          141  μs ± 2.7 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 11% less than baseline
        LazyText:                    OK (9.38s)
          143  μs ± 368 ns, 2.9 KB allocated,  12 B  copied, 4.1 GB peak memory, 20% less than baseline
      tail
        Text:                        OK (6.33s)
          12.0 ns ±  74 ps,  63 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% less than baseline
        LazyText:                    OK (4.20s)
          249  ns ± 4.9 ns,  57 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      toLower
        Text:                        OK (6.29s)
          12.3 ms ± 197 μs, 3.8 MB allocated,  53 KB copied, 4.1 GB peak memory, 88% less than baseline
        LazyText:                    OK (6.26s)
          12.3 ms ± 145 μs, 3.8 MB allocated,  57 KB copied, 4.1 GB peak memory, 89% less than baseline
      toUpper
        Text:                        OK (3.83s)
          15.0 ms ± 208 μs, 3.8 MB allocated,  53 KB copied, 4.1 GB peak memory, 88% less than baseline
        LazyText:                    OK (3.86s)
          15.3 ms ± 253 μs, 3.7 MB allocated,  57 KB copied, 4.1 GB peak memory, 89% less than baseline
      uncons
        Text:                        OK (4.62s)
          17.5 ns ± 280 ps, 111 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.31s)
          256  ns ± 4.7 ns, 115 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      words
        Text:                        OK (4.56s)
          19.8 ms ±  55 μs,  54 MB allocated, 8.2 MB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (3.20s)
          129  ms ± 1.4 ms, 214 MB allocated,  47 MB copied, 4.1 GB peak memory,  1% more than baseline
      zipWith
        Text:                        OK (1.23s)
          86.4 ms ± 1.3 ms, 333 MB allocated, 1.4 MB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (2.58s)
          180  ms ± 3.6 ms, 990 MB allocated, 4.2 MB copied, 4.1 GB peak memory,       same as baseline
      length
        cons
          Text:                      OK (6.95s)
            423  μs ± 3.3 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (3.54s)
            433  μs ± 1.5 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        decode
          Text:                      OK (4.86s)
            1.22 ms ±  22 μs, 3.8 MB allocated,  56 KB copied, 4.1 GB peak memory,  3% less than baseline
          LazyText:                  OK (4.99s)
            1.27 ms ± 5.7 μs, 4.0 MB allocated,  61 KB copied, 4.1 GB peak memory,  8% less than baseline
        drop
          Text:                      OK (7.00s)
            427  μs ± 886 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (3.53s)
            430  μs ± 6.6 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        filter
          Text:                      OK (4.37s)
            8.57 ms ± 109 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (9.34s)
            9.14 ms ±  32 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        filter.filter
          Text:                      OK (8.71s)
            8.51 ms ±  58 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (9.37s)
            9.16 ms ±  23 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        init
          Text:                      OK (6.94s)
            424  μs ± 1.3 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (7.07s)
            431  μs ± 2.6 μs,  11 KB allocated,  49 B  copied, 4.1 GB peak memory, 19% less than baseline
        intercalate
          Text:                      OK (3.44s)
            840  μs ± 8.7 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (7.58s)
            923  μs ±  11 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 17% less than baseline
        intersperse
          Text:                      OK (3.50s)
            428  μs ± 4.3 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (7.00s)
            428  μs ± 2.0 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        map
          Text:                      OK (6.95s)
            424  μs ± 4.1 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (7.00s)
            427  μs ± 4.9 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        map.map
          Text:                      OK (3.50s)
            428  μs ± 1.6 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (3.52s)
            430  μs ± 6.4 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        replicate char
          Text:                      OK (2.99s)
            22.3 ns ± 396 ps,  46 B  allocated,   0 B  copied, 4.1 GB peak memory,  6% less than baseline
          LazyText:                  OK (4.47s)
            16.7 ns ±  94 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  7% less than baseline
        replicate string
          Text:                      OK (6.18s)
            23.1 ns ± 290 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory, 10% less than baseline
          LazyText:                  OK (5.18s)
            19.3 ns ± 364 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  7% less than baseline
        take
          Text:                      OK (2.35s)
            288  μs ± 3.8 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (4.71s)
            287  μs ± 4.1 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        tail
          Text:                      OK (6.98s)
            426  μs ± 1.8 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (3.54s)
            433  μs ± 2.6 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        toLower
          Text:                      OK (6.51s)
            12.7 ms ± 156 μs, 3.8 MB allocated,  54 KB copied, 4.1 GB peak memory, 84% less than baseline
          LazyText:                  OK (3.25s)
            12.8 ms ± 184 μs, 3.7 MB allocated,  57 KB copied, 4.1 GB peak memory, 88% less than baseline
        toUpper
          Text:                      OK (7.77s)
            15.2 ms ±  61 μs, 3.8 MB allocated,  54 KB copied, 4.1 GB peak memory, 86% less than baseline
          LazyText:                  OK (7.72s)
            15.2 ms ±  86 μs, 3.8 MB allocated,  58 KB copied, 4.1 GB peak memory, 89% less than baseline
        words
          Text:                      OK (3.67s)
            14.6 ms ± 282 μs,  54 MB allocated, 236 KB copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (5.25s)
            41.9 ms ± 543 μs, 179 MB allocated, 778 KB copied, 4.1 GB peak memory,  1% more than baseline
        zipWith
          Text:                      OK (6.95s)
            424  μs ± 3.0 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (3.54s)
            432  μs ± 5.9 μs,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
      Builder
        mappend char:                OK (7.52s)
          14.4 μs ±  85 ns,  25 KB allocated, 107 B  copied, 4.1 GB peak memory,  3% less than baseline
        mappend 8 char:              OK (7.70s)
          57.9 ns ± 812 ps, 286 B  allocated,   1 B  copied, 4.1 GB peak memory,  7% less than baseline
        mappend text:                OK (3.83s)
          58.9 μs ± 993 ns, 132 KB allocated, 563 B  copied, 4.1 GB peak memory,  5% less than baseline
    russian
      append
        Text:                        OK (2.27s)
          4.52 μs ±  37 ns,  23 KB allocated, 354 B  copied, 4.1 GB peak memory,  3% more than baseline
        LazyText:                    OK (5.59s)
          21.0 ns ±  62 ps, 102 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% less than baseline
      concat
        Text:                        OK (4.00s)
          3.91 μs ±  28 ns,  20 KB allocated, 176 B  copied, 4.1 GB peak memory,  5% more than baseline
        LazyText:                    OK (5.48s)
          659  ns ± 3.7 ns, 3.2 KB allocated,  13 B  copied, 4.1 GB peak memory,  3% more than baseline
      cons
        Text:                        OK (4.16s)
          63.9 μs ± 269 ns, 210 KB allocated, 833 B  copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (4.80s)
          18.0 ns ±  60 ps,  87 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% more than baseline
      decode
        Text:                        OK (2.85s)
          2.82 μs ±  46 ns,  12 KB allocated, 175 B  copied, 4.1 GB peak memory,  5% more than baseline
        LazyText:                    OK (1.49s)
          2.96 μs ±  50 ns,  12 KB allocated, 175 B  copied, 4.1 GB peak memory,  2% more than baseline
      decode'
        Text:                        OK (2.87s)
          2.84 μs ±  20 ns,  12 KB allocated, 176 B  copied, 4.1 GB peak memory,  5% more than baseline
        LazyText:                    OK (2.99s)
          2.96 μs ±  11 ns,  12 KB allocated, 176 B  copied, 4.1 GB peak memory,       same as baseline
      drop
        Text:                        OK (3.76s)
          445  ns ± 4.6 ns,  57 B  allocated,   0 B  copied, 4.1 GB peak memory,  8% less than baseline
        LazyText:                    OK (3.82s)
          450  ns ± 8.1 ns,  57 B  allocated,   0 B  copied, 4.1 GB peak memory, 10% less than baseline
      encode
        Text:                        OK (2.25s)
          2.27 μs ±  14 ns,  12 KB allocated, 176 B  copied, 4.1 GB peak memory,  7% more than baseline
        LazyText:                    OK (4.50s)
          2.27 μs ± 6.7 ns,  12 KB allocated, 176 B  copied, 4.1 GB peak memory,  6% more than baseline
      filter
        Text:                        OK (6.37s)
          24.2 μs ± 168 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (3.26s)
          24.8 μs ± 362 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  3% more than baseline
      filter.filter
        Text:                        OK (3.22s)
          24.4 μs ± 386 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (1.66s)
          25.2 μs ± 472 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  5% more than baseline
      foldl'
        Text:                        OK (5.17s)
          40.1 μs ± 444 ns, 201 KB allocated, 847 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (5.07s)
          78.9 μs ± 1.1 μs, 453 KB allocated, 1.9 KB copied, 4.1 GB peak memory,  2% more than baseline
      foldr
        Text:                        OK (5.65s)
          88.2 μs ± 471 ns, 452 KB allocated, 1.9 KB copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (4.58s)
          143  μs ± 968 ns, 857 KB allocated, 3.5 KB copied, 4.1 GB peak memory,  2% more than baseline
      head
        Text:                        OK (5.14s)
          9.67 ns ±  64 ps,  39 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (4.68s)
          17.8 ns ± 130 ps, 102 B  allocated,   0 B  copied, 4.1 GB peak memory,  2% more than baseline
      init
        Text:                        OK (4.55s)
          8.63 ns ± 110 ps,  55 B  allocated,   0 B  copied, 4.1 GB peak memory,  4% less than baseline
        LazyText:                    OK (3.45s)
          13.0 ns ± 224 ps,  63 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      intercalate
        Text:                        OK (2.21s)
          8.57 μs ±  97 ns,  43 KB allocated, 185 B  copied, 4.1 GB peak memory,  5% more than baseline
        LazyText:                    OK (5.92s)
          2.89 μs ± 5.9 ns,  17 KB allocated,  71 B  copied, 4.1 GB peak memory,  1% more than baseline
      intersperse
        Text:                        OK (3.60s)
          27.8 μs ± 455 ns,  24 KB allocated, 360 B  copied, 4.1 GB peak memory,  1% less than baseline
        LazyText:                    OK (4.10s)
          256  μs ± 3.8 μs, 1.4 MB allocated, 5.6 KB copied, 4.1 GB peak memory,  2% more than baseline
      isInfixOf
        Text:                        OK (11.85s)
          2.85 μs ± 2.7 ns, 6.7 KB allocated,  27 B  copied, 4.1 GB peak memory,  8% less than baseline
        LazyText:                    OK (5.33s)
          5.06 μs ±  42 ns, 635 B  allocated,   2 B  copied, 4.1 GB peak memory, 18% less than baseline
      last
        Text:                        OK (3.76s)
          7.16 ns ±  48 ps,  39 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.79s)
          9.05 ns ± 126 ps,  39 B  allocated,   0 B  copied, 4.1 GB peak memory,  2% more than baseline
      map
        Text:                        OK (2.74s)
          41.7 μs ± 680 ns,  11 KB allocated, 160 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (2.74s)
          41.8 μs ± 250 ns,  11 KB allocated, 160 B  copied, 4.1 GB peak memory,  1% more than baseline
      mapAccumL
        Text:                        OK (4.48s)
          71.1 μs ± 748 ns, 150 KB allocated, 2.2 KB copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (4.50s)
          71.2 μs ± 629 ns, 150 KB allocated, 2.2 KB copied, 4.1 GB peak memory,       same as baseline
      mapAccumR
        Text:                        OK (4.26s)
          67.4 μs ± 585 ns, 150 KB allocated, 2.2 KB copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (2.14s)
          68.0 μs ± 703 ns, 150 KB allocated, 2.2 KB copied, 4.1 GB peak memory,  2% more than baseline
      map.map
        Text:                        OK (2.95s)
          45.2 μs ± 257 ns,  11 KB allocated, 160 B  copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (1.48s)
          45.2 μs ± 661 ns, 9.7 KB allocated, 142 B  copied, 4.1 GB peak memory,       same as baseline
      replicate char
        Text:                        OK (4.29s)
          4.49 μs ±  16 ns,  23 KB allocated, 342 B  copied, 4.1 GB peak memory,  3% more than baseline
        LazyText:                    OK (4.55s)
          4.74 μs ±  21 ns,  24 KB allocated, 342 B  copied, 4.1 GB peak memory,  3% more than baseline
      replicate string
        Text:                        OK (1.09s)
          4.58 μs ±  80 ns,  23 KB allocated, 341 B  copied, 4.1 GB peak memory,  7% more than baseline
        LazyText:                    OK (4.44s)
          4.63 μs ±  25 ns,  24 KB allocated, 343 B  copied, 4.1 GB peak memory,  4% more than baseline
      reverse
        Text:                        OK (6.16s)
          6.06 μs ±  26 ns,  12 KB allocated, 170 B  copied, 4.1 GB peak memory, 10% more than baseline
        LazyText:                    OK (3.06s)
          6.03 μs ±  92 ns,  12 KB allocated, 170 B  copied, 4.1 GB peak memory,  7% more than baseline
      take
        Text:                        OK (1.92s)
          453  ns ± 7.4 ns,  46 B  allocated,   0 B  copied, 4.1 GB peak memory,  8% less than baseline
        LazyText:                    OK (7.53s)
          448  ns ± 3.5 ns,  68 B  allocated,   0 B  copied, 4.1 GB peak memory,  9% less than baseline
      tail
        Text:                        OK (3.16s)
          12.0 ns ± 158 ps,  63 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (3.30s)
          12.5 ns ± 218 ps,  63 B  allocated,   0 B  copied, 4.1 GB peak memory,  2% less than baseline
      toLower
        Text:                        OK (3.56s)
          54.4 μs ± 898 ns,  12 KB allocated, 159 B  copied, 4.1 GB peak memory, 65% less than baseline
        LazyText:                    OK (3.51s)
          53.7 μs ± 185 ns,  12 KB allocated, 158 B  copied, 4.1 GB peak memory, 71% less than baseline
      toUpper
        Text:                        OK (3.38s)
          103  μs ± 706 ns,  89 KB allocated, 317 B  copied, 4.1 GB peak memory, 49% less than baseline
        LazyText:                    OK (3.29s)
          100  μs ± 1.5 μs,  89 KB allocated, 316 B  copied, 4.1 GB peak memory, 58% less than baseline
      uncons
        Text:                        OK (2.35s)
          18.1 ns ± 146 ps, 110 B  allocated,   0 B  copied, 4.1 GB peak memory,  3% more than baseline
        LazyText:                    OK (5.66s)
          21.7 ns ±  50 ps, 119 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      words
        Text:                        OK (5.68s)
          45.0 μs ± 350 ns, 285 KB allocated, 1.2 KB copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (3.25s)
          101  μs ± 969 ns, 301 KB allocated, 1.3 KB copied, 4.1 GB peak memory,       same as baseline
      zipWith
        Text:                        OK (4.78s)
          149  μs ± 1.9 μs, 565 KB allocated, 2.2 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.64s)
          292  μs ± 5.1 μs, 1.6 MB allocated, 6.4 KB copied, 4.1 GB peak memory,       same as baseline
      length
        cons
          Text:                      OK (5.32s)
            1.26 μs ±  18 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (5.30s)
            1.26 μs ±  19 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 21% less than baseline
        decode
          Text:                      OK (4.00s)
            4.05 μs ±  32 ns,  12 KB allocated, 166 B  copied, 4.1 GB peak memory,  5% less than baseline
          LazyText:                  OK (4.10s)
            4.15 μs ±  41 ns,  12 KB allocated, 166 B  copied, 4.1 GB peak memory,  6% less than baseline
        drop
          Text:                      OK (2.75s)
            1.31 μs ± 9.6 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (5.45s)
            1.30 μs ± 4.6 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        filter
          Text:                      OK (5.57s)
            21.2 μs ±  52 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (3.27s)
            24.9 μs ± 289 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  2% more than baseline
        filter.filter
          Text:                      OK (2.74s)
            20.8 μs ± 354 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (3.27s)
            24.9 μs ±  91 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  4% more than baseline
        init
          Text:                      OK (5.31s)
            1.26 μs ±  15 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 21% less than baseline
          LazyText:                  OK (5.35s)
            1.27 μs ± 3.8 ns,  46 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        intercalate
          Text:                      OK (4.21s)
            2.00 μs ±  14 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 17% less than baseline
          LazyText:                  OK (4.28s)
            2.03 μs ±  23 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        intersperse
          Text:                      OK (2.68s)
            1.27 μs ±  25 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (2.68s)
            1.27 μs ±  18 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        map
          Text:                      OK (5.30s)
            1.26 μs ± 7.6 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
          LazyText:                  OK (5.32s)
            1.27 μs ± 3.2 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        map.map
          Text:                      OK (5.30s)
            1.26 μs ±  13 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 21% less than baseline
          LazyText:                  OK (5.31s)
            1.26 μs ±  10 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        replicate char
          Text:                      OK (2.96s)
            22.2 ns ± 356 ps,  46 B  allocated,   0 B  copied, 4.1 GB peak memory,  7% less than baseline
          LazyText:                  OK (4.43s)
            16.7 ns ± 142 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  8% less than baseline
        replicate string
          Text:                      OK (6.13s)
            22.9 ns ± 338 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory, 10% less than baseline
          LazyText:                  OK (5.10s)
            19.2 ns ±  80 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  6% less than baseline
        take
          Text:                      OK (3.66s)
            866  ns ±  15 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
          LazyText:                  OK (3.72s)
            881  ns ±  13 ns,  45 B  allocated,   0 B  copied, 4.1 GB peak memory, 21% less than baseline
        tail
          Text:                      OK (2.69s)
            1.27 μs ±  15 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 18% less than baseline
          LazyText:                  OK (5.36s)
            1.28 μs ±  15 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        toLower
          Text:                      OK (1.82s)
            55.7 μs ± 1.1 μs,  11 KB allocated, 131 B  copied, 4.1 GB peak memory, 60% less than baseline
          LazyText:                  OK (7.22s)
            55.4 μs ± 614 ns,  13 KB allocated, 155 B  copied, 4.1 GB peak memory, 69% less than baseline
        toUpper
          Text:                      OK (3.26s)
            100  μs ± 1.4 μs,  89 KB allocated, 294 B  copied, 4.1 GB peak memory, 46% less than baseline
          LazyText:                  OK (1.64s)
            101  μs ± 1.6 μs,  79 KB allocated, 261 B  copied, 4.1 GB peak memory, 56% less than baseline
        words
          Text:                      OK (5.57s)
            44.2 μs ± 153 ns, 285 KB allocated, 1.1 KB copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (2.69s)
            83.3 μs ± 1.2 μs, 250 KB allocated, 945 B  copied, 4.1 GB peak memory,  1% more than baseline
        zipWith
          Text:                      OK (2.68s)
            1.27 μs ± 7.6 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (5.34s)
            1.27 μs ± 5.8 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
      Builder
        mappend char:                OK (3.75s)
          14.4 μs ± 197 ns,  25 KB allocated,  94 B  copied, 4.1 GB peak memory,  3% less than baseline
        mappend 8 char:              OK (3.77s)
          57.2 ns ± 664 ps, 285 B  allocated,   1 B  copied, 4.1 GB peak memory, 10% less than baseline
        mappend text:                OK (3.78s)
          58.3 μs ± 869 ns, 132 KB allocated, 493 B  copied, 4.1 GB peak memory,  5% less than baseline
    japanese
      append
        Text:                        OK (2.23s)
          4.69 μs ±  37 ns,  25 KB allocated, 331 B  copied, 4.1 GB peak memory,  2% more than baseline
        LazyText:                    OK (5.63s)
          21.4 ns ±  72 ps, 102 B  allocated,   0 B  copied, 4.1 GB peak memory,  9% more than baseline
      concat
        Text:                        OK (3.97s)
          7.76 μs ± 112 ns,  39 KB allocated, 162 B  copied, 4.1 GB peak memory,  2% more than baseline
        LazyText:                    OK (4.84s)
          2.35 μs ±  43 ns,  11 KB allocated,  39 B  copied, 4.1 GB peak memory,       same as baseline
      cons
        Text:                        OK (5.47s)
          42.3 μs ± 281 ns, 151 KB allocated, 507 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.62s)
          17.5 ns ± 186 ps,  87 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      decode
        Text:                        OK (5.75s)
          2.94 μs ±  16 ns,  12 KB allocated, 162 B  copied, 4.1 GB peak memory,  3% more than baseline
        LazyText:                    OK (2.98s)
          3.04 μs ±  55 ns,  13 KB allocated, 162 B  copied, 4.1 GB peak memory,       same as baseline
      decode'
        Text:                        OK (2.90s)
          2.98 μs ±  19 ns,  13 KB allocated, 161 B  copied, 4.1 GB peak memory,  3% more than baseline
        LazyText:                    OK (3.01s)
          3.07 μs ±  53 ns,  13 KB allocated, 162 B  copied, 4.1 GB peak memory,       same as baseline
      drop
        Text:                        OK (3.99s)
          473  ns ± 7.2 ns,  57 B  allocated,   0 B  copied, 4.1 GB peak memory,  8% less than baseline
        LazyText:                    OK (2.05s)
          485  ns ± 7.0 ns,  46 B  allocated,   0 B  copied, 4.1 GB peak memory,  7% less than baseline
      encode
        Text:                        OK (4.47s)
          2.32 μs ± 5.5 ns,  12 KB allocated, 161 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.53s)
          2.35 μs ±  18 ns,  13 KB allocated, 161 B  copied, 4.1 GB peak memory,  4% more than baseline
      filter
        Text:                        OK (8.73s)
          16.6 μs ± 222 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (2.23s)
          16.9 μs ± 211 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% more than baseline
      filter.filter
        Text:                        OK (4.38s)
          16.6 μs ±  89 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% less than baseline
        LazyText:                    OK (4.39s)
          16.7 μs ±  83 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      foldl'
        Text:                        OK (6.48s)
          25.4 μs ± 141 ns, 139 KB allocated, 492 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (6.58s)
          51.7 μs ± 218 ns, 313 KB allocated, 1.1 KB copied, 4.1 GB peak memory,       same as baseline
      foldr
        Text:                        OK (3.65s)
          57.4 μs ± 539 ns, 314 KB allocated, 1.1 KB copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (6.00s)
          94.7 μs ± 197 ns, 592 KB allocated, 2.0 KB copied, 4.1 GB peak memory,       same as baseline
      head
        Text:                        OK (2.64s)
          10.0 ns ± 182 ps,  39 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.66s)
          17.7 ns ± 238 ps, 102 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      init
        Text:                        OK (4.47s)
          8.53 ns ± 142 ps,  55 B  allocated,   0 B  copied, 4.1 GB peak memory,  5% less than baseline
        LazyText:                    OK (1.73s)
          13.1 ns ± 238 ps,  63 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      intercalate
        Text:                        OK (2.65s)
          20.6 μs ± 385 ns,  99 KB allocated, 296 B  copied, 4.1 GB peak memory,  2% more than baseline
        LazyText:                    OK (4.03s)
          7.89 μs ±  92 ns,  46 KB allocated, 161 B  copied, 4.1 GB peak memory,  1% more than baseline
      intersperse
        Text:                        OK (2.63s)
          20.4 μs ± 401 ns,  21 KB allocated, 261 B  copied, 4.1 GB peak memory,  3% more than baseline
        LazyText:                    OK (5.54s)
          173  μs ± 1.3 μs, 986 KB allocated, 3.2 KB copied, 4.1 GB peak memory,       same as baseline
      isInfixOf
        Text:                        OK (7.15s)
          3.46 μs ±  21 ns, 9.8 KB allocated,  33 B  copied, 4.1 GB peak memory,  4% less than baseline
        LazyText:                    OK (4.17s)
          7.93 μs ±  22 ns, 370 B  allocated,   1 B  copied, 4.1 GB peak memory, 24% more than baseline
      last
        Text:                        OK (3.70s)
          7.03 ns ±  60 ps,  39 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.70s)
          8.89 ns ±  96 ps,  39 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% more than baseline
      map
        Text:                        OK (3.92s)
          30.0 μs ± 533 ns,  12 KB allocated, 146 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (1.98s)
          30.3 μs ± 491 ns,  12 KB allocated, 146 B  copied, 4.1 GB peak memory,  1% more than baseline
      mapAccumL
        Text:                        OK (4.54s)
          35.3 μs ± 267 ns,  38 KB allocated, 463 B  copied, 4.1 GB peak memory,  1% more than baseline
        LazyText:                    OK (4.51s)
          35.0 μs ± 484 ns,  38 KB allocated, 462 B  copied, 4.1 GB peak memory,       same as baseline
      mapAccumR
        Text:                        OK (4.71s)
          36.8 μs ± 446 ns,  51 KB allocated, 619 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.71s)
          36.7 μs ± 533 ns,  51 KB allocated, 618 B  copied, 4.1 GB peak memory,       same as baseline
      map.map
        Text:                        OK (8.18s)
          31.4 μs ±  77 ns,  12 KB allocated, 147 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (4.12s)
          31.6 μs ± 151 ns,  12 KB allocated, 144 B  copied, 4.1 GB peak memory,       same as baseline
      replicate char
        Text:                        OK (2.18s)
          4.56 μs ±  57 ns,  25 KB allocated, 298 B  copied, 4.1 GB peak memory,  2% more than baseline
        LazyText:                    OK (2.34s)
          4.87 μs ±  57 ns,  25 KB allocated, 298 B  copied, 4.1 GB peak memory,  3% more than baseline
      replicate string
        Text:                        OK (4.30s)
          4.54 μs ±  20 ns,  25 KB allocated, 298 B  copied, 4.1 GB peak memory,  3% more than baseline
        LazyText:                    OK (4.52s)
          4.72 μs ±  52 ns,  25 KB allocated, 297 B  copied, 4.1 GB peak memory,  3% more than baseline
      reverse
        Text:                        OK (6.91s)
          6.80 μs ±  39 ns,  12 KB allocated, 148 B  copied, 4.1 GB peak memory, 14% more than baseline
        LazyText:                    OK (3.46s)
          6.80 μs ±  83 ns,  12 KB allocated, 147 B  copied, 4.1 GB peak memory, 14% more than baseline
      take
        Text:                        OK (3.97s)
          472  ns ± 3.7 ns,  57 B  allocated,   0 B  copied, 4.1 GB peak memory,  9% less than baseline
        LazyText:                    OK (8.00s)
          475  ns ± 2.6 ns,  68 B  allocated,   0 B  copied, 4.1 GB peak memory,  9% less than baseline
      tail
        Text:                        OK (3.09s)
          11.8 ns ± 132 ps,  63 B  allocated,   0 B  copied, 4.1 GB peak memory,  1% less than baseline
        LazyText:                    OK (3.22s)
          12.3 ns ± 232 ps,  63 B  allocated,   0 B  copied, 4.1 GB peak memory,  2% less than baseline
      toLower
        Text:                        OK (2.37s)
          36.4 μs ± 644 ns,  12 KB allocated, 142 B  copied, 4.1 GB peak memory, 63% less than baseline
        LazyText:                    OK (4.77s)
          36.6 μs ± 335 ns,  12 KB allocated, 141 B  copied, 4.1 GB peak memory, 68% less than baseline
      toUpper
        Text:                        OK (4.62s)
          35.4 μs ± 447 ns,  12 KB allocated, 141 B  copied, 4.1 GB peak memory, 65% less than baseline
        LazyText:                    OK (4.64s)
          35.6 μs ± 377 ns,  12 KB allocated, 140 B  copied, 4.1 GB peak memory, 70% less than baseline
      uncons
        Text:                        OK (4.68s)
          17.8 ns ± 232 ps, 111 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (5.72s)
          21.8 ns ± 180 ps, 119 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
      words
        Text:                        OK (3.86s)
          60.6 μs ± 858 ns, 374 KB allocated, 1.2 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (6.48s)
          49.9 μs ± 133 ns,  97 KB allocated, 315 B  copied, 4.1 GB peak memory,  3% less than baseline
      zipWith
        Text:                        OK (3.31s)
          103  μs ± 1.9 μs, 393 KB allocated, 1.2 KB copied, 4.1 GB peak memory,       same as baseline
        LazyText:                    OK (1.61s)
          204  μs ± 4.0 μs, 1.1 MB allocated, 3.4 KB copied, 4.1 GB peak memory,  2% more than baseline
      length
        cons
          Text:                      OK (5.66s)
            1.34 μs ±  19 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
          LazyText:                  OK (5.66s)
            1.35 μs ± 7.7 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        decode
          Text:                      OK (2.10s)
            4.23 μs ±  59 ns,  12 KB allocated, 141 B  copied, 4.1 GB peak memory,  5% less than baseline
          LazyText:                  OK (4.28s)
            4.31 μs ±  59 ns,  13 KB allocated, 141 B  copied, 4.1 GB peak memory,  7% less than baseline
        drop
          Text:                      OK (2.92s)
            1.39 μs ± 7.8 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (5.80s)
            1.38 μs ± 5.6 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 21% less than baseline
        filter
          Text:                      OK (3.45s)
            13.1 μs ± 150 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (4.37s)
            16.6 μs ± 237 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        filter.filter
          Text:                      OK (3.46s)
            13.1 μs ± 251 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (2.22s)
            16.9 μs ± 268 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory,       same as baseline
        init
          Text:                      OK (5.65s)
            1.34 μs ±  17 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
          LazyText:                  OK (5.70s)
            1.36 μs ±  11 ns,  46 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        intercalate
          Text:                      OK (3.17s)
            3.01 μs ±  57 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 16% less than baseline
          LazyText:                  OK (3.33s)
            3.16 μs ±  19 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 17% less than baseline
        intersperse
          Text:                      OK (2.86s)
            1.36 μs ±  16 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (2.86s)
            1.36 μs ±  12 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        map
          Text:                      OK (5.68s)
            1.35 μs ±  12 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (5.68s)
            1.35 μs ±  13 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        map.map
          Text:                      OK (2.84s)
            1.35 μs ±  24 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (2.85s)
            1.36 μs ±  13 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        replicate char
          Text:                      OK (5.80s)
            21.9 ns ± 170 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  6% less than baseline
          LazyText:                  OK (4.35s)
            16.5 ns ±  52 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  7% less than baseline
        replicate string
          Text:                      OK (6.08s)
            22.9 ns ±  78 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  9% less than baseline
          LazyText:                  OK (5.03s)
            19.0 ns ± 186 ps,  47 B  allocated,   0 B  copied, 4.1 GB peak memory,  7% less than baseline
        take
          Text:                      OK (3.90s)
            930  ns ± 5.2 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (3.93s)
            934  ns ± 7.1 ns,  45 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
        tail
          Text:                      OK (5.69s)
            1.36 μs ± 5.0 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
          LazyText:                  OK (2.87s)
            1.36 μs ±  26 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 19% less than baseline
        toLower
          Text:                      OK (2.47s)
            38.0 μs ± 459 ns,  12 KB allocated, 129 B  copied, 4.1 GB peak memory, 57% less than baseline
          LazyText:                  OK (4.94s)
            37.9 μs ± 110 ns,  12 KB allocated, 128 B  copied, 4.1 GB peak memory, 67% less than baseline
        toUpper
          Text:                      OK (4.79s)
            36.7 μs ± 367 ns,  12 KB allocated, 128 B  copied, 4.1 GB peak memory, 59% less than baseline
          LazyText:                  OK (4.86s)
            37.3 μs ± 299 ns,  12 KB allocated, 128 B  copied, 4.1 GB peak memory, 67% less than baseline
        words
          Text:                      OK (3.81s)
            60.1 μs ± 1.1 μs, 375 KB allocated, 1.1 KB copied, 4.1 GB peak memory,       same as baseline
          LazyText:                  OK (5.94s)
            45.7 μs ± 290 ns,  87 KB allocated, 258 B  copied, 4.1 GB peak memory,       same as baseline
        zipWith
          Text:                      OK (5.69s)
            1.35 μs ±  14 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
          LazyText:                  OK (2.85s)
            1.35 μs ±  26 ns,   0 B  allocated,   0 B  copied, 4.1 GB peak memory, 20% less than baseline
      Builder
        mappend char:                OK (3.72s)
          14.3 μs ± 248 ns,  25 KB allocated,  73 B  copied, 4.1 GB peak memory,  2% less than baseline
        mappend 8 char:              OK (3.73s)
          56.9 ns ± 958 ps, 285 B  allocated,   0 B  copied, 4.1 GB peak memory,  6% less than baseline
        mappend text:                OK (3.76s)
          58.2 μs ± 597 ns, 132 KB allocated, 386 B  copied, 4.1 GB peak memory,  4% less than baseline
  ReadNumbers
    DecimalText:                     OK (3.38s)
      420  μs ± 7.9 μs, 1.2 MB allocated, 3.5 KB copied, 4.1 GB peak memory,  2% more than baseline
    HexadecimalText:                 OK (7.11s)
      879  μs ± 5.8 μs, 2.1 MB allocated, 5.9 KB copied, 4.1 GB peak memory, 10% less than baseline
    DoubleText:                      OK (4.61s)
      2.29 ms ±  21 μs, 5.9 MB allocated,  17 KB copied, 4.1 GB peak memory,       same as baseline
    RationalText:                    OK (4.37s)
      4.32 ms ±  68 μs, 8.1 MB allocated,  23 KB copied, 4.1 GB peak memory,  2% less than baseline
    DecimalLazyText:                 OK (5.98s)
      1.50 ms ±  14 μs, 7.4 MB allocated,  21 KB copied, 4.1 GB peak memory,  4% more than baseline
    HexadecimalLazyText:             OK (2.92s)
      2.92 ms ±  49 μs,  12 MB allocated,  35 KB copied, 4.1 GB peak memory,  4% less than baseline
    DoubleLazyText:                  OK (2.35s)
      4.74 ms ±  50 μs,  20 MB allocated,  56 KB copied, 4.1 GB peak memory,  2% more than baseline
    RationalLazyText:                OK (6.82s)
      6.79 ms ±  17 μs,  22 MB allocated,  63 KB copied, 4.1 GB peak memory,  4% less than baseline
  Replace
    Text:                            OK (8.55s)
      2.15 ms ±  20 μs, 4.9 MB allocated,  53 KB copied, 4.1 GB peak memory,  7% less than baseline
    LazyText:                        OK (2.92s)
      2.85 ms ±  49 μs, 642 KB allocated, 1.8 KB copied, 4.1 GB peak memory,  9% less than baseline
  FileIndices
    Text:                            OK (6.14s)
      750  μs ± 6.1 μs,  81 KB allocated, 219 B  copied, 4.1 GB peak memory,  8% less than baseline
    LazyText:                        OK (4.16s)
      2.03 ms ±  35 μs,  92 KB allocated, 250 B  copied, 4.1 GB peak memory,  2% more than baseline
  Stream
    stream
      Text:                          OK (3.85s)
        31.0 ms ± 418 μs, 146 MB allocated, 380 KB copied, 4.1 GB peak memory,  1% more than baseline
      LazyText:                      OK (4.86s)
        39.2 ms ± 707 μs, 211 MB allocated, 551 KB copied, 4.1 GB peak memory,       same as baseline
    streamUtf8
      Text:                          OK (9.44s)
        76.5 ms ± 490 μs, 500 MB allocated, 1.3 MB copied, 4.1 GB peak memory,       same as baseline
      LazyText:                      OK (6.89s)
        112  ms ± 576 μs, 689 MB allocated, 1.8 MB copied, 4.1 GB peak memory,       same as baseline
    streamUtf16LE
      Text:                          OK (7.54s)
        30.4 ms ±  80 μs, 189 MB allocated, 501 KB copied, 4.1 GB peak memory,  2% more than baseline
      LazyText:                      OK (3.39s)
        55.6 ms ± 343 μs, 336 MB allocated, 891 KB copied, 4.1 GB peak memory,  2% more than baseline
    streamUtf16BE
      Text:                          OK (3.75s)
        30.4 ms ± 282 μs, 189 MB allocated, 505 KB copied, 4.1 GB peak memory,  2% more than baseline
      LazyText:                      OK (3.39s)
        55.5 ms ± 1.1 ms, 336 MB allocated, 899 KB copied, 4.1 GB peak memory,       same as baseline
    streamUtf32LE
      Text:                          OK (6.56s)
        26.3 ms ± 137 μs, 147 MB allocated, 394 KB copied, 4.1 GB peak memory,       same as baseline
      LazyText:                      OK (4.00s)
        32.3 ms ± 547 μs, 189 MB allocated, 515 KB copied, 4.1 GB peak memory,       same as baseline
    streamUtf32BE
      Text:                          OK (6.56s)
        26.3 ms ±  76 μs, 147 MB allocated, 395 KB copied, 4.1 GB peak memory,  1% more than baseline
      LazyText:                      OK (4.00s)
        32.2 ms ± 571 μs, 189 MB allocated, 516 KB copied, 4.1 GB peak memory,       same as baseline
    restreamUtf16LE:                 OK (6.14s)
      49.3 ms ± 594 μs, 253 MB allocated, 683 KB copied, 4.1 GB peak memory,  1% more than baseline
    restreamUtf16BE:                 OK (6.28s)
      50.4 ms ± 295 μs, 253 MB allocated, 685 KB copied, 4.1 GB peak memory,       same as baseline
    restreamUtf32LE:                 OK (4.31s)
      70.0 ms ± 540 μs, 378 MB allocated, 1.0 MB copied, 4.1 GB peak memory,  2% more than baseline
    restreamUtf32BE:                 OK (4.33s)
      70.4 ms ± 1.0 ms, 378 MB allocated, 1.0 MB copied, 4.1 GB peak memory,  2% more than baseline
  WordFrequencies
    Text:                            OK (2.01s)
      178  ms ± 2.2 ms, 292 MB allocated,  21 MB copied, 4.1 GB peak memory, 22% less than baseline
  Programs
    BigTable:                        OK (2.48s)
      167  ms ± 1.7 ms, 327 MB allocated, 889 KB copied, 4.1 GB peak memory,       same as baseline
    Cut
      Text:                          OK (6.89s)
        27.2 ms ±  75 μs,  33 MB allocated, 175 KB copied, 4.1 GB peak memory,       same as baseline
      LazyText:                      OK (3.03s)
        48.6 ms ± 478 μs,  85 MB allocated, 225 KB copied, 4.1 GB peak memory,       same as baseline
      TextByteString:                OK (4.88s)
        9.59 ms ± 133 μs,  29 MB allocated, 104 KB copied, 4.1 GB peak memory,  1% more than baseline
      LazyTextByteString:            OK (4.79s)
        19.0 ms ± 186 μs,  62 MB allocated, 143 KB copied, 4.1 GB peak memory,  1% more than baseline
    Fold:                            OK (0.76s)
      115  ms ± 1.4 ms, 295 MB allocated, 801 KB copied, 4.1 GB peak memory,  2% more than baseline
    Sort
      Text:                          OK (7.76s)
        63.1 ms ± 554 μs,  79 MB allocated, 1.3 MB copied, 4.1 GB peak memory,       same as baseline
      LazyText:                      OK (2.74s)
        95.8 ms ± 992 μs, 133 MB allocated, 3.2 MB copied, 4.1 GB peak memory,       same as baseline
      TextByteString:                OK (8.60s)
        34.7 ms ± 469 μs,  80 MB allocated, 930 KB copied, 4.1 GB peak memory,       same as baseline
      LazyTextByteString:            OK (5.74s)
        48.9 ms ± 385 μs, 110 MB allocated, 1.5 MB copied, 4.1 GB peak memory,  3% more than baseline
      TextBuilder:                   OK (4.81s)
        39.6 ms ± 541 μs,  93 MB allocated, 1.0 MB copied, 4.1 GB peak memory,  2% more than baseline
    StripTags
      Text:                          OK (9.74s)
        651  ms ± 8.3 ms, 229 MB allocated, 3.5 MB copied, 4.1 GB peak memory,       same as baseline
      TextByteString:                OK (7.74s)
        250  ms ± 2.6 ms, 191 MB allocated, 1.3 MB copied, 4.1 GB peak memory,  1% more than baseline
    Throughput
      Text:                          OK (9.09s)
        35.7 ms ± 245 μs,  15 MB allocated, 126 KB copied, 4.1 GB peak memory,  2% more than baseline
      LazyText:                      OK (2.33s)
        37.2 ms ± 421 μs,  10 MB allocated,  41 KB copied, 4.1 GB peak memory,  4% more than baseline
      TextByteString:                OK (3.17s)
        3.20 ms ±  59 μs,  15 MB allocated, 137 KB copied, 4.1 GB peak memory,  9% more than baseline
      LazyTextByteString:            OK (3.19s)
        3.29 ms ±  49 μs,  15 MB allocated, 148 KB copied, 4.1 GB peak memory,  8% more than baseline

All 772 tests passed (5400.95s)
Benchmark text-benchmarks: FINISH

@Bodigrim
Copy link
Contributor

Thanks, @TeofilC, let's return to this in a couple of weeks, once we are done with the upcoming release.

@Bodigrim
Copy link
Contributor

Bodigrim commented Apr 3, 2023

@TeofilC Thinking more about it, I think I'm fine with this PR as long as we get performance right. It seems I cannot reproduce your results with GHC 9.6.1, e. g., case conversions are either equal or slower:

All
  Pure
    tiny
      toLower
        Text:       OK (1.62s)
          47.0 ns ± 3.8 ns, 62% more than baseline
        LazyText:   OK (1.24s)
          36.8 ns ± 3.4 ns,       same as baseline
      length
        toLower
          Text:     OK (2.46s)
            37.1 ns ± 2.6 ns, 12% more than baseline
          LazyText: OK (2.79s)
            41.8 ns ± 3.7 ns,       same as baseline
    ascii-small
      toLower
        Text:       OK (6.06s)
          375  μs ±  15 μs, 75% more than baseline
        LazyText:   OK (1.93s)
          237  μs ±  20 μs, 10% more than baseline
      length
        toLower
          Text:     OK (1.81s)
            219  μs ±  14 μs,       same as baseline
          LazyText: OK (1.81s)
            220  μs ±  14 μs,       same as baseline
    ascii
      toLower
        Text:       OK (2.47s)
          333  ms ±  25 ms, 80% more than baseline
        LazyText:   OK (3.51s)
          220  ms ± 7.3 ms,  8% more than baseline
      length
        toLower
          Text:     OK (1.52s)
            190  ms ±  15 ms,       same as baseline
          LazyText: OK (1.52s)
            191  ms ±  15 ms,       same as baseline

Could you please double-check? I'm running compare_benches upstream/master TeofilC/share-empty -p toLower (https://github.com/Bodigrim/tasty-bench/blob/master/compare_benches.sh).

@TeofilC
Copy link
Contributor Author

TeofilC commented Apr 20, 2023

Thanks for taking another look. I'm hoping to come back to this soon

@TeofilC
Copy link
Contributor Author

TeofilC commented Sep 4, 2023

Thanks for your patience folks. I've finally gotten around to looking at this again.

It turns out that the performance regressions of toLower etc were simply caused by differences in eta expansion with respect to HEAD. Applying the same eta-expansion to these functions fixed the regressions.

I've also rebased the branch and squashed the commits.

Let me know if you'd like anything changed on this branch.

@TeofilC
Copy link
Contributor Author

TeofilC commented Nov 29, 2023

@Bodigrim @Lysxia this should be ready for another look when you get a chance. No worries if you'd like me to rework some things or if you are no longer interested in this

Copy link
Contributor

@Bodigrim Bodigrim left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Lookg good, sorry that it took me so long to review.

@TeofilC could you please rebase one last time?

Try to use the same heap object to represent all empty Text values.
There are already attempts to enforce something like this through the
`text` smart constructor, and in various functions by special casing the
empty case.

This patch expands on these attempts and adds some tests to ensure that
empty Text values produced by this library are represented by the same
heap object.

Despite these efforts, we cannot guarantee that this will be the case in
all situations and users of the library shouldn't rely on this behaviour
for the correctness of their code.

Resolves haskell#492.
@TeofilC
Copy link
Contributor Author

TeofilC commented Jan 7, 2024

No worries about the delay at all, thanks for taking a look @Bodigrim !

It should be rebased now

@Bodigrim
Copy link
Contributor

Bodigrim commented Jan 7, 2024

(I assume that @Lysxia is happy with this patch, given the earlier approval and no material changes since then)

@Bodigrim Bodigrim merged commit e84c7a3 into haskell:master Jan 7, 2024
27 checks passed
@Bodigrim
Copy link
Contributor

Bodigrim commented Jan 7, 2024

Thanks @TeofilC!

@chreekat
Copy link
Contributor

Sadly this PR broke -fpure-haskell by reintroducing an unguarded use of cbits/reverse.c. That is totally understandable given that this PR predates the introduction of -fpure-haskell! I'll PR a fix in a few minutes.

@chreekat
Copy link
Contributor

#554

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
fix:performance internal No API-level changes
Projects
None yet
Development

Successfully merging this pull request may close these issues.

Optimise storage of empty Text
4 participants