This file is indexed.

/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'>-&gt;</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'>&gt;</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'>-&gt;</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'>&gt;</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'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-&gt;</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'>-&gt;</span> <span class='hs-conid'>T</span><span class='hs-varop'>.</span><span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span><span class='hs-layout'>)</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-varid'>a</span> <span class='hs-keyglyph'>-&gt;</span> <span class='hs-conid'>Text</span> <span class='hs-keyglyph'>-&gt;</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>