on master help sign in
Rename the last set of internal modules

--HG-- rename : Data/Text/Util.hs => Data/Text/Internal/Functions.hs rename : Data/Text/Lazy/Internal.hs => Data/Text/Internal/Lazy.hs rename : Data/Text/Private.hs => Data/Text/Internal/Private.hs rename : Data/Text/Search.hs => Data/Text/Internal/Search.hs rename : Data/Text/Unsafe/Base.hs => Data/Text/Internal/Unsafe.hs rename : Data/Text/UnsafeChar.hs => Data/Text/Internal/Unsafe/Char.hs rename : Data/Text/UnsafeShift.hs => Data/Text/Internal/Unsafe/Shift.hs

commit717be11e02bca543fe7aaf3f3f65819c1de1cec4 authorBryan O'Sullivan <bos@serpentine.com> dateWed 4 Dec 2013, 16:00 (13 years ago) parentc689bc8
29 files changed+193−171
Data/Text.hs+5−5 Data/Text/Array.hs+2−2 Data/Text/Encoding.hs+3−3 Data/Text/Internal.hs+1−1 Data/Text/Internal/Builder.hs+3−3 Data/Text/Internal/Encoding/Fusion.hs+2−2 Data/Text/Internal/Encoding/Fusion/Common.hs+2−2 Data/Text/Internal/Encoding/Utf8.hs+2−2 Data/Text/Util.hs → Data/Text/Internal/Functions.hs+2−2 Data/Text/Internal/Fusion.hs+3−3 Data/Text/Internal/Lazy.hs+118 Data/Text/Internal/Lazy/Encoding/Fusion.hs+2−2 Data/Text/Internal/Lazy/Fusion.hs+3−3 Data/Text/Internal/Lazy/Search.hs+2−2 Data/Text/Private.hs → Data/Text/Internal/Private.hs+2−2 Data/Text/Search.hs → Data/Text/Internal/Search.hs+3−3 Data/Text/Unsafe/Base.hs → Data/Text/Internal/Unsafe.hs+2−2 Data/Text/UnsafeChar.hs → Data/Text/Internal/Unsafe/Char.hs+3−3 Data/Text/UnsafeShift.hs → Data/Text/Internal/Unsafe/Shift.hs+2−2 Data/Text/Lazy.hs+3−3 Data/Text/Lazy/Encoding.hs+1−1 Data/Text/Lazy/IO.hs+1−1 Data/Text/Lazy/Internal.hs+6−103 Data/Text/Read.hs+1−1 Data/Text/Unsafe.hs+2−2 tests/Tests/Properties.hs+2−2 tests/Tests/QuickCheckUtils.hs+1−1 tests/text-tests.cabal+7−7 text.cabal+7−6
Data/Text.hs+5−5
@@ -211,15 +211,15 @@ import Data.String (IsString(..))
211211import qualified Data.Text.Internal.Fusion as S
212212import qualified Data.Text.Internal.Fusion.Common as S
213213import Data.Text.Internal.Fusion (stream, reverseStream, unstream)
214−import Data.Text.Private (span_)
214+import Data.Text.Internal.Private (span_)
215215import Data.Text.Internal (Text(..), empty, firstf, safe, text, textP)
216216import qualified Prelude as P
217217import Data.Text.Unsafe (Iter(..), iter, iter_, lengthWord16, reverseIter,
218218 unsafeHead, unsafeTail)
219−import Data.Text.UnsafeChar (unsafeChr)
220−import qualified Data.Text.Util as U
219+import Data.Text.Internal.Unsafe.Char (unsafeChr)
220+import qualified Data.Text.Internal.Functions as F
221221import qualified Data.Text.Internal.Encoding.Utf16 as U16
222−import Data.Text.Search (indices)
222+import Data.Text.Internal.Search (indices)
223223#if defined(__HADDOCK__)
224224import Data.ByteString (ByteString)
225225import qualified Data.Text.Lazy as L
@@ -597,7 +597,7 @@ map f t = unstream (S.map (safe . f) (stream t))
597597-- 'Text's and concatenates the list after interspersing the first
598598-- argument between each element of the list.
599599intercalate :: Text -> [Text] -> Text
600−intercalate t = concat . (U.intersperse t)
600+intercalate t = concat . (F.intersperse t)
601601{-# INLINE intercalate #-}
602602
603603-- | /O(n)/ The 'intersperse' function takes a character and places it
Data/Text/Array.hs+2−2
@@ -66,8 +66,8 @@ import Control.Monad.ST.Unsafe (unsafeIOToST)
6666import Control.Monad.ST (unsafeIOToST)
6767#endif
6868import Data.Bits ((.&.), xor)
69−import Data.Text.Unsafe.Base (inlinePerformIO)
70−import Data.Text.UnsafeShift (shiftL, shiftR)
69+import Data.Text.Internal.Unsafe (inlinePerformIO)
70+import Data.Text.Internal.Unsafe.Shift (shiftL, shiftR)
7171#if __GLASGOW_HASKELL__ >= 703
7272import Foreign.C.Types (CInt(CInt), CSize(CSize))
7373#else
Data/Text/Encoding.hs+3−3
@@ -70,9 +70,9 @@ import Data.ByteString.Internal as B
7070import Data.Text ()
7171import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
7272import Data.Text.Internal (Text(..), safe, textP)
73−import Data.Text.Private (runText)
74−import Data.Text.UnsafeChar (ord, unsafeWrite)
75−import Data.Text.UnsafeShift (shiftL, shiftR)
73+import Data.Text.Internal.Private (runText)
74+import Data.Text.Internal.Unsafe.Char (ord, unsafeWrite)
75+import Data.Text.Internal.Unsafe.Shift (shiftL, shiftR)
7676import Data.Word (Word8, Word32)
7777import Foreign.C.Types (CSize)
7878import Foreign.ForeignPtr (withForeignPtr)
Data/Text/Internal.hs+1−1
@@ -43,7 +43,7 @@ import Control.Exception (assert)
4343#endif
4444import Data.Bits ((.&.))
4545import qualified Data.Text.Array as A
46−import Data.Text.UnsafeChar (ord)
46+import Data.Text.Internal.Unsafe.Char (ord)
4747import Data.Typeable (Typeable)
4848
4949-- | A space efficient, packed, unboxed Unicode text type.
Data/Text/Internal/Builder.hs+3−3
@@ -56,10 +56,10 @@ import Control.Monad.ST (ST, runST)
5656import Data.Bits ((.&.))
5757import Data.Monoid (Monoid(..))
5858import Data.Text.Internal (Text(..))
59−import Data.Text.Lazy.Internal (smallChunkSize)
59+import Data.Text.Internal.Lazy (smallChunkSize)
6060import Data.Text.Unsafe (inlineInterleaveST)
61−import Data.Text.UnsafeChar (ord, unsafeWrite)
62−import Data.Text.UnsafeShift (shiftR)
61+import Data.Text.Internal.Unsafe.Char (ord, unsafeWrite)
62+import Data.Text.Internal.Unsafe.Shift (shiftR)
6363import Prelude hiding (map, putChar)
6464
6565import qualified Data.String as String
Data/Text/Internal/Encoding/Fusion.hs+2−2
@@ -39,8 +39,8 @@ import Data.Text.Internal.Fusion (Step(..), Stream(..))
3939import Data.Text.Internal.Fusion.Size
4040import Data.Text.Encoding.Error
4141import Data.Text.Internal.Encoding.Fusion.Common
42−import Data.Text.UnsafeChar (unsafeChr, unsafeChr8, unsafeChr32)
43−import Data.Text.UnsafeShift (shiftL, shiftR)
42+import Data.Text.Internal.Unsafe.Char (unsafeChr, unsafeChr8, unsafeChr32)
43+import Data.Text.Internal.Unsafe.Shift (shiftL, shiftR)
4444import Data.Word (Word8, Word16, Word32)
4545import Foreign.ForeignPtr (withForeignPtr, ForeignPtr)
4646import Foreign.Storable (pokeByteOff)
Data/Text/Internal/Encoding/Fusion/Common.hs+2−2
@@ -30,8 +30,8 @@ module Data.Text.Internal.Encoding.Fusion.Common
3030import Data.Bits ((.&.))
3131import Data.Text.Internal.Fusion (Step(..), Stream(..))
3232import Data.Text.Internal.Fusion.Types (RS(..))
33−import Data.Text.UnsafeChar (ord)
34−import Data.Text.UnsafeShift (shiftR)
33+import Data.Text.Internal.Unsafe.Char (ord)
34+import Data.Text.Internal.Unsafe.Shift (shiftR)
3535import Data.Word (Word8)
3636
3737restreamUtf16BE :: Stream Char -> Stream Word8
Data/Text/Internal/Encoding/Utf8.hs+2−2
@@ -34,8 +34,8 @@ module Data.Text.Internal.Encoding.Utf8
3434import Control.Exception (assert)
3535#endif
3636import Data.Bits ((.&.))
37−import Data.Text.UnsafeChar (ord)
38−import Data.Text.UnsafeShift (shiftR)
37+import Data.Text.Internal.Unsafe.Char (ord)
38+import Data.Text.Internal.Unsafe.Shift (shiftR)
3939import GHC.Exts
4040import GHC.Word (Word8(..))
4141
Data/Text/Util.hs → Data/Text/Internal/Functions.hsrenamed+2−2
@@ -1,7 +1,7 @@
11{-# LANGUAGE CPP, DeriveDataTypeable #-}
22
33-- |
4−-- Module : Data.Text.Util
4+-- Module : Data.Text.Internal.Functions
55-- Copyright : 2010 Bryan O'Sullivan
66--
77-- License : BSD-style
@@ -11,7 +11,7 @@
1111--
1212-- Useful functions.
1313
14−module Data.Text.Util
14+module Data.Text.Internal.Functions
1515 (
1616 intersperse
1717 ) where
Data/Text/Internal/Fusion.hs+3−3
@@ -51,9 +51,9 @@ import Prelude (Bool(..), Char, Maybe(..), Monad(..), Int,
5151 fromIntegral, otherwise)
5252import Data.Bits ((.&.))
5353import Data.Text.Internal (Text(..))
54−import Data.Text.Private (runText)
55−import Data.Text.UnsafeChar (ord, unsafeChr, unsafeWrite)
56−import Data.Text.UnsafeShift (shiftL, shiftR)
54+import Data.Text.Internal.Private (runText)
55+import Data.Text.Internal.Unsafe.Char (ord, unsafeChr, unsafeWrite)
56+import Data.Text.Internal.Unsafe.Shift (shiftL, shiftR)
5757import qualified Data.Text.Array as A
5858import qualified Data.Text.Internal.Fusion.Common as S
5959import Data.Text.Internal.Fusion.Types
Data/Text/Internal/Lazy.hsnew file+118
@@ -0,0 +1,118 @@
1+{-# LANGUAGE BangPatterns, DeriveDataTypeable #-}
2+-- |
3+-- Module : Data.Text.Internal.Lazy
4+-- Copyright : (c) 2009, 2010 Bryan O'Sullivan
5+--
6+-- License : BSD-style
7+-- Maintainer : bos@serpentine.com, rtomharper@googlemail.com,
8+-- duncan@haskell.org
9+-- Stability : experimental
10+-- Portability : GHC
11+--
12+-- A module containing private 'Text' internals. This exposes the
13+-- 'Text' representation and low level construction functions.
14+-- Modules which extend the 'Text' system may need to use this module.
15+--
16+-- You should not use this module unless you are determined to monkey
17+-- with the internals, as the functions here do just about nothing to
18+-- preserve data invariants. You have been warned!
19+
20+module Data.Text.Internal.Lazy
21+ (
22+ Text(..)
23+ , chunk
24+ , empty
25+ , foldrChunks
26+ , foldlChunks
27+ -- * Data type invariant and abstraction functions
28+
29+ -- $invariant
30+ , strictInvariant
31+ , lazyInvariant
32+ , showStructure
33+
34+ -- * Chunk allocation sizes
35+ , defaultChunkSize
36+ , smallChunkSize
37+ , chunkOverhead
38+ ) where
39+
40+import Data.Text ()
41+import Data.Text.Internal.Unsafe.Shift (shiftL)
42+import Data.Typeable (Typeable)
43+import Foreign.Storable (sizeOf)
44+import qualified Data.Text.Internal as T
45+
46+data Text = Empty
47+ | Chunk {-# UNPACK #-} !T.Text Text
48+ deriving (Typeable)
49+
50+-- $invariant
51+--
52+-- The data type invariant for lazy 'Text': Every 'Text' is either 'Empty' or
53+-- consists of non-null 'T.Text's. All functions must preserve this,
54+-- and the QC properties must check this.
55+
56+-- | Check the invariant strictly.
57+strictInvariant :: Text -> Bool
58+strictInvariant Empty = True
59+strictInvariant x@(Chunk (T.Text _ _ len) cs)
60+ | len > 0 = strictInvariant cs
61+ | otherwise = error $ "Data.Text.Lazy: invariant violation: "
62+ ++ showStructure x
63+
64+-- | Check the invariant lazily.
65+lazyInvariant :: Text -> Text
66+lazyInvariant Empty = Empty
67+lazyInvariant x@(Chunk c@(T.Text _ _ len) cs)
68+ | len > 0 = Chunk c (lazyInvariant cs)
69+ | otherwise = error $ "Data.Text.Lazy: invariant violation: "
70+ ++ showStructure x
71+
72+-- | Display the internal structure of a lazy 'Text'.
73+showStructure :: Text -> String
74+showStructure Empty = "Empty"
75+showStructure (Chunk t Empty) = "Chunk " ++ show t ++ " Empty"
76+showStructure (Chunk t ts) =
77+ "Chunk " ++ show t ++ " (" ++ showStructure ts ++ ")"
78+
79+-- | Smart constructor for 'Chunk'. Guarantees the data type invariant.
80+chunk :: T.Text -> Text -> Text
81+{-# INLINE chunk #-}
82+chunk t@(T.Text _ _ len) ts | len == 0 = ts
83+ | otherwise = Chunk t ts
84+
85+-- | Smart constructor for 'Empty'.
86+empty :: Text
87+{-# INLINE [0] empty #-}
88+empty = Empty
89+
90+-- | Consume the chunks of a lazy 'Text' with a natural right fold.
91+foldrChunks :: (T.Text -> a -> a) -> a -> Text -> a
92+foldrChunks f z = go
93+ where go Empty = z
94+ go (Chunk c cs) = f c (go cs)
95+{-# INLINE foldrChunks #-}
96+
97+-- | Consume the chunks of a lazy 'Text' with a strict, tail-recursive,
98+-- accumulating left fold.
99+foldlChunks :: (a -> T.Text -> a) -> a -> Text -> a
100+foldlChunks f z = go z
101+ where go !a Empty = a
102+ go !a (Chunk c cs) = go (f a c) cs
103+{-# INLINE foldlChunks #-}
104+
105+-- | Currently set to 16 KiB, less the memory management overhead.
106+defaultChunkSize :: Int
107+defaultChunkSize = 16384 - chunkOverhead
108+{-# INLINE defaultChunkSize #-}
109+
110+-- | Currently set to 128 bytes, less the memory management overhead.
111+smallChunkSize :: Int
112+smallChunkSize = 128 - chunkOverhead
113+{-# INLINE smallChunkSize #-}
114+
115+-- | The memory management overhead. Currently this is tuned for GHC only.
116+chunkOverhead :: Int
117+chunkOverhead = sizeOf (undefined :: Int) `shiftL` 1
118+{-# INLINE chunkOverhead #-}
Data/Text/Internal/Lazy/Encoding/Fusion.hs+2−2
@@ -36,8 +36,8 @@ import Data.Text.Internal.Encoding.Fusion.Common
3636import Data.Text.Encoding.Error
3737import Data.Text.Internal.Fusion (Step(..), Stream(..))
3838import Data.Text.Internal.Fusion.Size
39−import Data.Text.UnsafeChar (unsafeChr, unsafeChr8, unsafeChr32)
40−import Data.Text.UnsafeShift (shiftL)
39+import Data.Text.Internal.Unsafe.Char (unsafeChr, unsafeChr8, unsafeChr32)
40+import Data.Text.Internal.Unsafe.Shift (shiftL)
4141import Data.Word (Word8, Word16, Word32)
4242import qualified Data.Text.Internal.Encoding.Utf8 as U8
4343import qualified Data.Text.Internal.Encoding.Utf16 as U16
Data/Text/Internal/Lazy/Fusion.hs+3−3
@@ -27,11 +27,11 @@ import qualified Data.Text.Internal.Fusion.Common as S
2727import Control.Monad.ST (runST)
2828import Data.Text.Internal.Fusion.Types
2929import Data.Text.Internal.Fusion.Size (isEmpty, unknownSize)
30−import Data.Text.Lazy.Internal
30+import Data.Text.Internal.Lazy
3131import qualified Data.Text.Internal as I
3232import qualified Data.Text.Array as A
33−import Data.Text.UnsafeChar (unsafeWrite)
34−import Data.Text.UnsafeShift (shiftL)
33+import Data.Text.Internal.Unsafe.Char (unsafeWrite)
34+import Data.Text.Internal.Unsafe.Shift (shiftL)
3535import Data.Text.Unsafe (Iter(..), iter)
3636import Data.Int (Int64)
3737
Data/Text/Internal/Lazy/Search.hs+2−2
@@ -24,9 +24,9 @@ import Data.Int (Int64)
2424import Data.Word (Word16, Word64)
2525import qualified Data.Text.Internal as T
2626import Data.Text.Internal.Fusion.Types (PairS(..))
27−import Data.Text.Lazy.Internal (Text(..), foldlChunks)
27+import Data.Text.Internal.Lazy (Text(..), foldlChunks)
2828import Data.Bits ((.|.), (.&.))
29−import Data.Text.UnsafeShift (shiftL)
29+import Data.Text.Internal.Unsafe.Shift (shiftL)
3030
3131-- | /O(n+m)/ Find the offsets of all non-overlapping indices of
3232-- @needle@ within @haystack@.
Data/Text/Private.hs → Data/Text/Internal/Private.hsrenamed+2−2
@@ -1,7 +1,7 @@
11{-# LANGUAGE BangPatterns, Rank2Types, UnboxedTuples #-}
22
33-- |
4−-- Module : Data.Text.Private
4+-- Module : Data.Text.Internal.Private
55-- Copyright : (c) 2011 Bryan O'Sullivan
66--
77-- License : BSD-style
@@ -9,7 +9,7 @@
99-- Stability : experimental
1010-- Portability : GHC
1111
12−module Data.Text.Private
12+module Data.Text.Internal.Private
1313 (
1414 runText
1515 , span_
Data/Text/Search.hs → Data/Text/Internal/Search.hsrenamed+3−3
@@ -1,7 +1,7 @@
11{-# LANGUAGE BangPatterns, ScopedTypeVariables #-}
22
33-- |
4−-- Module : Data.Text.Search
4+-- Module : Data.Text.Internal.Search
55-- Copyright : (c) Bryan O'Sullivan 2009
66--
77-- License : BSD-style
@@ -27,7 +27,7 @@
2727-- * F. Lundh: The Fast Search Algorithm.
2828-- <http://effbot.org/zone/stringlib.htm> (2006)
2929
30−module Data.Text.Search
30+module Data.Text.Internal.Search
3131 (
3232 indices
3333 ) where
@@ -36,7 +36,7 @@ import qualified Data.Text.Array as A
3636import Data.Word (Word64)
3737import Data.Text.Internal (Text(..))
3838import Data.Bits ((.|.), (.&.))
39−import Data.Text.UnsafeShift (shiftL)
39+import Data.Text.Internal.Unsafe.Shift (shiftL)
4040
4141data T = {-# UNPACK #-} !Word64 :* {-# UNPACK #-} !Int
4242
Data/Text/Unsafe/Base.hs → Data/Text/Internal/Unsafe.hsrenamed+2−2
@@ -1,6 +1,6 @@
11{-# LANGUAGE CPP, MagicHash, UnboxedTuples #-}
22-- |
3−-- Module : Data.Text.Unsafe.Base
3+-- Module : Data.Text.Internal.Unsafe
44-- Copyright : (c) 2009, 2010, 2011 Bryan O'Sullivan
55-- License : BSD-style
66-- Maintainer : bos@serpentine.com, rtomharper@googlemail.com,
@@ -10,7 +10,7 @@
1010--
1111-- A module containing unsafe operations, for very very careful use in
1212-- heavily tested code.
13−module Data.Text.Unsafe.Base
13+module Data.Text.Internal.Unsafe
1414 (
1515 inlineInterleaveST
1616 , inlinePerformIO
Data/Text/UnsafeChar.hs → Data/Text/Internal/Unsafe/Char.hsrenamed+3−3
@@ -1,7 +1,7 @@
11{-# LANGUAGE CPP, MagicHash #-}
22
33-- |
4−-- Module : Data.Text.UnsafeChar
4+-- Module : Data.Text.Internal.Unsafe.Char
55-- Copyright : (c) 2008, 2009 Tom Harper,
66-- (c) 2009, 2010 Bryan O'Sullivan,
77-- (c) 2009 Duncan Coutts
@@ -13,7 +13,7 @@
1313-- Portability : GHC
1414--
1515-- Fast character manipulation functions.
16−module Data.Text.UnsafeChar
16+module Data.Text.Internal.Unsafe.Char
1717 (
1818 ord
1919 , unsafeChr
@@ -28,7 +28,7 @@ import Control.Exception (assert)
2828#endif
2929import Control.Monad.ST (ST)
3030import Data.Bits ((.&.))
31−import Data.Text.UnsafeShift (shiftR)
31+import Data.Text.Internal.Unsafe.Shift (shiftR)
3232import GHC.Exts (Char(..), Int(..), chr#, ord#, word2Int#)
3333import GHC.Word (Word8(..), Word16(..), Word32(..))
3434import qualified Data.Text.Array as A
Data/Text/UnsafeShift.hs → Data/Text/Internal/Unsafe/Shift.hsrenamed+2−2
@@ -1,7 +1,7 @@
11{-# LANGUAGE MagicHash #-}
22
33-- |
4−-- Module : Data.Text.UnsafeShift
4+-- Module : Data.Text.Internal.Unsafe.Shift
55-- Copyright : (c) Bryan O'Sullivan 2009
66--
77-- License : BSD-style
@@ -12,7 +12,7 @@
1212--
1313-- Fast, unchecked bit shifting functions.
1414
15−module Data.Text.UnsafeShift
15+module Data.Text.Internal.Unsafe.Shift
1616 (
1717 UnsafeShift(..)
1818 ) where
Data/Text/Lazy.hs+3−3
@@ -213,9 +213,9 @@ import qualified Data.Text.Unsafe as T
213213import qualified Data.Text.Internal.Lazy.Fusion as S
214214import Data.Text.Internal.Fusion.Types (PairS(..))
215215import Data.Text.Internal.Lazy.Fusion (stream, unstream)
216−import Data.Text.Lazy.Internal (Text(..), chunk, empty, foldlChunks, foldrChunks)
216+import Data.Text.Internal.Lazy (Text(..), chunk, empty, foldlChunks, foldrChunks)
217217import Data.Text.Internal (firstf, safe, textP)
218−import qualified Data.Text.Util as U
218+import qualified Data.Text.Internal.Functions as F
219219import Data.Text.Internal.Lazy.Search (indices)
220220#if __GLASGOW_HASKELL__ >= 702
221221import qualified GHC.CString as GHC
@@ -561,7 +561,7 @@ map f t = unstream (S.map (safe . f) (stream t))
561561-- 'Text's and concatenates the list after interspersing the first
562562-- argument between each element of the list.
563563intercalate :: Text -> [Text] -> Text
564−intercalate t = concat . (U.intersperse t)
564+intercalate t = concat . (F.intersperse t)
565565{-# INLINE intercalate #-}
566566
567567-- | /O(n)/ The 'intersperse' function takes a character and places it
Data/Text/Lazy/Encoding.hs+1−1
@@ -50,7 +50,7 @@ module Data.Text.Lazy.Encoding
5050
5151import Control.Exception (evaluate, try)
5252import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
53−import Data.Text.Lazy.Internal (Text(..), chunk, empty, foldrChunks)
53+import Data.Text.Internal.Lazy (Text(..), chunk, empty, foldrChunks)
5454import qualified Data.ByteString as S
5555import qualified Data.ByteString.Lazy as B
5656import qualified Data.ByteString.Lazy.Internal as B
Data/Text/Lazy/IO.hs+1−1
@@ -51,7 +51,7 @@ import qualified Control.Exception as E
5151import Control.Monad (when)
5252import Data.IORef (readIORef)
5353import Data.Text.Internal.IO (hGetLineWith, readChunk)
54−import Data.Text.Lazy.Internal (chunk, empty)
54+import Data.Text.Internal.Lazy (chunk, empty)
5555import GHC.IO.Buffer (isEmptyBuffer)
5656import GHC.IO.Exception (IOException(..), IOErrorType(..), ioException)
5757import GHC.IO.Handle.Internals (augmentIOError, hClose_help,
Data/Text/Lazy/Internal.hs+6−103
@@ -1,7 +1,7 @@
11{-# LANGUAGE BangPatterns, DeriveDataTypeable #-}
22-- |
33-- Module : Data.Text.Lazy.Internal
4−-- Copyright : (c) 2009, 2010 Bryan O'Sullivan
4+-- Copyright : (c) 2013 Bryan O'Sullivan
55--
66-- License : BSD-style
77-- Maintainer : bos@serpentine.com, rtomharper@googlemail.com,
@@ -9,110 +9,13 @@
99-- Stability : experimental
1010-- Portability : GHC
1111--
12−-- A module containing private 'Text' internals. This exposes the
13−-- 'Text' representation and low level construction functions.
14−-- Modules which extend the 'Text' system may need to use this module.
15−--
16−-- You should not use this module unless you are determined to monkey
17−-- with the internals, as the functions here do just about nothing to
18−-- preserve data invariants. You have been warned!
12+-- This module has been renamed to 'Data.Text.Internal.Lazy'. This
13+-- name for the module will be removed in the next major release.
1914
2015module Data.Text.Lazy.Internal
16+ {-# DEPRECATED "Use Data.Text.Internal.Lazy instead" #-}
2117 (
22− Text(..)
23− , chunk
24− , empty
25− , foldrChunks
26− , foldlChunks
27− -- * Data type invariant and abstraction functions
28−
29− -- $invariant
30− , strictInvariant
31− , lazyInvariant
32− , showStructure
33−
34− -- * Chunk allocation sizes
35− , defaultChunkSize
36− , smallChunkSize
37− , chunkOverhead
18+ module Data.Text.Internal.Lazy
3819 ) where
3920
40−import Data.Text ()
41−import Data.Text.UnsafeShift (shiftL)
42−import Data.Typeable (Typeable)
43−import Foreign.Storable (sizeOf)
44−import qualified Data.Text.Internal as T
45−
46−data Text = Empty
47− | Chunk {-# UNPACK #-} !T.Text Text
48− deriving (Typeable)
49−
50−-- $invariant
51−--
52−-- The data type invariant for lazy 'Text': Every 'Text' is either 'Empty' or
53−-- consists of non-null 'T.Text's. All functions must preserve this,
54−-- and the QC properties must check this.
55−
56−-- | Check the invariant strictly.
57−strictInvariant :: Text -> Bool
58−strictInvariant Empty = True
59−strictInvariant x@(Chunk (T.Text _ _ len) cs)
60− | len > 0 = strictInvariant cs
61− | otherwise = error $ "Data.Text.Lazy: invariant violation: "
62− ++ showStructure x
63−
64−-- | Check the invariant lazily.
65−lazyInvariant :: Text -> Text
66−lazyInvariant Empty = Empty
67−lazyInvariant x@(Chunk c@(T.Text _ _ len) cs)
68− | len > 0 = Chunk c (lazyInvariant cs)
69− | otherwise = error $ "Data.Text.Lazy: invariant violation: "
70− ++ showStructure x
71−
72−-- | Display the internal structure of a lazy 'Text'.
73−showStructure :: Text -> String
74−showStructure Empty = "Empty"
75−showStructure (Chunk t Empty) = "Chunk " ++ show t ++ " Empty"
76−showStructure (Chunk t ts) =
77− "Chunk " ++ show t ++ " (" ++ showStructure ts ++ ")"
78−
79−-- | Smart constructor for 'Chunk'. Guarantees the data type invariant.
80−chunk :: T.Text -> Text -> Text
81−{-# INLINE chunk #-}
82−chunk t@(T.Text _ _ len) ts | len == 0 = ts
83− | otherwise = Chunk t ts
84−
85−-- | Smart constructor for 'Empty'.
86−empty :: Text
87−{-# INLINE [0] empty #-}
88−empty = Empty
89−
90−-- | Consume the chunks of a lazy 'Text' with a natural right fold.
91−foldrChunks :: (T.Text -> a -> a) -> a -> Text -> a
92−foldrChunks f z = go
93− where go Empty = z
94− go (Chunk c cs) = f c (go cs)
95−{-# INLINE foldrChunks #-}
96−
97−-- | Consume the chunks of a lazy 'Text' with a strict, tail-recursive,
98−-- accumulating left fold.
99−foldlChunks :: (a -> T.Text -> a) -> a -> Text -> a
100−foldlChunks f z = go z
101− where go !a Empty = a
102− go !a (Chunk c cs) = go (f a c) cs
103−{-# INLINE foldlChunks #-}
104−
105−-- | Currently set to 16 KiB, less the memory management overhead.
106−defaultChunkSize :: Int
107−defaultChunkSize = 16384 - chunkOverhead
108−{-# INLINE defaultChunkSize #-}
109−
110−-- | Currently set to 128 bytes, less the memory management overhead.
111−smallChunkSize :: Int
112−smallChunkSize = 128 - chunkOverhead
113−{-# INLINE smallChunkSize #-}
114−
115−-- | The memory management overhead. Currently this is tuned for GHC only.
116−chunkOverhead :: Int
117−chunkOverhead = sizeOf (undefined :: Int) `shiftL` 1
118−{-# INLINE chunkOverhead #-}
21+import Data.Text.Internal.Lazy
Data/Text/Read.hs+1−1
@@ -28,7 +28,7 @@ import Data.Char (isDigit, isHexDigit, ord)
2828import Data.Int (Int8, Int16, Int32, Int64)
2929import Data.Ratio ((%))
3030import Data.Text as T
31−import Data.Text.Private (span_)
31+import Data.Text.Internal.Private (span_)
3232import Data.Word (Word, Word8, Word16, Word32, Word64)
3333
3434-- | Read some text. If the read succeeds, return its value and the
Data/Text/Unsafe.hs+2−2
@@ -31,8 +31,8 @@ import Control.Exception (assert)
3131#endif
3232import Data.Text.Internal.Encoding.Utf16 (chr2)
3333import Data.Text.Internal (Text(..))
34−import Data.Text.Unsafe.Base (inlineInterleaveST, inlinePerformIO)
35−import Data.Text.UnsafeChar (unsafeChr)
34+import Data.Text.Internal.Unsafe (inlineInterleaveST, inlinePerformIO)
35+import Data.Text.Internal.Unsafe.Char (unsafeChr)
3636import qualified Data.Text.Array as A
3737import GHC.IO (unsafeDupablePerformIO)
3838
tests/Tests/Properties.hs+2−2
@@ -24,7 +24,7 @@ import Data.Text.Foreign
2424import Data.Text.Internal.Fusion.Size
2525import Data.Text.Lazy.Read as TL
2626import Data.Text.Read as T
27−import Data.Text.Search (indices)
27+import Data.Text.Internal.Search (indices)
2828import Data.Word (Word, Word8, Word16, Word32, Word64)
2929import Numeric (showHex)
3030import Test.Framework (Test, testGroup)
@@ -46,7 +46,7 @@ import qualified Data.Text.Lazy.Encoding as EL
4646import qualified Data.Text.Internal.Lazy.Fusion as SL
4747import qualified Data.Text.Lazy.IO as TL
4848import qualified Data.Text.Internal.Lazy.Search as S (indices)
49−import qualified Data.Text.UnsafeShift as U
49+import qualified Data.Text.Internal.Unsafe.Shift as U
5050import qualified System.IO as IO
5151
5252import Tests.QuickCheckUtils
tests/Tests/QuickCheckUtils.hs+1−1
@@ -47,7 +47,7 @@ import qualified Data.Text.Internal.Fusion as TF
4747import qualified Data.Text.Internal.Fusion.Common as TF
4848import qualified Data.Text.Lazy as TL
4949import qualified Data.Text.Internal.Lazy.Fusion as TLF
50−import qualified Data.Text.Lazy.Internal as TL
50+import qualified Data.Text.Internal.Lazy as TL
5151import qualified System.IO as IO
5252
5353import Tests.Utils
tests/text-tests.cabal+7−7
@@ -96,17 +96,17 @@ library
9696 Data.Text.Internal.Lazy.Encoding.Fusion
9797 Data.Text.Internal.Lazy.Fusion
9898 Data.Text.Lazy.IO
99− Data.Text.Lazy.Internal
99+ Data.Text.Internal.Lazy
100100 Data.Text.Lazy.Read
101101 Data.Text.Internal.Lazy.Search
102− Data.Text.Private
102+ Data.Text.Internal.Private
103103 Data.Text.Read
104− Data.Text.Search
104+ Data.Text.Internal.Search
105105 Data.Text.Unsafe
106− Data.Text.Unsafe.Base
107− Data.Text.UnsafeChar
108− Data.Text.UnsafeShift
109− Data.Text.Util
106+ Data.Text.Internal.Unsafe
107+ Data.Text.Internal.Unsafe.Char
108+ Data.Text.Internal.Unsafe.Shift
109+ Data.Text.Internal.Functions
110110
111111 if flag(hpc)
112112 ghc-options:
text.cabal+7−6
@@ -89,6 +89,7 @@ library
8989 Data.Text.Lazy.Encoding
9090 Data.Text.Lazy.IO
9191 Data.Text.Lazy.Internal
92+ Data.Text.Internal.Lazy
9293 Data.Text.Lazy.Read
9394 Data.Text.Read
9495 Data.Text.Unsafe
@@ -111,12 +112,12 @@ library
111112 Data.Text.Internal.Lazy.Encoding.Fusion
112113 Data.Text.Internal.Lazy.Fusion
113114 Data.Text.Internal.Lazy.Search
114− Data.Text.Private
115− Data.Text.Search
116− Data.Text.Unsafe.Base
117− Data.Text.UnsafeChar
118− Data.Text.UnsafeShift
119− Data.Text.Util
115+ Data.Text.Internal.Private
116+ Data.Text.Internal.Search
117+ Data.Text.Internal.Unsafe
118+ Data.Text.Internal.Unsafe.Char
119+ Data.Text.Internal.Unsafe.Shift
120+ Data.Text.Internal.Functions
120121
121122 build-depends:
122123 array >= 0.3,