on 8eded25 help sign in
19 files changed+98−137
since splitsnapshots
unifiedsplit
.hgtags−1 Data/Text.hs+7−10 Data/Text/Array.hs+4−5 Data/Text/Encoding.hs+18−7 Data/Text/Internal/Builder.hs+1−3 Data/Text/Internal/Builder/Int/Digits.hs+1−1 Data/Text/Internal/Fusion.hs+17−27 Data/Text/Internal/Fusion/Common.hs+3−3 Data/Text/Lazy.hs+2−2 Data/Text/Lazy/Builder.hs+1−1 Data/Text/Lazy/Builder/Int.hs+4−4 Data/Text/Lazy/Encoding.hs+15−5 benchmarks/haskell/Benchmarks.hs+1−1 benchmarks/haskell/Benchmarks/Stream.hs+5−16 benchmarks/text-benchmarks.cabal+2−12 changelog.md−11 tests/literal-rule-test.sh+1−1 tests/text-tests.cabal+1−1 text.cabal+15−26
.hgtags−1
@@ -63,4 +63,3 @@ f8a60279237c1c28e094868740d9188dd94fcc9e 1.2.0.0
636340f268e6735749ef36f487e1d928eaa957bb431d 1.2.1.2
6464631fd055e27fa10983e17e9ad36d1b285b85c661 1.2.1.3
65658221a68ed5ec37028357df9c6c25f52320e54ad9 1.2.2.0
66−ce1c5ac65eb9f5580114b4e380092b05a485e95d 1.2.2.1
Data/Text.hs+7−10
@@ -238,7 +238,6 @@ import Data.ByteString (ByteString)
238238import qualified Data.Text.Lazy as L
239239import Data.Int (Int64)
240240#endif
241−import GHC.Base (eqInt, neInt, gtInt, geInt, ltInt, leInt)
242241#if __GLASGOW_HASKELL__ >= 708
243242import qualified GHC.Exts as Exts
244243#endif
@@ -572,9 +571,7 @@ isSingleton = S.isSingleton . stream
572571-- Subject to fusion.
573572length :: Text -> Int
574573length t = S.length (stream t)
575−{-# INLINE [0] length #-}
576−-- length needs to be phased after the compareN/length rules otherwise
577−-- it may inline before the rules have an opportunity to fire.
574+{-# INLINE length #-}
578575
579576-- | /O(n)/ Compare the count of characters in a 'Text' to a number.
580577-- Subject to fusion.
@@ -593,32 +590,32 @@ compareLength t n = S.compareLengthI (stream t) n
593590
594591{-# RULES
595592"TEXT ==N/length -> compareLength/==EQ" [~1] forall t n.
596− eqInt (length t) n = compareLength t n == EQ
593+ (==) (length t) n = compareLength t n == EQ
597594 #-}
598595
599596{-# RULES
600597"TEXT /=N/length -> compareLength//=EQ" [~1] forall t n.
601− neInt (length t) n = compareLength t n /= EQ
598+ (/=) (length t) n = compareLength t n /= EQ
602599 #-}
603600
604601{-# RULES
605602"TEXT <N/length -> compareLength/==LT" [~1] forall t n.
606− ltInt (length t) n = compareLength t n == LT
603+ (<) (length t) n = compareLength t n == LT
607604 #-}
608605
609606{-# RULES
610607"TEXT <=N/length -> compareLength//=GT" [~1] forall t n.
611− leInt (length t) n = compareLength t n /= GT
608+ (<=) (length t) n = compareLength t n /= GT
612609 #-}
613610
614611{-# RULES
615612"TEXT >N/length -> compareLength/==GT" [~1] forall t n.
616− gtInt (length t) n = compareLength t n == GT
613+ (>) (length t) n = compareLength t n == GT
617614 #-}
618615
619616{-# RULES
620617"TEXT >=N/length -> compareLength//=LT" [~1] forall t n.
621− geInt (length t) n = compareLength t n /= LT
618+ (>=) (length t) n = compareLength t n /= LT
622619 #-}
623620
624621-- -----------------------------------------------------------------------------
Data/Text/Array.hs+4−5
@@ -20,7 +20,7 @@
2020-- > import qualified Data.Text.Array as A
2121--
2222-- The names in this module resemble those in the 'Data.Array' family
23−-- of modules, but are shorter due to the assumption of qualified
23+-- of modules, but are shorter due to the assumption of qualifid
2424-- naming.
2525module Data.Text.Array
2626 (
@@ -74,7 +74,7 @@ import Foreign.C.Types (CInt, CSize)
7474#endif
7575import GHC.Base (ByteArray#, MutableByteArray#, Int(..),
7676 indexWord16Array#, newByteArray#,
77− unsafeFreezeByteArray#, writeWord16Array#)
77+ unsafeCoerce#, writeWord16Array#)
7878import GHC.ST (ST(..), runST)
7979import GHC.Word (Word16(..))
8080import Prelude hiding (length, read)
@@ -130,9 +130,8 @@ array_size_error = error "Data.Text.Array.new: size overflow"
130130
131131-- | Freeze a mutable array. Do not mutate the 'MArray' afterwards!
132132unsafeFreeze :: MArray s -> ST s Array
133−unsafeFreeze MArray{..} = ST $ \s1# ->
134− case unsafeFreezeByteArray# maBA s1# of
135− (# s2#, ba# #) -> (# s2#, Array ba#
133+unsafeFreeze MArray{..} = ST $ \s# ->
134+ (# s#, Array (unsafeCoerce# maBA)
136135#if defined(ASSERTS)
137136 maLen
138137#endif
Data/Text/Encoding.hs+18−7
@@ -55,9 +55,13 @@ module Data.Text.Encoding
5555 , encodeUtf32LE
5656 , encodeUtf32BE
5757
58+#if MIN_VERSION_bytestring(0,10,4)
5859 -- * Encoding Text using ByteString Builders
60+ -- | /Note/ that these functions are only available if built against
61+ -- @bytestring >= 0.10.4.0@.
5962 , encodeUtf8Builder
6063 , encodeUtf8BuilderEscaped
64+#endif
6165 ) where
6266
6367#if __GLASGOW_HASKELL__ >= 702
@@ -66,15 +70,24 @@ import Control.Monad.ST.Unsafe (unsafeIOToST, unsafeSTToIO)
6670import Control.Monad.ST (unsafeIOToST, unsafeSTToIO)
6771#endif
6872
73+#if MIN_VERSION_bytestring(0,10,4)
74+import Data.Bits ((.&.))
75+import Data.Text.Internal.Unsafe.Char (ord)
76+import qualified Data.ByteString.Builder as B
77+import qualified Data.ByteString.Builder.Internal as B hiding (empty, append)
78+import qualified Data.ByteString.Builder.Prim as BP
79+import qualified Data.ByteString.Builder.Prim.Internal as BP
80+import qualified Data.Text.Internal.Encoding.Utf16 as U16
81+#endif
82+
6983import Control.Exception (evaluate, try)
7084import Control.Monad.ST (runST)
71−import Data.Bits ((.&.))
7285import Data.ByteString as B
7386import Data.ByteString.Internal as B hiding (c2w)
7487import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
7588import Data.Text.Internal (Text(..), safe, text)
7689import Data.Text.Internal.Private (runText)
77−import Data.Text.Internal.Unsafe.Char (ord, unsafeWrite)
90+import Data.Text.Internal.Unsafe.Char (unsafeWrite)
7891import Data.Text.Internal.Unsafe.Shift (shiftR)
7992import Data.Text.Show ()
8093import Data.Text.Unsafe (unsafeDupablePerformIO)
@@ -85,13 +98,8 @@ import Foreign.Marshal.Utils (with)
8598import Foreign.Ptr (Ptr, minusPtr, nullPtr, plusPtr)
8699import Foreign.Storable (Storable, peek, poke)
87100import GHC.Base (ByteArray#, MutableByteArray#)
88−import qualified Data.ByteString.Builder as B
89−import qualified Data.ByteString.Builder.Internal as B hiding (empty, append)
90−import qualified Data.ByteString.Builder.Prim as BP
91−import qualified Data.ByteString.Builder.Prim.Internal as BP
92101import qualified Data.Text.Array as A
93102import qualified Data.Text.Internal.Encoding.Fusion as E
94−import qualified Data.Text.Internal.Encoding.Utf16 as U16
95103import qualified Data.Text.Internal.Fusion as F
96104
97105#include "text_cbits.h"
@@ -307,6 +315,8 @@ decodeUtf8' :: ByteString -> Either UnicodeException Text
307315decodeUtf8' = unsafeDupablePerformIO . try . evaluate . decodeUtf8With strictDecode
308316{-# INLINE decodeUtf8' #-}
309317
318+#if MIN_VERSION_bytestring(0,10,4)
319+
310320-- | Encode text to a ByteString 'B.Builder' using UTF-8 encoding.
311321encodeUtf8Builder :: Text -> B.Builder
312322encodeUtf8Builder = encodeUtf8BuilderEscaped (BP.liftFixedToBounded BP.word8)
@@ -367,6 +377,7 @@ encodeUtf8BuilderEscaped be =
367377 outerLoop i (B.BufferRange op ope)
368378 where
369379 poke8 j v = poke (op `plusPtr` j) (fromIntegral v :: Word8)
380+#endif
370381
371382-- | Encode text using UTF-8 encoding.
372383encodeUtf8 :: Text -> ByteString
Data/Text/Internal/Builder.hs+1−3
@@ -6,7 +6,7 @@
66-- Module : Data.Text.Internal.Builder
77-- Copyright : (c) 2013 Bryan O'Sullivan
88-- (c) 2010 Johan Tibell
9−-- License : BSD-style (see LICENSE)
9+-- License : BSD3-style (see LICENSE)
1010--
1111-- Maintainer : Johan Tibell <johan.tibell@gmail.com>
1212-- Stability : experimental
@@ -242,8 +242,6 @@ flush = Builder $ \ k buf@(Buffer p o u l) ->
242242 !t = Text arr o u
243243 ts <- inlineInterleaveST (k b)
244244 return $! t : ts
245−{-# INLINE [1] flush #-}
246−-- defer inlining so that flush/flush rule may fire.
247245
248246------------------------------------------------------------------------
249247
Data/Text/Internal/Builder/Int/Digits.hs+1−1
@@ -2,7 +2,7 @@
22
33-- Module: Data.Text.Internal.Builder.Int.Digits
44-- Copyright: (c) 2013 Bryan O'Sullivan
5−-- License: BSD-style
5+-- License: BSD3
66-- Maintainer: Bryan O'Sullivan <bos@serpentine.com>
77-- Stability: experimental
88-- Portability: portable
Data/Text/Internal/Fusion.hs+17−27
@@ -98,35 +98,25 @@ reverseStream (Text arr off len) = Stream next (off+len-1) (betweenSize (len `sh
9898-- | /O(n)/ Convert a 'Stream Char' into a 'Text'.
9999unstream :: Stream Char -> Text
100100unstream (Stream next0 s0 len) = runText $ \done -> do
101− -- Before encoding each char we perform a buffer realloc check assuming
102− -- worst case encoding size of two 16-bit units for the char. Just add an
103− -- extra space to the buffer so that we do not end up reallocating even when
104− -- all the chars are encoded as single unit.
105− let mlen = upperBound 4 len + 1
101+ let mlen = upperBound 4 len
106102 arr0 <- A.new mlen
107− let outer !arr !maxi = encode
103+ let outer arr top = loop
108104 where
109− -- keep the common case loop as small as possible
110− encode !si !di =
111− case next0 si of
112− Done -> done arr di
113− Skip si' -> encode si' di
114− Yield c si'
115− -- simply check for the worst case
116− | maxi < di + 1 -> realloc si di
117− | otherwise -> do
118− n <- unsafeWrite arr di c
119− encode si' (di + n)
120−
121− -- keep uncommon case separate from the common case code
122− {-# NOINLINE realloc #-}
123− realloc !si !di = do
124− let newlen = (maxi + 1) * 2
125− arr' <- A.new newlen
126− A.copyM arr' 0 arr 0 di
127− outer arr' (newlen - 1) si di
128−
129− outer arr0 (mlen - 1) s0 0
105+ loop !s !i =
106+ case next0 s of
107+ Done -> done arr i
108+ Skip s' -> loop s' i
109+ Yield x s'
110+ | j >= top -> {-# SCC "unstream/resize" #-} do
111+ let top' = (top + 1) `shiftL` 1
112+ arr' <- A.new top'
113+ A.copyM arr' 0 arr 0 top
114+ outer arr' top' s i
115+ | otherwise -> do d <- unsafeWrite arr i x
116+ loop s' (i+d)
117+ where j | ord x < 0x10000 = i
118+ | otherwise = i + 1
119+ outer arr0 mlen s0 0
130120{-# INLINE [0] unstream #-}
131121{-# RULES "STREAM stream/unstream fusion" forall s. stream (unstream s) = s #-}
132122
Data/Text/Internal/Fusion/Common.hs+3−3
@@ -669,12 +669,12 @@ scanl f z0 (Stream next0 s0 len) = Stream next (Scan1 z0 s0) (len+1) -- HINT may
669669-- ** Generating and unfolding streams
670670
671671replicateCharI :: Integral a => a -> Char -> Stream Char
672−replicateCharI !n !c
672+replicateCharI n c
673673 | n < 0 = empty
674674 | otherwise = Stream next 0 (fromIntegral n) -- HINT maybe too low
675675 where
676− next !i | i >= n = Done
677− | otherwise = Yield c (i + 1)
676+ next i | i >= n = Done
677+ | otherwise = Yield c (i + 1)
678678{-# INLINE [0] replicateCharI #-}
679679
680680data RI s = RI !s {-# UNPACK #-} !Int64
Data/Text/Lazy.hs+2−2
@@ -545,7 +545,7 @@ tail Empty = emptyError "tail"
545545 unstream (S.tail (stream t)) = tail t
546546 #-}
547547
548−-- | /O(n\/c)/ Returns all but the last character of a 'Text', which must
548+-- | /O(1)/ Returns all but the last character of a 'Text', which must
549549-- be non-empty. Subject to fusion.
550550init :: Text -> Text
551551init (Chunk t0 ts0) = go t0 ts0
@@ -581,7 +581,7 @@ isSingleton :: Text -> Bool
581581isSingleton = S.isSingleton . stream
582582{-# INLINE isSingleton #-}
583583
584−-- | /O(n\/c)/ Returns the last character of a 'Text', which must be
584+-- | /O(1)/ Returns the last character of a 'Text', which must be
585585-- non-empty. Subject to fusion.
586586last :: Text -> Char
587587last Empty = emptyError "last"
Data/Text/Lazy/Builder.hs+1−1
@@ -8,7 +8,7 @@
88-- Module : Data.Text.Lazy.Builder
99-- Copyright : (c) 2013 Bryan O'Sullivan
1010-- (c) 2010 Johan Tibell
11−-- License : BSD-style (see LICENSE)
11+-- License : BSD3-style (see LICENSE)
1212--
1313-- Maintainer : Johan Tibell <johan.tibell@gmail.com>
1414-- Stability : experimental
Data/Text/Lazy/Builder/Int.hs+4−4
@@ -7,7 +7,7 @@
77-- Module: Data.Text.Lazy.Builder.Int
88-- Copyright: (c) 2013 Bryan O'Sullivan
99-- (c) 2011 MailRank, Inc.
10−-- License: BSD-style
10+-- License: BSD3
1111-- Maintainer: Bryan O'Sullivan <bos@serpentine.com>
1212-- Stability: experimental
1313-- Portability: portable
@@ -36,14 +36,14 @@ import Control.Monad.ST
3636#ifdef __GLASGOW_HASKELL__
3737# if defined(INTEGER_GMP)
3838import GHC.Integer.GMP.Internals (Integer(S#))
39−# elif defined(INTEGER_SIMPLE)
39+# elif defined(INTEGER_PURE)
4040import GHC.Integer
4141# else
42−# error "You need to use either GMP or integer-simple."
42+# error "You need to use either GMP or integer-pure."
4343# endif
4444#endif
4545
46−#if defined(INTEGER_GMP) || defined(INTEGER_SIMPLE)
46+#if defined(INTEGER_GMP) || defined(INTEGER_PURE)
4747# define PAIR(a,b) (# a,b #)
4848#else
4949# define PAIR(a,b) (a,b)
Data/Text/Lazy/Encoding.hs+15−5
@@ -46,23 +46,27 @@ module Data.Text.Lazy.Encoding
4646 , encodeUtf32LE
4747 , encodeUtf32BE
4848
49+#if MIN_VERSION_bytestring(0,10,4)
4950 -- * Encoding Text using ByteString Builders
5051 , encodeUtf8Builder
5152 , encodeUtf8BuilderEscaped
53+#endif
5254 ) where
5355
5456import Control.Exception (evaluate, try)
55−import Data.Monoid (Monoid(..))
5657import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
5758import Data.Text.Internal.Lazy (Text(..), chunk, empty, foldrChunks)
58−import Data.Word (Word8)
5959import qualified Data.ByteString as S
60−import qualified Data.ByteString.Builder as B
61−import qualified Data.ByteString.Builder.Extra as B (safeStrategy, toLazyByteStringWith)
62−import qualified Data.ByteString.Builder.Prim as BP
6360import qualified Data.ByteString.Lazy as B
6461import qualified Data.ByteString.Lazy.Internal as B
6562import qualified Data.ByteString.Unsafe as B
63+#if MIN_VERSION_bytestring(0,10,4)
64+import Data.Word (Word8)
65+import Data.Monoid (Monoid(..))
66+import qualified Data.ByteString.Builder as B
67+import qualified Data.ByteString.Builder.Extra as B (safeStrategy, toLazyByteStringWith)
68+import qualified Data.ByteString.Builder.Prim as BP
69+#endif
6670import qualified Data.Text as T
6771import qualified Data.Text.Encoding as TE
6872import qualified Data.Text.Internal.Lazy.Encoding.Fusion as E
@@ -142,6 +146,7 @@ decodeUtf8' bs = unsafeDupablePerformIO $ do
142146{-# INLINE decodeUtf8' #-}
143147
144148encodeUtf8 :: Text -> B.ByteString
149+#if MIN_VERSION_bytestring(0,10,4)
145150encodeUtf8 Empty = B.empty
146151encodeUtf8 lt@(Chunk t _) =
147152 B.toLazyByteStringWith strategy B.empty $ encodeUtf8Builder lt
@@ -163,6 +168,11 @@ encodeUtf8BuilderEscaped :: BP.BoundedPrim Word8 -> Text -> B.Builder
163168encodeUtf8BuilderEscaped prim =
164169 foldrChunks (\c b -> TE.encodeUtf8BuilderEscaped prim c `mappend` b) mempty
165170
171+#else
172+encodeUtf8 (Chunk c cs) = B.Chunk (TE.encodeUtf8 c) (encodeUtf8 cs)
173+encodeUtf8 Empty = B.Empty
174+#endif
175+
166176-- | Decode text from little endian UTF-16 encoding.
167177decodeUtf16LEWith :: OnDecodeError -> B.ByteString -> Text
168178decodeUtf16LEWith onErr bs = F.unstream (E.streamUtf16LE onErr bs)
benchmarks/haskell/Benchmarks.hs+1−1
@@ -53,7 +53,7 @@ benchmarks = do
5353 , Mul.benchmark
5454 , Pure.benchmark "tiny" (tf "tiny.txt")
5555 , Pure.benchmark "ascii" (tf "ascii-small.txt")
56− -- , Pure.benchmark "france" (tf "france.html")
56+ , Pure.benchmark "france" (tf "france.html")
5757 , Pure.benchmark "russian" (tf "russian-small.txt")
5858 , Pure.benchmark "japanese" (tf "japanese.txt")
5959 , ReadNumbers.benchmark (tf "numbers.txt")
benchmarks/haskell/Benchmarks/Stream.hs+5−16
@@ -18,11 +18,11 @@ import qualified Data.Text.Encoding as T
1818import qualified Data.Text.Encoding.Error as E
1919import qualified Data.Text.Internal.Encoding.Fusion as T
2020import qualified Data.Text.Internal.Encoding.Fusion.Common as F
21−import qualified Data.Text.Internal.Fusion as F
21+import qualified Data.Text.Internal.Fusion as T
2222import qualified Data.Text.IO as T
2323import qualified Data.Text.Lazy.Encoding as TL
2424import qualified Data.Text.Internal.Lazy.Encoding.Fusion as TL
25−import qualified Data.Text.Internal.Lazy.Fusion as FL
25+import qualified Data.Text.Internal.Lazy.Fusion as TL
2626import qualified Data.Text.Lazy.IO as TL
2727
2828instance NFData a => NFData (Stream a) where
@@ -53,25 +53,14 @@ benchmark fp = do
5353 !utf32beL = TL.encodeUtf32BE tl
5454
5555 -- For the functions which operate on streams
56− let !s = F.stream t
56+ let !s = T.stream t
5757
5858 return $ bgroup "Stream"
5959
6060 -- Fusion
6161 [ bgroup "stream" $
62− [ bench "Text" $ nf F.stream t
63− , bench "LazyText" $ nf FL.stream tl
64− ]
65− -- must perform exactly the same as stream above due to
66− -- stream/unstream (i.e. stream after unstream) fusion
67− , bgroup "stream-fusion" $
68− [ bench "Text" $ nf (F.stream . F.unstream . F.stream) t
69− , bench "LazyText" $ nf (FL.stream . FL.unstream . FL.stream) tl
70− ]
71− -- measure the overhead of unstream after stream
72− , bgroup "stream-unstream" $
73− [ bench "Text" $ nf (F.unstream . F.stream) t
74− , bench "LazyText" $ nf (FL.unstream . FL.stream) tl
62+ [ bench "Text" $ nf T.stream t
63+ , bench "LazyText" $ nf TL.stream tl
7564 ]
7665
7766 -- Encoding.Fusion
benchmarks/text-benchmarks.cabal+2−12
@@ -3,7 +3,7 @@ version: 0.0.0.0
33synopsis: Benchmarks for the text package
44description: Benchmarks for the text package
55homepage: https://bitbucket.org/bos/text
6−license: BSD2
6+license: BSD3
77license-file: ../LICENSE
88author: Jasper Van der Jeugt <jaspervdj@gmail.com>,
99 Bryan O'Sullivan <bos@serpentine.com>,
@@ -15,11 +15,6 @@ build-type: Simple
1515
1616cabal-version: >=1.2
1717
18−flag bytestring-builder
19− description: Depend on the bytestring-builder package for backwards compatibility.
20− default: False
21− manual: False
22−
2318flag llvm
2419 description: use LLVM
2520 default: False
@@ -38,6 +33,7 @@ executable text-benchmarks
3833 build-depends: base == 4.*,
3934 binary,
4035 blaze-builder,
36+ bytestring,
4137 bytestring-lexing >= 0.5.0,
4238 containers,
4339 criterion >= 0.10.0.0,
@@ -50,12 +46,6 @@ executable text-benchmarks
5046 utf8-string,
5147 vector
5248
53− if flag(bytestring-builder)
54− build-depends: bytestring >= 0.9 && < 0.10.4,
55− bytestring-builder >= 0.10.4
56− else
57− build-depends: bytestring >= 0.10.4
58−
5949executable text-multilang
6050 hs-source-dirs: haskell
6151 main-is: Multilang.hs
changelog.md−11
@@ -1,14 +1,3 @@
1−1.2.2.1
2−
3−* The switch to `integer-pure` in 1.2.2.0 was apparently mistaken.
4− The build flag has been renamed accordingly. Your army of diligent
5− maintainers apologizes for the churn.
6−
7−* Spec compliance: toCaseFold now follows the Unicode 8.0 spec
8− (updated from 7.0)
9−
10−* An STG lint error has been fixed
11−
1211.2.2.0
132
143* The `integer-simple` package, upon which this package optionally
tests/literal-rule-test.sh+1−1
@@ -6,7 +6,7 @@ function check_firings() {
66 rule=$1
77 expected=$2
88 build="ghc -O -ddump-rule-firings LiteralRuleTest.hs"
9− build="$build -i.. -I../include"
9+ build="$build -i.. -I../include -DMIN_VERSION_bytestring(a,b,c)=1"
1010 touch LiteralRuleTest.hs
1111 echo -n "Want to see $expected firings of rule $rule... " >&2
1212 firings=$($build 2>&1 | grep "Rule fired: $rule\$" | wc -l)
tests/text-tests.cabal+1−1
@@ -3,7 +3,7 @@ version: 0.0.0.0
33synopsis: Functional tests for the text package
44description: Functional tests for the text package
55homepage: https://github.com/bos/text
6−license: BSD2
6+license: BSD3
77license-file: ../LICENSE
88author: Jasper Van der Jeugt <jaspervdj@gmail.com>,
99 Bryan O'Sullivan <bos@serpentine.com>,
text.cabal+15−26
@@ -1,5 +1,5 @@
11name: text
2−version: 1.2.2.1
2+version: 1.2.2.0
33homepage: https://github.com/bos/text
44bug-reports: https://github.com/bos/text/issues
55synopsis: An efficient packed Unicode text type.
@@ -31,7 +31,7 @@ description:
3131 the @text-icu@ package:
3232 <http://hackage.haskell.org/package/text-icu>
3333
34−license: BSD2
34+license: BSD3
3535license-file: LICENSE
3636author: Bryan O'Sullivan <bos@serpentine.com>
3737maintainer: Bryan O'Sullivan <bos@serpentine.com>
@@ -64,20 +64,15 @@ extra-source-files:
6464 tests/scripts/*.sh
6565 tests/text-tests.cabal
6666
67−flag bytestring-builder
68− description: Depend on the bytestring-builder package for backwards compatibility.
69− default: False
70− manual: False
71−
7267flag developer
7368 description: operate in developer mode
7469 default: False
7570 manual: True
7671
77−flag integer-simple
78− description: Use the simple integer library instead of GMP
72+flag integer-pure
73+ description: Use the pure-Haskell integer library instead of GMP
7974 default: False
80− manual: False
75+ manual: True
8176
8277library
8378 c-sources: cbits/cbits.c
@@ -138,11 +133,10 @@ library
138133 deepseq >= 1.1.0.0,
139134 ghc-prim >= 0.2
140135
141− if flag(bytestring-builder)
142− build-depends: bytestring >= 0.9 && < 0.10.4,
143− bytestring-builder >= 0.10.4
136+ if impl(ghc >= 7.7)
137+ build-depends: bytestring >= 0.10.4.0
144138 else
145− build-depends: bytestring >= 0.10.4
139+ build-depends: bytestring >= 0.9
146140
147141 cpp-options: -DHAVE_DEEPSEQ
148142 ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
@@ -151,9 +145,9 @@ library
151145 ghc-options: -Werror
152146 cpp-options: -DASSERTS
153147
154− if flag(integer-simple)
155− cpp-options: -DINTEGER_SIMPLE
156− build-depends: integer-simple >= 0.1 && < 0.5
148+ if flag(integer-pure)
149+ cpp-options: -DINTEGER_PURE
150+ build-depends: integer-pure >= 1.0
157151 else
158152 cpp-options: -DINTEGER_GMP
159153 build-depends: integer-gmp >= 0.2
@@ -177,6 +171,7 @@ test-suite tests
177171 array,
178172 base,
179173 binary,
174+ bytestring,
180175 deepseq,
181176 directory,
182177 ghc-prim,
@@ -186,15 +181,9 @@ test-suite tests
186181 test-framework-hunit >= 0.2,
187182 test-framework-quickcheck2 >= 0.2
188183
189− if flag(bytestring-builder)
190− build-depends: bytestring >= 0.9 && < 0.10.4,
191− bytestring-builder >= 0.10.4
192− else
193− build-depends: bytestring >= 0.10.4
194−
195− if flag(integer-simple)
196− cpp-options: -DINTEGER_SIMPLE
197− build-depends: integer-simple >= 0.1 && < 0.5
184+ if flag(integer-pure)
185+ cpp-options: -DINTEGER_PURE
186+ build-depends: integer-pure >= 0.1 && < 0.5
198187 else
199188 cpp-options: -DINTEGER_GMP
200189 build-depends: integer-gmp >= 0.2