on master help sign in
Rename the last set of internal modules
717be11Bryan O'Sullivan
Data/Text.hs+5−5
@@ -211,15 +211,15 @@ import Data.String (IsString(..))
211import qualified Data.Text.Internal.Fusion as S
211import qualified Data.Text.Internal.Fusion as S
212import qualified Data.Text.Internal.Fusion.Common as S
212import qualified Data.Text.Internal.Fusion.Common as S
213import Data.Text.Internal.Fusion (stream, reverseStream, unstream)
213import Data.Text.Internal.Fusion (stream, reverseStream, unstream)
214−import Data.Text.Private (span_)
214+import Data.Text.Internal.Private (span_)
215import Data.Text.Internal (Text(..), empty, firstf, safe, text, textP)
215import Data.Text.Internal (Text(..), empty, firstf, safe, text, textP)
216import qualified Prelude as P
216import qualified Prelude as P
217import Data.Text.Unsafe (Iter(..), iter, iter_, lengthWord16, reverseIter,
217import Data.Text.Unsafe (Iter(..), iter, iter_, lengthWord16, reverseIter,
218 unsafeHead, unsafeTail)
218 unsafeHead, unsafeTail)
219−import Data.Text.UnsafeChar (unsafeChr)
219+import Data.Text.Internal.Unsafe.Char (unsafeChr)
220−import qualified Data.Text.Util as U
220+import qualified Data.Text.Internal.Functions as F
221import qualified Data.Text.Internal.Encoding.Utf16 as U16
221import qualified Data.Text.Internal.Encoding.Utf16 as U16
222−import Data.Text.Search (indices)
222+import Data.Text.Internal.Search (indices)
223#if defined(__HADDOCK__)
223#if defined(__HADDOCK__)
224import Data.ByteString (ByteString)
224import Data.ByteString (ByteString)
225import qualified Data.Text.Lazy as L
225import qualified Data.Text.Lazy as L
@@ -597,7 +597,7 @@ map f t = unstream (S.map (safe . f) (stream t))
597-- 'Text's and concatenates the list after interspersing the first
597-- 'Text's and concatenates the list after interspersing the first
598-- argument between each element of the list.
598-- argument between each element of the list.
599intercalate :: Text -> [Text] -> Text
599intercalate :: Text -> [Text] -> Text
600−intercalate t = concat . (U.intersperse t)
600+intercalate t = concat . (F.intersperse t)
601{-# INLINE intercalate #-}
601{-# INLINE intercalate #-}
602
602
603-- | /O(n)/ The 'intersperse' function takes a character and places it
603-- | /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)
66import Control.Monad.ST (unsafeIOToST)
66import Control.Monad.ST (unsafeIOToST)
67#endif
67#endif
68import Data.Bits ((.&.), xor)
68import Data.Bits ((.&.), xor)
69−import Data.Text.Unsafe.Base (inlinePerformIO)
69+import Data.Text.Internal.Unsafe (inlinePerformIO)
70−import Data.Text.UnsafeShift (shiftL, shiftR)
70+import Data.Text.Internal.Unsafe.Shift (shiftL, shiftR)
71#if __GLASGOW_HASKELL__ >= 703
71#if __GLASGOW_HASKELL__ >= 703
72import Foreign.C.Types (CInt(CInt), CSize(CSize))
72import Foreign.C.Types (CInt(CInt), CSize(CSize))
73#else
73#else
Data/Text/Encoding.hs+3−3
@@ -70,9 +70,9 @@ import Data.ByteString.Internal as B
70import Data.Text ()
70import Data.Text ()
71import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
71import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
72import Data.Text.Internal (Text(..), safe, textP)
72import Data.Text.Internal (Text(..), safe, textP)
73−import Data.Text.Private (runText)
73+import Data.Text.Internal.Private (runText)
74−import Data.Text.UnsafeChar (ord, unsafeWrite)
74+import Data.Text.Internal.Unsafe.Char (ord, unsafeWrite)
75−import Data.Text.UnsafeShift (shiftL, shiftR)
75+import Data.Text.Internal.Unsafe.Shift (shiftL, shiftR)
76import Data.Word (Word8, Word32)
76import Data.Word (Word8, Word32)
77import Foreign.C.Types (CSize)
77import Foreign.C.Types (CSize)
78import Foreign.ForeignPtr (withForeignPtr)
78import Foreign.ForeignPtr (withForeignPtr)
Data/Text/Internal.hs+1−1
@@ -43,7 +43,7 @@ import Control.Exception (assert)
43#endif
43#endif
44import Data.Bits ((.&.))
44import Data.Bits ((.&.))
45import qualified Data.Text.Array as A
45import qualified Data.Text.Array as A
46−import Data.Text.UnsafeChar (ord)
46+import Data.Text.Internal.Unsafe.Char (ord)
47import Data.Typeable (Typeable)
47import Data.Typeable (Typeable)
48
48
49-- | A space efficient, packed, unboxed Unicode text type.
49-- | 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)
56import Data.Bits ((.&.))
56import Data.Bits ((.&.))
57import Data.Monoid (Monoid(..))
57import Data.Monoid (Monoid(..))
58import Data.Text.Internal (Text(..))
58import Data.Text.Internal (Text(..))
59−import Data.Text.Lazy.Internal (smallChunkSize)
59+import Data.Text.Internal.Lazy (smallChunkSize)
60import Data.Text.Unsafe (inlineInterleaveST)
60import Data.Text.Unsafe (inlineInterleaveST)
61−import Data.Text.UnsafeChar (ord, unsafeWrite)
61+import Data.Text.Internal.Unsafe.Char (ord, unsafeWrite)
62−import Data.Text.UnsafeShift (shiftR)
62+import Data.Text.Internal.Unsafe.Shift (shiftR)
63import Prelude hiding (map, putChar)
63import Prelude hiding (map, putChar)
64
64
65import qualified Data.String as String
65import qualified Data.String as String
Data/Text/Internal/Encoding/Fusion.hs+2−2
@@ -39,8 +39,8 @@ import Data.Text.Internal.Fusion (Step(..), Stream(..))
39import Data.Text.Internal.Fusion.Size
39import Data.Text.Internal.Fusion.Size
40import Data.Text.Encoding.Error
40import Data.Text.Encoding.Error
41import Data.Text.Internal.Encoding.Fusion.Common
41import Data.Text.Internal.Encoding.Fusion.Common
42−import Data.Text.UnsafeChar (unsafeChr, unsafeChr8, unsafeChr32)
42+import Data.Text.Internal.Unsafe.Char (unsafeChr, unsafeChr8, unsafeChr32)
43−import Data.Text.UnsafeShift (shiftL, shiftR)
43+import Data.Text.Internal.Unsafe.Shift (shiftL, shiftR)
44import Data.Word (Word8, Word16, Word32)
44import Data.Word (Word8, Word16, Word32)
45import Foreign.ForeignPtr (withForeignPtr, ForeignPtr)
45import Foreign.ForeignPtr (withForeignPtr, ForeignPtr)
46import Foreign.Storable (pokeByteOff)
46import Foreign.Storable (pokeByteOff)
Data/Text/Internal/Encoding/Fusion/Common.hs+2−2
@@ -30,8 +30,8 @@ module Data.Text.Internal.Encoding.Fusion.Common
30import Data.Bits ((.&.))
30import Data.Bits ((.&.))
31import Data.Text.Internal.Fusion (Step(..), Stream(..))
31import Data.Text.Internal.Fusion (Step(..), Stream(..))
32import Data.Text.Internal.Fusion.Types (RS(..))
32import Data.Text.Internal.Fusion.Types (RS(..))
33−import Data.Text.UnsafeChar (ord)
33+import Data.Text.Internal.Unsafe.Char (ord)
34−import Data.Text.UnsafeShift (shiftR)
34+import Data.Text.Internal.Unsafe.Shift (shiftR)
35import Data.Word (Word8)
35import Data.Word (Word8)
36
36
37restreamUtf16BE :: Stream Char -> Stream Word8
37restreamUtf16BE :: Stream Char -> Stream Word8
Data/Text/Internal/Encoding/Utf8.hs+2−2
@@ -34,8 +34,8 @@ module Data.Text.Internal.Encoding.Utf8
34import Control.Exception (assert)
34import Control.Exception (assert)
35#endif
35#endif
36import Data.Bits ((.&.))
36import Data.Bits ((.&.))
37−import Data.Text.UnsafeChar (ord)
37+import Data.Text.Internal.Unsafe.Char (ord)
38−import Data.Text.UnsafeShift (shiftR)
38+import Data.Text.Internal.Unsafe.Shift (shiftR)
39import GHC.Exts
39import GHC.Exts
40import GHC.Word (Word8(..))
40import GHC.Word (Word8(..))
41
41
Data/Text/Util.hs → Data/Text/Internal/Functions.hsrenamed+2−2
@@ -1,7 +1,7 @@
1{-# LANGUAGE CPP, DeriveDataTypeable #-}
1{-# LANGUAGE CPP, DeriveDataTypeable #-}
2
2
3-- |
3-- |
4−-- Module : Data.Text.Util
4+-- Module : Data.Text.Internal.Functions
5-- Copyright : 2010 Bryan O'Sullivan
5-- Copyright : 2010 Bryan O'Sullivan
6--
6--
7-- License : BSD-style
7-- License : BSD-style
@@ -11,7 +11,7 @@
11--
11--
12-- Useful functions.
12-- Useful functions.
13
13
14−module Data.Text.Util
14+module Data.Text.Internal.Functions
15 (
15 (
16 intersperse
16 intersperse
17 ) where
17 ) where
Data/Text/Internal/Fusion.hs+3−3
@@ -51,9 +51,9 @@ import Prelude (Bool(..), Char, Maybe(..), Monad(..), Int,
51 fromIntegral, otherwise)
51 fromIntegral, otherwise)
52import Data.Bits ((.&.))
52import Data.Bits ((.&.))
53import Data.Text.Internal (Text(..))
53import Data.Text.Internal (Text(..))
54−import Data.Text.Private (runText)
54+import Data.Text.Internal.Private (runText)
55−import Data.Text.UnsafeChar (ord, unsafeChr, unsafeWrite)
55+import Data.Text.Internal.Unsafe.Char (ord, unsafeChr, unsafeWrite)
56−import Data.Text.UnsafeShift (shiftL, shiftR)
56+import Data.Text.Internal.Unsafe.Shift (shiftL, shiftR)
57import qualified Data.Text.Array as A
57import qualified Data.Text.Array as A
58import qualified Data.Text.Internal.Fusion.Common as S
58import qualified Data.Text.Internal.Fusion.Common as S
59import Data.Text.Internal.Fusion.Types
59import 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
36import Data.Text.Encoding.Error
36import Data.Text.Encoding.Error
37import Data.Text.Internal.Fusion (Step(..), Stream(..))
37import Data.Text.Internal.Fusion (Step(..), Stream(..))
38import Data.Text.Internal.Fusion.Size
38import Data.Text.Internal.Fusion.Size
39−import Data.Text.UnsafeChar (unsafeChr, unsafeChr8, unsafeChr32)
39+import Data.Text.Internal.Unsafe.Char (unsafeChr, unsafeChr8, unsafeChr32)
40−import Data.Text.UnsafeShift (shiftL)
40+import Data.Text.Internal.Unsafe.Shift (shiftL)
41import Data.Word (Word8, Word16, Word32)
41import Data.Word (Word8, Word16, Word32)
42import qualified Data.Text.Internal.Encoding.Utf8 as U8
42import qualified Data.Text.Internal.Encoding.Utf8 as U8
43import qualified Data.Text.Internal.Encoding.Utf16 as U16
43import 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
27import Control.Monad.ST (runST)
27import Control.Monad.ST (runST)
28import Data.Text.Internal.Fusion.Types
28import Data.Text.Internal.Fusion.Types
29import Data.Text.Internal.Fusion.Size (isEmpty, unknownSize)
29import Data.Text.Internal.Fusion.Size (isEmpty, unknownSize)
30−import Data.Text.Lazy.Internal
30+import Data.Text.Internal.Lazy
31import qualified Data.Text.Internal as I
31import qualified Data.Text.Internal as I
32import qualified Data.Text.Array as A
32import qualified Data.Text.Array as A
33−import Data.Text.UnsafeChar (unsafeWrite)
33+import Data.Text.Internal.Unsafe.Char (unsafeWrite)
34−import Data.Text.UnsafeShift (shiftL)
34+import Data.Text.Internal.Unsafe.Shift (shiftL)
35import Data.Text.Unsafe (Iter(..), iter)
35import Data.Text.Unsafe (Iter(..), iter)
36import Data.Int (Int64)
36import Data.Int (Int64)
37
37
Data/Text/Internal/Lazy/Search.hs+2−2
@@ -24,9 +24,9 @@ import Data.Int (Int64)
24import Data.Word (Word16, Word64)
24import Data.Word (Word16, Word64)
25import qualified Data.Text.Internal as T
25import qualified Data.Text.Internal as T
26import Data.Text.Internal.Fusion.Types (PairS(..))
26import Data.Text.Internal.Fusion.Types (PairS(..))
27−import Data.Text.Lazy.Internal (Text(..), foldlChunks)
27+import Data.Text.Internal.Lazy (Text(..), foldlChunks)
28import Data.Bits ((.|.), (.&.))
28import Data.Bits ((.|.), (.&.))
29−import Data.Text.UnsafeShift (shiftL)
29+import Data.Text.Internal.Unsafe.Shift (shiftL)
30
30
31-- | /O(n+m)/ Find the offsets of all non-overlapping indices of
31-- | /O(n+m)/ Find the offsets of all non-overlapping indices of
32-- @needle@ within @haystack@.
32-- @needle@ within @haystack@.
Data/Text/Private.hs → Data/Text/Internal/Private.hsrenamed+2−2
@@ -1,7 +1,7 @@
1{-# LANGUAGE BangPatterns, Rank2Types, UnboxedTuples #-}
1{-# LANGUAGE BangPatterns, Rank2Types, UnboxedTuples #-}
2
2
3-- |
3-- |
4−-- Module : Data.Text.Private
4+-- Module : Data.Text.Internal.Private
5-- Copyright : (c) 2011 Bryan O'Sullivan
5-- Copyright : (c) 2011 Bryan O'Sullivan
6--
6--
7-- License : BSD-style
7-- License : BSD-style
@@ -9,7 +9,7 @@
9-- Stability : experimental
9-- Stability : experimental
10-- Portability : GHC
10-- Portability : GHC
11
11
12−module Data.Text.Private
12+module Data.Text.Internal.Private
13 (
13 (
14 runText
14 runText
15 , span_
15 , span_
Data/Text/Search.hs → Data/Text/Internal/Search.hsrenamed+3−3
@@ -1,7 +1,7 @@
1{-# LANGUAGE BangPatterns, ScopedTypeVariables #-}
1{-# LANGUAGE BangPatterns, ScopedTypeVariables #-}
2
2
3-- |
3-- |
4−-- Module : Data.Text.Search
4+-- Module : Data.Text.Internal.Search
5-- Copyright : (c) Bryan O'Sullivan 2009
5-- Copyright : (c) Bryan O'Sullivan 2009
6--
6--
7-- License : BSD-style
7-- License : BSD-style
@@ -27,7 +27,7 @@
27-- * F. Lundh: The Fast Search Algorithm.
27-- * F. Lundh: The Fast Search Algorithm.
28-- <http://effbot.org/zone/stringlib.htm> (2006)
28-- <http://effbot.org/zone/stringlib.htm> (2006)
29
29
30−module Data.Text.Search
30+module Data.Text.Internal.Search
31 (
31 (
32 indices
32 indices
33 ) where
33 ) where
@@ -36,7 +36,7 @@ import qualified Data.Text.Array as A
36import Data.Word (Word64)
36import Data.Word (Word64)
37import Data.Text.Internal (Text(..))
37import Data.Text.Internal (Text(..))
38import Data.Bits ((.|.), (.&.))
38import Data.Bits ((.|.), (.&.))
39−import Data.Text.UnsafeShift (shiftL)
39+import Data.Text.Internal.Unsafe.Shift (shiftL)
40
40
41data T = {-# UNPACK #-} !Word64 :* {-# UNPACK #-} !Int
41data T = {-# UNPACK #-} !Word64 :* {-# UNPACK #-} !Int
42
42
Data/Text/Unsafe/Base.hs → Data/Text/Internal/Unsafe.hsrenamed+2−2
@@ -1,6 +1,6 @@
1{-# LANGUAGE CPP, MagicHash, UnboxedTuples #-}
1{-# LANGUAGE CPP, MagicHash, UnboxedTuples #-}
2-- |
2-- |
3−-- Module : Data.Text.Unsafe.Base
3+-- Module : Data.Text.Internal.Unsafe
4-- Copyright : (c) 2009, 2010, 2011 Bryan O'Sullivan
4-- Copyright : (c) 2009, 2010, 2011 Bryan O'Sullivan
5-- License : BSD-style
5-- License : BSD-style
6-- Maintainer : bos@serpentine.com, rtomharper@googlemail.com,
6-- Maintainer : bos@serpentine.com, rtomharper@googlemail.com,
@@ -10,7 +10,7 @@
10--
10--
11-- A module containing unsafe operations, for very very careful use in
11-- A module containing unsafe operations, for very very careful use in
12-- heavily tested code.
12-- heavily tested code.
13−module Data.Text.Unsafe.Base
13+module Data.Text.Internal.Unsafe
14 (
14 (
15 inlineInterleaveST
15 inlineInterleaveST
16 , inlinePerformIO
16 , inlinePerformIO
Data/Text/UnsafeChar.hs → Data/Text/Internal/Unsafe/Char.hsrenamed+3−3
@@ -1,7 +1,7 @@
1{-# LANGUAGE CPP, MagicHash #-}
1{-# LANGUAGE CPP, MagicHash #-}
2
2
3-- |
3-- |
4−-- Module : Data.Text.UnsafeChar
4+-- Module : Data.Text.Internal.Unsafe.Char
5-- Copyright : (c) 2008, 2009 Tom Harper,
5-- Copyright : (c) 2008, 2009 Tom Harper,
6-- (c) 2009, 2010 Bryan O'Sullivan,
6-- (c) 2009, 2010 Bryan O'Sullivan,
7-- (c) 2009 Duncan Coutts
7-- (c) 2009 Duncan Coutts
@@ -13,7 +13,7 @@
13-- Portability : GHC
13-- Portability : GHC
14--
14--
15-- Fast character manipulation functions.
15-- Fast character manipulation functions.
16−module Data.Text.UnsafeChar
16+module Data.Text.Internal.Unsafe.Char
17 (
17 (
18 ord
18 ord
19 , unsafeChr
19 , unsafeChr
@@ -28,7 +28,7 @@ import Control.Exception (assert)
28#endif
28#endif
29import Control.Monad.ST (ST)
29import Control.Monad.ST (ST)
30import Data.Bits ((.&.))
30import Data.Bits ((.&.))
31−import Data.Text.UnsafeShift (shiftR)
31+import Data.Text.Internal.Unsafe.Shift (shiftR)
32import GHC.Exts (Char(..), Int(..), chr#, ord#, word2Int#)
32import GHC.Exts (Char(..), Int(..), chr#, ord#, word2Int#)
33import GHC.Word (Word8(..), Word16(..), Word32(..))
33import GHC.Word (Word8(..), Word16(..), Word32(..))
34import qualified Data.Text.Array as A
34import qualified Data.Text.Array as A
Data/Text/UnsafeShift.hs → Data/Text/Internal/Unsafe/Shift.hsrenamed+2−2
@@ -1,7 +1,7 @@
1{-# LANGUAGE MagicHash #-}
1{-# LANGUAGE MagicHash #-}
2
2
3-- |
3-- |
4−-- Module : Data.Text.UnsafeShift
4+-- Module : Data.Text.Internal.Unsafe.Shift
5-- Copyright : (c) Bryan O'Sullivan 2009
5-- Copyright : (c) Bryan O'Sullivan 2009
6--
6--
7-- License : BSD-style
7-- License : BSD-style
@@ -12,7 +12,7 @@
12--
12--
13-- Fast, unchecked bit shifting functions.
13-- Fast, unchecked bit shifting functions.
14
14
15−module Data.Text.UnsafeShift
15+module Data.Text.Internal.Unsafe.Shift
16 (
16 (
17 UnsafeShift(..)
17 UnsafeShift(..)
18 ) where
18 ) where
Data/Text/Lazy.hs+3−3
@@ -213,9 +213,9 @@ import qualified Data.Text.Unsafe as T
213import qualified Data.Text.Internal.Lazy.Fusion as S
213import qualified Data.Text.Internal.Lazy.Fusion as S
214import Data.Text.Internal.Fusion.Types (PairS(..))
214import Data.Text.Internal.Fusion.Types (PairS(..))
215import Data.Text.Internal.Lazy.Fusion (stream, unstream)
215import 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)
217import Data.Text.Internal (firstf, safe, textP)
217import Data.Text.Internal (firstf, safe, textP)
218−import qualified Data.Text.Util as U
218+import qualified Data.Text.Internal.Functions as F
219import Data.Text.Internal.Lazy.Search (indices)
219import Data.Text.Internal.Lazy.Search (indices)
220#if __GLASGOW_HASKELL__ >= 702
220#if __GLASGOW_HASKELL__ >= 702
221import qualified GHC.CString as GHC
221import qualified GHC.CString as GHC
@@ -561,7 +561,7 @@ map f t = unstream (S.map (safe . f) (stream t))
561-- 'Text's and concatenates the list after interspersing the first
561-- 'Text's and concatenates the list after interspersing the first
562-- argument between each element of the list.
562-- argument between each element of the list.
563intercalate :: Text -> [Text] -> Text
563intercalate :: Text -> [Text] -> Text
564−intercalate t = concat . (U.intersperse t)
564+intercalate t = concat . (F.intersperse t)
565{-# INLINE intercalate #-}
565{-# INLINE intercalate #-}
566
566
567-- | /O(n)/ The 'intersperse' function takes a character and places it
567-- | /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
50
50
51import Control.Exception (evaluate, try)
51import Control.Exception (evaluate, try)
52import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
52import 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)
54import qualified Data.ByteString as S
54import qualified Data.ByteString as S
55import qualified Data.ByteString.Lazy as B
55import qualified Data.ByteString.Lazy as B
56import qualified Data.ByteString.Lazy.Internal as B
56import qualified Data.ByteString.Lazy.Internal as B
Data/Text/Lazy/IO.hs+1−1
@@ -51,7 +51,7 @@ import qualified Control.Exception as E
51import Control.Monad (when)
51import Control.Monad (when)
52import Data.IORef (readIORef)
52import Data.IORef (readIORef)
53import Data.Text.Internal.IO (hGetLineWith, readChunk)
53import Data.Text.Internal.IO (hGetLineWith, readChunk)
54−import Data.Text.Lazy.Internal (chunk, empty)
54+import Data.Text.Internal.Lazy (chunk, empty)
55import GHC.IO.Buffer (isEmptyBuffer)
55import GHC.IO.Buffer (isEmptyBuffer)
56import GHC.IO.Exception (IOException(..), IOErrorType(..), ioException)
56import GHC.IO.Exception (IOException(..), IOErrorType(..), ioException)
57import GHC.IO.Handle.Internals (augmentIOError, hClose_help,
57import GHC.IO.Handle.Internals (augmentIOError, hClose_help,
Data/Text/Lazy/Internal.hs+6−103
@@ -1,7 +1,7 @@
1{-# LANGUAGE BangPatterns, DeriveDataTypeable #-}
1{-# LANGUAGE BangPatterns, DeriveDataTypeable #-}
2-- |
2-- |
3-- Module : Data.Text.Lazy.Internal
3-- Module : Data.Text.Lazy.Internal
4−-- Copyright : (c) 2009, 2010 Bryan O'Sullivan
4+-- Copyright : (c) 2013 Bryan O'Sullivan
5--
5--
6-- License : BSD-style
6-- License : BSD-style
7-- Maintainer : bos@serpentine.com, rtomharper@googlemail.com,
7-- Maintainer : bos@serpentine.com, rtomharper@googlemail.com,
@@ -9,110 +9,13 @@
9-- Stability : experimental
9-- Stability : experimental
10-- Portability : GHC
10-- Portability : GHC
11--
11--
12−-- A module containing private 'Text' internals. This exposes the
12+-- This module has been renamed to 'Data.Text.Internal.Lazy'. This
13−-- 'Text' representation and low level construction functions.
13+-- name for the module will be removed in the next major release.
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
14
20module Data.Text.Lazy.Internal
15module Data.Text.Lazy.Internal
16+ {-# DEPRECATED "Use Data.Text.Internal.Lazy instead" #-}
21 (
17 (
22− Text(..)
18+ module Data.Text.Internal.Lazy
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
19 ) where
39
20
40−import Data.Text ()
21+import Data.Text.Internal.Lazy
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 #-}
Data/Text/Read.hs+1−1
@@ -28,7 +28,7 @@ import Data.Char (isDigit, isHexDigit, ord)
28import Data.Int (Int8, Int16, Int32, Int64)
28import Data.Int (Int8, Int16, Int32, Int64)
29import Data.Ratio ((%))
29import Data.Ratio ((%))
30import Data.Text as T
30import Data.Text as T
31−import Data.Text.Private (span_)
31+import Data.Text.Internal.Private (span_)
32import Data.Word (Word, Word8, Word16, Word32, Word64)
32import Data.Word (Word, Word8, Word16, Word32, Word64)
33
33
34-- | Read some text. If the read succeeds, return its value and the
34-- | 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)
31#endif
31#endif
32import Data.Text.Internal.Encoding.Utf16 (chr2)
32import Data.Text.Internal.Encoding.Utf16 (chr2)
33import Data.Text.Internal (Text(..))
33import Data.Text.Internal (Text(..))
34−import Data.Text.Unsafe.Base (inlineInterleaveST, inlinePerformIO)
34+import Data.Text.Internal.Unsafe (inlineInterleaveST, inlinePerformIO)
35−import Data.Text.UnsafeChar (unsafeChr)
35+import Data.Text.Internal.Unsafe.Char (unsafeChr)
36import qualified Data.Text.Array as A
36import qualified Data.Text.Array as A
37import GHC.IO (unsafeDupablePerformIO)
37import GHC.IO (unsafeDupablePerformIO)
38
38
tests/Tests/Properties.hs+2−2
@@ -24,7 +24,7 @@ import Data.Text.Foreign
24import Data.Text.Internal.Fusion.Size
24import Data.Text.Internal.Fusion.Size
25import Data.Text.Lazy.Read as TL
25import Data.Text.Lazy.Read as TL
26import Data.Text.Read as T
26import Data.Text.Read as T
27−import Data.Text.Search (indices)
27+import Data.Text.Internal.Search (indices)
28import Data.Word (Word, Word8, Word16, Word32, Word64)
28import Data.Word (Word, Word8, Word16, Word32, Word64)
29import Numeric (showHex)
29import Numeric (showHex)
30import Test.Framework (Test, testGroup)
30import Test.Framework (Test, testGroup)
@@ -46,7 +46,7 @@ import qualified Data.Text.Lazy.Encoding as EL
46import qualified Data.Text.Internal.Lazy.Fusion as SL
46import qualified Data.Text.Internal.Lazy.Fusion as SL
47import qualified Data.Text.Lazy.IO as TL
47import qualified Data.Text.Lazy.IO as TL
48import qualified Data.Text.Internal.Lazy.Search as S (indices)
48import 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
50import qualified System.IO as IO
50import qualified System.IO as IO
51
51
52import Tests.QuickCheckUtils
52import Tests.QuickCheckUtils
tests/Tests/QuickCheckUtils.hs+1−1
@@ -47,7 +47,7 @@ import qualified Data.Text.Internal.Fusion as TF
47import qualified Data.Text.Internal.Fusion.Common as TF
47import qualified Data.Text.Internal.Fusion.Common as TF
48import qualified Data.Text.Lazy as TL
48import qualified Data.Text.Lazy as TL
49import qualified Data.Text.Internal.Lazy.Fusion as TLF
49import 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
51import qualified System.IO as IO
51import qualified System.IO as IO
52
52
53import Tests.Utils
53import Tests.Utils
tests/text-tests.cabal+7−7
@@ -96,17 +96,17 @@ library
96 Data.Text.Internal.Lazy.Encoding.Fusion
96 Data.Text.Internal.Lazy.Encoding.Fusion
97 Data.Text.Internal.Lazy.Fusion
97 Data.Text.Internal.Lazy.Fusion
98 Data.Text.Lazy.IO
98 Data.Text.Lazy.IO
99− Data.Text.Lazy.Internal
99+ Data.Text.Internal.Lazy
100 Data.Text.Lazy.Read
100 Data.Text.Lazy.Read
101 Data.Text.Internal.Lazy.Search
101 Data.Text.Internal.Lazy.Search
102− Data.Text.Private
102+ Data.Text.Internal.Private
103 Data.Text.Read
103 Data.Text.Read
104− Data.Text.Search
104+ Data.Text.Internal.Search
105 Data.Text.Unsafe
105 Data.Text.Unsafe
106− Data.Text.Unsafe.Base
106+ Data.Text.Internal.Unsafe
107− Data.Text.UnsafeChar
107+ Data.Text.Internal.Unsafe.Char
108− Data.Text.UnsafeShift
108+ Data.Text.Internal.Unsafe.Shift
109− Data.Text.Util
109+ Data.Text.Internal.Functions
110
110
111 if flag(hpc)
111 if flag(hpc)
112 ghc-options:
112 ghc-options:
text.cabal+7−6
@@ -89,6 +89,7 @@ library
89 Data.Text.Lazy.Encoding
89 Data.Text.Lazy.Encoding
90 Data.Text.Lazy.IO
90 Data.Text.Lazy.IO
91 Data.Text.Lazy.Internal
91 Data.Text.Lazy.Internal
92+ Data.Text.Internal.Lazy
92 Data.Text.Lazy.Read
93 Data.Text.Lazy.Read
93 Data.Text.Read
94 Data.Text.Read
94 Data.Text.Unsafe
95 Data.Text.Unsafe
@@ -111,12 +112,12 @@ library
111 Data.Text.Internal.Lazy.Encoding.Fusion
112 Data.Text.Internal.Lazy.Encoding.Fusion
112 Data.Text.Internal.Lazy.Fusion
113 Data.Text.Internal.Lazy.Fusion
113 Data.Text.Internal.Lazy.Search
114 Data.Text.Internal.Lazy.Search
114− Data.Text.Private
115+ Data.Text.Internal.Private
115− Data.Text.Search
116+ Data.Text.Internal.Search
116− Data.Text.Unsafe.Base
117+ Data.Text.Internal.Unsafe
117− Data.Text.UnsafeChar
118+ Data.Text.Internal.Unsafe.Char
118− Data.Text.UnsafeShift
119+ Data.Text.Internal.Unsafe.Shift
119− Data.Text.Util
120+ Data.Text.Internal.Functions
120
121
121 build-depends:
122 build-depends:
122 array >= 0.3,
123 array >= 0.3,