You should not use this module unless you are determined to monkey with the internals, as the functions here do just about nothing to preserve data invariants. You have been warned!
Invariants that all functions must maintain:
- Since the
Texttype uses UTF-16 internally, it cannot represent characters in the reserved surrogate code point range U+D800 to U+DFFF. To maintain this invariant, the
Charvalues in this range to the replacement character (U+FFFD, '�').
- A leading (or "high") surrogate code unit (0xD800–0xDBFF) must always be followed by a trailing (or "low") surrogate code unit (0xDC00-0xDFFF). A trailing surrogate code unit must always be preceded by a leading surrogate code unit.
A space efficient, packed, unboxed Unicode text type.
This instance preserves data abstraction at the cost of inefficiency. We omit reflection services for the sake of data abstraction.
This instance was created by copying the updated behavior of
Original discussion is archived here:
The followup discussion that changed the behavior of
Text without invisibly pinning its byte array in
memory if its length has dwindled to zero.
UTF-16 surrogate code points are not included in the set of Unicode
scalar values, but are unfortunately admitted as valid
values by Haskell. They cannot be represented in a
function remaps those code points to the Unicode replacement
character (U+FFFD, '�'), and leaves other code points
Code that must be here for accessibility
Apply a function to the first element of an optional pair.