/usr/share/doc/libghc-text-doc/html/src/Data-Text-Internal-Lazy.html is in libghc-text-doc 1.2.2.2-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 | <?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html>
<head>
<!-- Generated by HsColour, http://code.haskell.org/~malcolm/hscolour/ -->
<title>Data/Text/Internal/Lazy.hs</title>
<link type='text/css' rel='stylesheet' href='hscolour.css' />
</head>
<body>
<pre><a name="line-1"></a><span class='hs-comment'>{-# LANGUAGE BangPatterns, DeriveDataTypeable #-}</span>
<a name="line-2"></a><span class='hs-comment'>{-# OPTIONS_HADDOCK not-home #-}</span>
<a name="line-3"></a>
<a name="line-4"></a><span class='hs-comment'>-- |</span>
<a name="line-5"></a><span class='hs-comment'>-- Module : Data.Text.Internal.Lazy</span>
<a name="line-6"></a><span class='hs-comment'>-- Copyright : (c) 2009, 2010 Bryan O'Sullivan</span>
<a name="line-7"></a><span class='hs-comment'>--</span>
<a name="line-8"></a><span class='hs-comment'>-- License : BSD-style</span>
<a name="line-9"></a><span class='hs-comment'>-- Maintainer : bos@serpentine.com</span>
<a name="line-10"></a><span class='hs-comment'>-- Stability : experimental</span>
<a name="line-11"></a><span class='hs-comment'>-- Portability : GHC</span>
<a name="line-12"></a><span class='hs-comment'>--</span>
<a name="line-13"></a><span class='hs-comment'>-- /Warning/: this is an internal module, and does not have a stable</span>
<a name="line-14"></a><span class='hs-comment'>-- API or name. Functions in this module may not check or enforce</span>
<a name="line-15"></a><span class='hs-comment'>-- preconditions expected by public modules. Use at your own risk!</span>
<a name="line-16"></a><span class='hs-comment'>--</span>
<a name="line-17"></a><span class='hs-comment'>-- A module containing private 'Text' internals. This exposes the</span>
<a name="line-18"></a><span class='hs-comment'>-- 'Text' representation and low level construction functions.</span>
<a name="line-19"></a><span class='hs-comment'>-- Modules which extend the 'Text' system may need to use this module.</span>
<a name="line-20"></a>
<a name="line-21"></a><span class='hs-keyword'>module</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span><span class='hs-varop'>.</span><span class='hs-conid'>Lazy</span>
<a name="line-22"></a> <span class='hs-layout'>(</span>
<a name="line-23"></a> <span class='hs-conid'>Text</span><span class='hs-layout'>(</span><span class='hs-keyglyph'>..</span><span class='hs-layout'>)</span>
<a name="line-24"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>chunk</span>
<a name="line-25"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>empty</span>
<a name="line-26"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>foldrChunks</span>
<a name="line-27"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>foldlChunks</span>
<a name="line-28"></a> <span class='hs-comment'>-- * Data type invariant and abstraction functions</span>
<a name="line-29"></a>
<a name="line-30"></a> <span class='hs-comment'>-- $invariant</span>
<a name="line-31"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>strictInvariant</span>
<a name="line-32"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>lazyInvariant</span>
<a name="line-33"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>showStructure</span>
<a name="line-34"></a>
<a name="line-35"></a> <span class='hs-comment'>-- * Chunk allocation sizes</span>
<a name="line-36"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>defaultChunkSize</span>
<a name="line-37"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>smallChunkSize</span>
<a name="line-38"></a> <span class='hs-layout'>,</span> <span class='hs-varid'>chunkOverhead</span>
<a name="line-39"></a> <span class='hs-layout'>)</span> <span class='hs-keyword'>where</span>
<a name="line-40"></a>
<a name="line-41"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-conid'>()</span>
<a name="line-42"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span><span class='hs-varop'>.</span><span class='hs-conid'>Unsafe</span><span class='hs-varop'>.</span><span class='hs-conid'>Shift</span> <span class='hs-layout'>(</span><span class='hs-varid'>shiftL</span><span class='hs-layout'>)</span>
<a name="line-43"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Typeable</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-44"></a><span class='hs-keyword'>import</span> <span class='hs-conid'>Foreign</span><span class='hs-varop'>.</span><span class='hs-conid'>Storable</span> <span class='hs-layout'>(</span><span class='hs-varid'>sizeOf</span><span class='hs-layout'>)</span>
<a name="line-45"></a><span class='hs-keyword'>import</span> <span class='hs-keyword'>qualified</span> <span class='hs-conid'>Data</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span><span class='hs-varop'>.</span><span class='hs-conid'>Internal</span> <span class='hs-keyword'>as</span> <span class='hs-conid'>T</span>
<a name="line-46"></a>
<a name="line-47"></a><a name="Text"></a><span class='hs-keyword'>data</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Empty</span>
<a name="line-48"></a> <span class='hs-keyglyph'>|</span> <span class='hs-conid'>Chunk</span> <span class='hs-comment'>{-# UNPACK #-}</span> <span class='hs-varop'>!</span><span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-conid'>Text</span>
<a name="line-49"></a> <span class='hs-keyword'>deriving</span> <span class='hs-layout'>(</span><span class='hs-conid'>Typeable</span><span class='hs-layout'>)</span>
<a name="line-50"></a>
<a name="line-51"></a><span class='hs-comment'>-- $invariant</span>
<a name="line-52"></a><span class='hs-comment'>--</span>
<a name="line-53"></a><span class='hs-comment'>-- The data type invariant for lazy 'Text': Every 'Text' is either 'Empty' or</span>
<a name="line-54"></a><span class='hs-comment'>-- consists of non-null 'T.Text's. All functions must preserve this,</span>
<a name="line-55"></a><span class='hs-comment'>-- and the QC properties must check this.</span>
<a name="line-56"></a>
<a name="line-57"></a><a name="strictInvariant"></a><span class='hs-comment'>-- | Check the invariant strictly.</span>
<a name="line-58"></a><span class='hs-definition'>strictInvariant</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Bool</span>
<a name="line-59"></a><span class='hs-definition'>strictInvariant</span> <span class='hs-conid'>Empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>True</span>
<a name="line-60"></a><span class='hs-definition'>strictInvariant</span> <span class='hs-varid'>x</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>Chunk</span> <span class='hs-layout'>(</span><span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>len</span><span class='hs-layout'>)</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span>
<a name="line-61"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>len</span> <span class='hs-varop'>></span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>strictInvariant</span> <span class='hs-varid'>cs</span>
<a name="line-62"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-varop'>$</span> <span class='hs-str'>"Data.Text.Lazy: invariant violation: "</span>
<a name="line-63"></a> <span class='hs-varop'>++</span> <span class='hs-varid'>showStructure</span> <span class='hs-varid'>x</span>
<a name="line-64"></a>
<a name="line-65"></a><a name="lazyInvariant"></a><span class='hs-comment'>-- | Check the invariant lazily.</span>
<a name="line-66"></a><span class='hs-definition'>lazyInvariant</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Text</span>
<a name="line-67"></a><span class='hs-definition'>lazyInvariant</span> <span class='hs-conid'>Empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Empty</span>
<a name="line-68"></a><span class='hs-definition'>lazyInvariant</span> <span class='hs-varid'>x</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>Chunk</span> <span class='hs-varid'>c</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>len</span><span class='hs-layout'>)</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span>
<a name="line-69"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>len</span> <span class='hs-varop'>></span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Chunk</span> <span class='hs-varid'>c</span> <span class='hs-layout'>(</span><span class='hs-varid'>lazyInvariant</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span>
<a name="line-70"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>error</span> <span class='hs-varop'>$</span> <span class='hs-str'>"Data.Text.Lazy: invariant violation: "</span>
<a name="line-71"></a> <span class='hs-varop'>++</span> <span class='hs-varid'>showStructure</span> <span class='hs-varid'>x</span>
<a name="line-72"></a>
<a name="line-73"></a><a name="showStructure"></a><span class='hs-comment'>-- | Display the internal structure of a lazy 'Text'.</span>
<a name="line-74"></a><span class='hs-definition'>showStructure</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>String</span>
<a name="line-75"></a><span class='hs-definition'>showStructure</span> <span class='hs-conid'>Empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"Empty"</span>
<a name="line-76"></a><span class='hs-definition'>showStructure</span> <span class='hs-layout'>(</span><span class='hs-conid'>Chunk</span> <span class='hs-varid'>t</span> <span class='hs-conid'>Empty</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-str'>"Chunk "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>t</span> <span class='hs-varop'>++</span> <span class='hs-str'>" Empty"</span>
<a name="line-77"></a><span class='hs-definition'>showStructure</span> <span class='hs-layout'>(</span><span class='hs-conid'>Chunk</span> <span class='hs-varid'>t</span> <span class='hs-varid'>ts</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span>
<a name="line-78"></a> <span class='hs-str'>"Chunk "</span> <span class='hs-varop'>++</span> <span class='hs-varid'>show</span> <span class='hs-varid'>t</span> <span class='hs-varop'>++</span> <span class='hs-str'>" ("</span> <span class='hs-varop'>++</span> <span class='hs-varid'>showStructure</span> <span class='hs-varid'>ts</span> <span class='hs-varop'>++</span> <span class='hs-str'>")"</span>
<a name="line-79"></a>
<a name="line-80"></a><a name="chunk"></a><span class='hs-comment'>-- | Smart constructor for 'Chunk'. Guarantees the data type invariant.</span>
<a name="line-81"></a><span class='hs-definition'>chunk</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Text</span>
<a name="line-82"></a><span class='hs-comment'>{-# INLINE chunk #-}</span>
<a name="line-83"></a><span class='hs-definition'>chunk</span> <span class='hs-varid'>t</span><span class='hs-keyglyph'>@</span><span class='hs-layout'>(</span><span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-keyword'>_</span> <span class='hs-keyword'>_</span> <span class='hs-varid'>len</span><span class='hs-layout'>)</span> <span class='hs-varid'>ts</span> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>len</span> <span class='hs-varop'>==</span> <span class='hs-num'>0</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>ts</span>
<a name="line-84"></a> <span class='hs-keyglyph'>|</span> <span class='hs-varid'>otherwise</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Chunk</span> <span class='hs-varid'>t</span> <span class='hs-varid'>ts</span>
<a name="line-85"></a>
<a name="line-86"></a><a name="empty"></a><span class='hs-comment'>-- | Smart constructor for 'Empty'.</span>
<a name="line-87"></a><span class='hs-definition'>empty</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Text</span>
<a name="line-88"></a><span class='hs-comment'>{-# INLINE [0] empty #-}</span>
<a name="line-89"></a><span class='hs-definition'>empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-conid'>Empty</span>
<a name="line-90"></a>
<a name="line-91"></a><a name="foldrChunks"></a><span class='hs-comment'>-- | Consume the chunks of a lazy 'Text' with a natural right fold.</span>
<a name="line-92"></a><span class='hs-definition'>foldrChunks</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span>
<a name="line-93"></a><span class='hs-definition'>foldrChunks</span> <span class='hs-varid'>f</span> <span class='hs-varid'>z</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>go</span>
<a name="line-94"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>go</span> <span class='hs-conid'>Empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>z</span>
<a name="line-95"></a> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-conid'>Chunk</span> <span class='hs-varid'>c</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>f</span> <span class='hs-varid'>c</span> <span class='hs-layout'>(</span><span class='hs-varid'>go</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span>
<a name="line-96"></a><span class='hs-comment'>{-# INLINE foldrChunks #-}</span>
<a name="line-97"></a>
<a name="line-98"></a><a name="foldlChunks"></a><span class='hs-comment'>-- | Consume the chunks of a lazy 'Text' with a strict, tail-recursive,</span>
<a name="line-99"></a><span class='hs-comment'>-- accumulating left fold.</span>
<a name="line-100"></a><span class='hs-definition'>foldlChunks</span> <span class='hs-keyglyph'>::</span> <span class='hs-layout'>(</span><span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-></span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-></span> <span class='hs-varid'>a</span>
<a name="line-101"></a><span class='hs-definition'>foldlChunks</span> <span class='hs-varid'>f</span> <span class='hs-varid'>z</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>go</span> <span class='hs-varid'>z</span>
<a name="line-102"></a> <span class='hs-keyword'>where</span> <span class='hs-varid'>go</span> <span class='hs-varop'>!</span><span class='hs-varid'>a</span> <span class='hs-conid'>Empty</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>a</span>
<a name="line-103"></a> <span class='hs-varid'>go</span> <span class='hs-varop'>!</span><span class='hs-varid'>a</span> <span class='hs-layout'>(</span><span class='hs-conid'>Chunk</span> <span class='hs-varid'>c</span> <span class='hs-varid'>cs</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>go</span> <span class='hs-layout'>(</span><span class='hs-varid'>f</span> <span class='hs-varid'>a</span> <span class='hs-varid'>c</span><span class='hs-layout'>)</span> <span class='hs-varid'>cs</span>
<a name="line-104"></a><span class='hs-comment'>{-# INLINE foldlChunks #-}</span>
<a name="line-105"></a>
<a name="line-106"></a><a name="defaultChunkSize"></a><span class='hs-comment'>-- | Currently set to 16 KiB, less the memory management overhead.</span>
<a name="line-107"></a><span class='hs-definition'>defaultChunkSize</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span>
<a name="line-108"></a><span class='hs-definition'>defaultChunkSize</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>16384</span> <span class='hs-comment'>-</span> <span class='hs-varid'>chunkOverhead</span>
<a name="line-109"></a><span class='hs-comment'>{-# INLINE defaultChunkSize #-}</span>
<a name="line-110"></a>
<a name="line-111"></a><a name="smallChunkSize"></a><span class='hs-comment'>-- | Currently set to 128 bytes, less the memory management overhead.</span>
<a name="line-112"></a><span class='hs-definition'>smallChunkSize</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span>
<a name="line-113"></a><span class='hs-definition'>smallChunkSize</span> <span class='hs-keyglyph'>=</span> <span class='hs-num'>128</span> <span class='hs-comment'>-</span> <span class='hs-varid'>chunkOverhead</span>
<a name="line-114"></a><span class='hs-comment'>{-# INLINE smallChunkSize #-}</span>
<a name="line-115"></a>
<a name="line-116"></a><a name="chunkOverhead"></a><span class='hs-comment'>-- | The memory management overhead. Currently this is tuned for GHC only.</span>
<a name="line-117"></a><span class='hs-definition'>chunkOverhead</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span>
<a name="line-118"></a><span class='hs-definition'>chunkOverhead</span> <span class='hs-keyglyph'>=</span> <span class='hs-varid'>sizeOf</span> <span class='hs-layout'>(</span><span class='hs-varid'>undefined</span> <span class='hs-keyglyph'>::</span> <span class='hs-conid'>Int</span><span class='hs-layout'>)</span> <span class='hs-varop'>`shiftL`</span> <span class='hs-num'>1</span>
<a name="line-119"></a><span class='hs-comment'>{-# INLINE chunkOverhead #-}</span>
</pre></body>
</html>
|