text-1.2.1.3: An efficient packed Unicode text type.

Copyright | (c) 2009, 2010 Bryan O'Sullivan
License | BSD-style
Maintainer | bos@serpentine.com
Stability | experimental
Portability | GHC
Safe Haskell | None
Language | Haskell98

Data.Text.Internal.Lazy

Contents

- Data type invariant and abstraction functions
- Chunk allocation sizes

Description

Warning: this is an internal module, and does not have a stable API or name. Functions in this module may not check or enforce preconditions expected by public modules. Use at your own risk!

A module containing private `Text` internals. This exposes the `Text` representation and low level construction functions. Modules which extend the `Text` system may need to use this module.

Synopsis

- data Text
  - = Empty
  - | Chunk !Text Text
- chunk :: Text -> Text -> Text
- empty :: Text
- foldrChunks :: (Text -> a -> a) -> a -> Text -> a
- foldlChunks :: (a -> Text -> a) -> a -> Text -> a
- strictInvariant :: Text -> Bool
- lazyInvariant :: Text -> Text
- showStructure :: Text -> String
- defaultChunkSize :: Int
- smallChunkSize :: Int
- chunkOverhead :: Int

# Documentation

data Text

Constructors

Empty |
Chunk !Text Text |

Instances

type Item Text = Char |

chunk :: Text -> Text -> Text

Smart constructor for `Chunk`. Guarantees the data type invariant.

empty :: Text

Smart constructor for `Empty`.

foldrChunks :: (Text -> a -> a) -> a -> Text -> a

Consume the chunks of a lazy `Text` with a natural right fold.

foldlChunks :: (a -> Text -> a) -> a -> Text -> a

Consume the chunks of a lazy `Text` with a strict, tail-recursive, accumulating left fold.

# Data type invariant and abstraction functions

The data type invariant for lazy `Text`: Every `Text` is either `Empty` or consists of non-null `Text`s. All functions must preserve this, and the QC properties must check this.

strictInvariant :: Text -> Bool

Check the invariant strictly.

lazyInvariant :: Text -> Text

Check the invariant lazily.

showStructure :: Text -> String

Display the internal structure of a lazy `Text`.

# Chunk allocation sizes

defaultChunkSize :: Int

Currently set to 16 KiB, less the memory management overhead.

smallChunkSize :: Int

Currently set to 128 bytes, less the memory management overhead.

chunkOverhead :: Int

The memory management overhead. Currently this is tuned for GHC only.