on 620a3af help sign in
.gitignore−1
since splitsnapshots
unifiedsplit
@@ -1,3 +1,2 @@
1dist
1dist
2cabal-dev
2cabal-dev
3−cabal.sandbox.config
.hgtags−2
@@ -62,5 +62,3 @@ f8a60279237c1c28e094868740d9188dd94fcc9e 1.2.0.0
6278227a84740b70dcd4cf7a65f3bcf603d87e48e2 1.2.1.1
6278227a84740b70dcd4cf7a65f3bcf603d87e48e2 1.2.1.1
6340f268e6735749ef36f487e1d928eaa957bb431d 1.2.1.2
6340f268e6735749ef36f487e1d928eaa957bb431d 1.2.1.2
64631fd055e27fa10983e17e9ad36d1b285b85c661 1.2.1.3
64631fd055e27fa10983e17e9ad36d1b285b85c661 1.2.1.3
65−8221a68ed5ec37028357df9c6c25f52320e54ad9 1.2.2.0
66−ce1c5ac65eb9f5580114b4e380092b05a485e95d 1.2.2.1
Data/Text.hs+15−65
@@ -129,7 +129,6 @@ module Data.Text
129 , drop
129 , drop
130 , dropEnd
130 , dropEnd
131 , takeWhile
131 , takeWhile
132− , takeWhileEnd
133 , dropWhile
132 , dropWhile
134 , dropWhileEnd
133 , dropWhileEnd
135 , dropAround
134 , dropAround
@@ -215,13 +214,10 @@ import qualified Data.Text.Array as A
215import qualified Data.List as L
214import qualified Data.List as L
216import Data.Binary (Binary(get, put))
215import Data.Binary (Binary(get, put))
217import Data.Monoid (Monoid(..))
216import Data.Monoid (Monoid(..))
218−#if MIN_VERSION_base(4,9,0)
219−import Data.Semigroup (Semigroup(..))
220−#endif
221import Data.String (IsString(..))
217import Data.String (IsString(..))
222import qualified Data.Text.Internal.Fusion as S
218import qualified Data.Text.Internal.Fusion as S
223import qualified Data.Text.Internal.Fusion.Common as S
219import qualified Data.Text.Internal.Fusion.Common as S
224−import Data.Text.Encoding (decodeUtf8', encodeUtf8)
220+import Data.Text.Encoding (decodeUtf8, encodeUtf8)
225import Data.Text.Internal.Fusion (stream, reverseStream, unstream)
221import Data.Text.Internal.Fusion (stream, reverseStream, unstream)
226import Data.Text.Internal.Private (span_)
222import Data.Text.Internal.Private (span_)
227import Data.Text.Internal (Text(..), empty, firstf, mul, safe, text)
223import Data.Text.Internal (Text(..), empty, firstf, mul, safe, text)
@@ -238,13 +234,10 @@ import Data.ByteString (ByteString)
238import qualified Data.Text.Lazy as L
234import qualified Data.Text.Lazy as L
239import Data.Int (Int64)
235import Data.Int (Int64)
240#endif
236#endif
241−import GHC.Base (eqInt, neInt, gtInt, geInt, ltInt, leInt)
242#if __GLASGOW_HASKELL__ >= 708
237#if __GLASGOW_HASKELL__ >= 708
243import qualified GHC.Exts as Exts
238import qualified GHC.Exts as Exts
244#endif
239#endif
245−#if MIN_VERSION_base(4,7,0)
246import Text.Printf (PrintfArg, formatArg, formatString)
240import Text.Printf (PrintfArg, formatArg, formatString)
247−#endif
248
241
249-- $strict
242-- $strict
250--
243--
@@ -333,21 +326,9 @@ instance Ord Text where
333instance Read Text where
326instance Read Text where
334 readsPrec p str = [(pack x,y) | (x,y) <- readsPrec p str]
327 readsPrec p str = [(pack x,y) | (x,y) <- readsPrec p str]
335
328
336−#if MIN_VERSION_base(4,9,0)
337−-- Semigroup orphan instances for older GHCs are provided by
338−-- 'semigroups` package
339−
340−instance Semigroup Text where
341− (<>) = append
342−#endif
343−
344instance Monoid Text where
329instance Monoid Text where
345 mempty = empty
330 mempty = empty
346−#if MIN_VERSION_base(4,9,0)
347− mappend = (<>) -- future-proof definition
348−#else
349 mappend = append
331 mappend = append
350−#endif
351 mconcat = concat
332 mconcat = concat
352
333
353instance IsString Text where
334instance IsString Text where
@@ -366,11 +347,7 @@ instance NFData Text where rnf !_ = ()
366
347
367instance Binary Text where
348instance Binary Text where
368 put t = put (encodeUtf8 t)
349 put t = put (encodeUtf8 t)
369− get = do
370− bs <- get
371− case decodeUtf8' bs of
350+ get = P.fmap decodeUtf8 get
372− P.Left exn -> P.fail (P.show exn)
373− P.Right a -> P.return a
374
351
375-- | This instance preserves data abstraction at the cost of inefficiency.
352-- | This instance preserves data abstraction at the cost of inefficiency.
376-- We omit reflection services for the sake of data abstraction.
353-- We omit reflection services for the sake of data abstraction.
@@ -395,11 +372,8 @@ instance Data Text where
395 _ -> P.error "gunfold"
372 _ -> P.error "gunfold"
396 dataTypeOf _ = textDataType
373 dataTypeOf _ = textDataType
397
374
398−#if MIN_VERSION_base(4,7,0)
399−-- | Only defined for @base-4.7.0.0@ and later
400instance PrintfArg Text where
375instance PrintfArg Text where
401 formatArg txt = formatString $ unpack txt
376 formatArg txt = formatString $ unpack txt
402−#endif
403
377
404packConstr :: Constr
378packConstr :: Constr
405packConstr = mkConstr textDataType "pack" [] Prefix
379packConstr = mkConstr textDataType "pack" [] Prefix
@@ -486,8 +460,8 @@ head t = S.head (stream t)
486uncons :: Text -> Maybe (Char, Text)
460uncons :: Text -> Maybe (Char, Text)
487uncons t@(Text arr off len)
461uncons t@(Text arr off len)
488 | len <= 0 = Nothing
462 | len <= 0 = Nothing
489− | otherwise = Just $ let !(Iter c d) = iter t 0
490− in (c, text arr (off+d) (len-d))
463+ | otherwise = Just (c, text arr (off+d) (len-d))
464+ where Iter c d = iter t 0
491{-# INLINE [1] uncons #-}
465{-# INLINE [1] uncons #-}
492
466
493-- | Lifted from Control.Arrow and specialized.
467-- | Lifted from Control.Arrow and specialized.
@@ -572,9 +546,7 @@ isSingleton = S.isSingleton . stream
572-- Subject to fusion.
546-- Subject to fusion.
573length :: Text -> Int
547length :: Text -> Int
574length t = S.length (stream t)
548length t = S.length (stream t)
575−{-# INLINE [0] length #-}
549+{-# INLINE 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.
578
550
579-- | /O(n)/ Compare the count of characters in a 'Text' to a number.
551-- | /O(n)/ Compare the count of characters in a 'Text' to a number.
580-- Subject to fusion.
552-- Subject to fusion.
@@ -593,32 +565,32 @@ compareLength t n = S.compareLengthI (stream t) n
593
565
594{-# RULES
566{-# RULES
595"TEXT ==N/length -> compareLength/==EQ" [~1] forall t n.
567"TEXT ==N/length -> compareLength/==EQ" [~1] forall t n.
596− eqInt (length t) n = compareLength t n == EQ
568+ (==) (length t) n = compareLength t n == EQ
597 #-}
569 #-}
598
570
599{-# RULES
571{-# RULES
600"TEXT /=N/length -> compareLength//=EQ" [~1] forall t n.
572"TEXT /=N/length -> compareLength//=EQ" [~1] forall t n.
601− neInt (length t) n = compareLength t n /= EQ
573+ (/=) (length t) n = compareLength t n /= EQ
602 #-}
574 #-}
603
575
604{-# RULES
576{-# RULES
605"TEXT <N/length -> compareLength/==LT" [~1] forall t n.
577"TEXT <N/length -> compareLength/==LT" [~1] forall t n.
606− ltInt (length t) n = compareLength t n == LT
578+ (<) (length t) n = compareLength t n == LT
607 #-}
579 #-}
608
580
609{-# RULES
581{-# RULES
610"TEXT <=N/length -> compareLength//=GT" [~1] forall t n.
582"TEXT <=N/length -> compareLength//=GT" [~1] forall t n.
611− leInt (length t) n = compareLength t n /= GT
583+ (<=) (length t) n = compareLength t n /= GT
612 #-}
584 #-}
613
585
614{-# RULES
586{-# RULES
615"TEXT >N/length -> compareLength/==GT" [~1] forall t n.
587"TEXT >N/length -> compareLength/==GT" [~1] forall t n.
616− gtInt (length t) n = compareLength t n == GT
588+ (>) (length t) n = compareLength t n == GT
617 #-}
589 #-}
618
590
619{-# RULES
591{-# RULES
620"TEXT >=N/length -> compareLength//=LT" [~1] forall t n.
592"TEXT >=N/length -> compareLength//=LT" [~1] forall t n.
621− geInt (length t) n = compareLength t n /= LT
593+ (>=) (length t) n = compareLength t n /= LT
622 #-}
594 #-}
623
595
624-- -----------------------------------------------------------------------------
596-- -----------------------------------------------------------------------------
@@ -915,13 +887,13 @@ concatMap f = concat . foldr ((:) . f) []
915{-# INLINE concatMap #-}
887{-# INLINE concatMap #-}
916
888
917-- | /O(n)/ 'any' @p@ @t@ determines whether any character in the
889-- | /O(n)/ 'any' @p@ @t@ determines whether any character in the
918−-- 'Text' @t@ satisfies the predicate @p@. Subject to fusion.
890+-- 'Text' @t@ satisifes the predicate @p@. Subject to fusion.
919any :: (Char -> Bool) -> Text -> Bool
891any :: (Char -> Bool) -> Text -> Bool
920any p t = S.any p (stream t)
892any p t = S.any p (stream t)
921{-# INLINE any #-}
893{-# INLINE any #-}
922
894
923-- | /O(n)/ 'all' @p@ @t@ determines whether all characters in the
895-- | /O(n)/ 'all' @p@ @t@ determines whether all characters in the
924−-- 'Text' @t@ satisfy the predicate @p@. Subject to fusion.
896+-- 'Text' @t@ satisify the predicate @p@. Subject to fusion.
925all :: (Char -> Bool) -> Text -> Bool
897all :: (Char -> Bool) -> Text -> Bool
926all p t = S.all p (stream t)
898all p t = S.all p (stream t)
927{-# INLINE all #-}
899{-# INLINE all #-}
@@ -1152,27 +1124,6 @@ takeWhile p t@(Text arr off len) = loop 0
1152 unstream (S.takeWhile p (stream t)) = takeWhile p t
1124 unstream (S.takeWhile p (stream t)) = takeWhile p t
1153 #-}
1125 #-}
1154
1126
1155−-- | /O(n)/ 'takeWhileEnd', applied to a predicate @p@ and a 'Text',
1156−-- returns the longest suffix (possibly empty) of elements that
1157−-- satisfy @p@. Subject to fusion.
1158−-- Examples:
1159−--
1160−-- > takeWhileEnd (=='o') "foo" == "oo"
1161−takeWhileEnd :: (Char -> Bool) -> Text -> Text
1162−takeWhileEnd p t@(Text arr off len) = loop (len-1) len
1163− where loop !i !l | l <= 0 = t
1164− | p c = loop (i+d) (l+d)
1165− | otherwise = text arr (off+l) (len-l)
1166− where (c,d) = reverseIter t i
1167−{-# INLINE [1] takeWhileEnd #-}
1168−
1169−{-# RULES
1170−"TEXT takeWhileEnd -> fused" [~1] forall p t.
1171− takeWhileEnd p t = S.reverse (S.takeWhile p (S.reverseStream t))
1172−"TEXT takeWhileEnd -> unfused" [1] forall p t.
1173− S.reverse (S.takeWhile p (S.reverseStream t)) = takeWhileEnd p t
1174− #-}
1175−
1176-- | /O(n)/ 'dropWhile' @p@ @t@ returns the suffix remaining after
1127-- | /O(n)/ 'dropWhile' @p@ @t@ returns the suffix remaining after
1177-- 'takeWhile' @p@ @t@. Subject to fusion.
1128-- 'takeWhile' @p@ @t@. Subject to fusion.
1178dropWhile :: (Char -> Bool) -> Text -> Text
1129dropWhile :: (Char -> Bool) -> Text -> Text
@@ -1191,9 +1142,8 @@ dropWhile p t@(Text arr off len) = loop 0 0
1191 #-}
1142 #-}
1192
1143
1193-- | /O(n)/ 'dropWhileEnd' @p@ @t@ returns the prefix remaining after
1144-- | /O(n)/ 'dropWhileEnd' @p@ @t@ returns the prefix remaining after
1194−-- dropping characters that satisfy the predicate @p@ from the end of
1145+-- dropping characters that fail the predicate @p@ from the end of
1195-- @t@. Subject to fusion.
1146-- @t@. Subject to fusion.
1196−--
1197-- Examples:
1147-- Examples:
1198--
1148--
1199-- > dropWhileEnd (=='.') "foo..." == "foo"
1149-- > dropWhileEnd (=='.') "foo..." == "foo"
@@ -1213,7 +1163,7 @@ dropWhileEnd p t@(Text arr off len) = loop (len-1) len
1213 #-}
1163 #-}
1214
1164
1215-- | /O(n)/ 'dropAround' @p@ @t@ returns the substring remaining after
1165-- | /O(n)/ 'dropAround' @p@ @t@ returns the substring remaining after
1216−-- dropping characters that satisfy the predicate @p@ from both the
1166+-- dropping characters that fail the predicate @p@ from both the
1217-- beginning and end of @t@. Subject to fusion.
1167-- beginning and end of @t@. Subject to fusion.
1218dropAround :: (Char -> Bool) -> Text -> Text
1168dropAround :: (Char -> Bool) -> Text -> Text
1219dropAround p = dropWhile p . dropWhileEnd p
1169dropAround p = dropWhile p . dropWhileEnd p
Data/Text/Array.hs+4−5
@@ -20,7 +20,7 @@
20-- > import qualified Data.Text.Array as A
20-- > import qualified Data.Text.Array as A
21--
21--
22-- The names in this module resemble those in the 'Data.Array' family
22-- 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
24-- naming.
24-- naming.
25module Data.Text.Array
25module Data.Text.Array
26 (
26 (
@@ -74,7 +74,7 @@ import Foreign.C.Types (CInt, CSize)
74#endif
74#endif
75import GHC.Base (ByteArray#, MutableByteArray#, Int(..),
75import GHC.Base (ByteArray#, MutableByteArray#, Int(..),
76 indexWord16Array#, newByteArray#,
76 indexWord16Array#, newByteArray#,
77− unsafeFreezeByteArray#, writeWord16Array#)
77+ unsafeCoerce#, writeWord16Array#)
78import GHC.ST (ST(..), runST)
78import GHC.ST (ST(..), runST)
79import GHC.Word (Word16(..))
79import GHC.Word (Word16(..))
80import Prelude hiding (length, read)
80import Prelude hiding (length, read)
@@ -130,9 +130,8 @@ array_size_error = error "Data.Text.Array.new: size overflow"
130
130
131-- | Freeze a mutable array. Do not mutate the 'MArray' afterwards!
131-- | Freeze a mutable array. Do not mutate the 'MArray' afterwards!
132unsafeFreeze :: MArray s -> ST s Array
132unsafeFreeze :: MArray s -> ST s Array
133−unsafeFreeze MArray{..} = ST $ \s1# ->
133+unsafeFreeze MArray{..} = ST $ \s# ->
134− case unsafeFreezeByteArray# maBA s1# of
134+ (# s#, Array (unsafeCoerce# maBA)
135− (# s2#, ba# #) -> (# s2#, Array ba#
136#if defined(ASSERTS)
135#if defined(ASSERTS)
137 maLen
136 maLen
138#endif
137#endif
Data/Text/Encoding.hs+18−7
@@ -55,9 +55,13 @@ module Data.Text.Encoding
55 , encodeUtf32LE
55 , encodeUtf32LE
56 , encodeUtf32BE
56 , encodeUtf32BE
57
57
58+#if MIN_VERSION_bytestring(0,10,4)
58 -- * Encoding Text using ByteString Builders
59 -- * Encoding Text using ByteString Builders
60+ -- | /Note/ that these functions are only available if built against
61+ -- @bytestring >= 0.10.4.0@.
59 , encodeUtf8Builder
62 , encodeUtf8Builder
60 , encodeUtf8BuilderEscaped
63 , encodeUtf8BuilderEscaped
64+#endif
61 ) where
65 ) where
62
66
63#if __GLASGOW_HASKELL__ >= 702
67#if __GLASGOW_HASKELL__ >= 702
@@ -66,15 +70,24 @@ import Control.Monad.ST.Unsafe (unsafeIOToST, unsafeSTToIO)
66import Control.Monad.ST (unsafeIOToST, unsafeSTToIO)
70import Control.Monad.ST (unsafeIOToST, unsafeSTToIO)
67#endif
71#endif
68
72
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+
69import Control.Exception (evaluate, try)
83import Control.Exception (evaluate, try)
70import Control.Monad.ST (runST)
84import Control.Monad.ST (runST)
71−import Data.Bits ((.&.))
72import Data.ByteString as B
85import Data.ByteString as B
73import Data.ByteString.Internal as B hiding (c2w)
86import Data.ByteString.Internal as B hiding (c2w)
74import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
87import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
75import Data.Text.Internal (Text(..), safe, text)
88import Data.Text.Internal (Text(..), safe, text)
76import Data.Text.Internal.Private (runText)
89import Data.Text.Internal.Private (runText)
77−import Data.Text.Internal.Unsafe.Char (ord, unsafeWrite)
90+import Data.Text.Internal.Unsafe.Char (unsafeWrite)
78import Data.Text.Internal.Unsafe.Shift (shiftR)
91import Data.Text.Internal.Unsafe.Shift (shiftR)
79import Data.Text.Show ()
92import Data.Text.Show ()
80import Data.Text.Unsafe (unsafeDupablePerformIO)
93import Data.Text.Unsafe (unsafeDupablePerformIO)
@@ -85,13 +98,8 @@ import Foreign.Marshal.Utils (with)
85import Foreign.Ptr (Ptr, minusPtr, nullPtr, plusPtr)
98import Foreign.Ptr (Ptr, minusPtr, nullPtr, plusPtr)
86import Foreign.Storable (Storable, peek, poke)
99import Foreign.Storable (Storable, peek, poke)
87import GHC.Base (ByteArray#, MutableByteArray#)
100import 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
92import qualified Data.Text.Array as A
101import qualified Data.Text.Array as A
93import qualified Data.Text.Internal.Encoding.Fusion as E
102import qualified Data.Text.Internal.Encoding.Fusion as E
94−import qualified Data.Text.Internal.Encoding.Utf16 as U16
95import qualified Data.Text.Internal.Fusion as F
103import qualified Data.Text.Internal.Fusion as F
96
104
97#include "text_cbits.h"
105#include "text_cbits.h"
@@ -307,6 +315,8 @@ decodeUtf8' :: ByteString -> Either UnicodeException Text
307decodeUtf8' = unsafeDupablePerformIO . try . evaluate . decodeUtf8With strictDecode
315decodeUtf8' = unsafeDupablePerformIO . try . evaluate . decodeUtf8With strictDecode
308{-# INLINE decodeUtf8' #-}
316{-# INLINE decodeUtf8' #-}
309
317
318+#if MIN_VERSION_bytestring(0,10,4)
319+
310-- | Encode text to a ByteString 'B.Builder' using UTF-8 encoding.
320-- | Encode text to a ByteString 'B.Builder' using UTF-8 encoding.
311encodeUtf8Builder :: Text -> B.Builder
321encodeUtf8Builder :: Text -> B.Builder
312encodeUtf8Builder = encodeUtf8BuilderEscaped (BP.liftFixedToBounded BP.word8)
322encodeUtf8Builder = encodeUtf8BuilderEscaped (BP.liftFixedToBounded BP.word8)
@@ -367,6 +377,7 @@ encodeUtf8BuilderEscaped be =
367 outerLoop i (B.BufferRange op ope)
377 outerLoop i (B.BufferRange op ope)
368 where
378 where
369 poke8 j v = poke (op `plusPtr` j) (fromIntegral v :: Word8)
379 poke8 j v = poke (op `plusPtr` j) (fromIntegral v :: Word8)
380+#endif
370
381
371-- | Encode text using UTF-8 encoding.
382-- | Encode text using UTF-8 encoding.
372encodeUtf8 :: Text -> ByteString
383encodeUtf8 :: Text -> ByteString
Data/Text/Internal/Builder.hs+1−16
@@ -6,7 +6,7 @@
6-- Module : Data.Text.Internal.Builder
6-- Module : Data.Text.Internal.Builder
7-- Copyright : (c) 2013 Bryan O'Sullivan
7-- Copyright : (c) 2013 Bryan O'Sullivan
8-- (c) 2010 Johan Tibell
8-- (c) 2010 Johan Tibell
9−-- License : BSD-style (see LICENSE)
9+-- License : BSD3-style (see LICENSE)
10--
10--
11-- Maintainer : Johan Tibell <johan.tibell@gmail.com>
11-- Maintainer : Johan Tibell <johan.tibell@gmail.com>
12-- Stability : experimental
12-- Stability : experimental
@@ -59,9 +59,6 @@ module Data.Text.Internal.Builder
59
59
60import Control.Monad.ST (ST, runST)
60import Control.Monad.ST (ST, runST)
61import Data.Monoid (Monoid(..))
61import Data.Monoid (Monoid(..))
62−#if MIN_VERSION_base(4,9,0)
63−import Data.Semigroup (Semigroup(..))
64−#endif
65import Data.Text.Internal (Text(..))
62import Data.Text.Internal (Text(..))
66import Data.Text.Internal.Lazy (smallChunkSize)
63import Data.Text.Internal.Lazy (smallChunkSize)
67import Data.Text.Unsafe (inlineInterleaveST)
64import Data.Text.Unsafe (inlineInterleaveST)
@@ -92,20 +89,10 @@ newtype Builder = Builder {
92 -> ST s [S.Text]
89 -> ST s [S.Text]
93 }
90 }
94
91
95−#if MIN_VERSION_base(4,9,0)
96−instance Semigroup Builder where
97− (<>) = append
98− {-# INLINE (<>) #-}
99−#endif
100−
101instance Monoid Builder where
92instance Monoid Builder where
102 mempty = empty
93 mempty = empty
103 {-# INLINE mempty #-}
94 {-# INLINE mempty #-}
104−#if MIN_VERSION_base(4,9,0)
105− mappend = (<>) -- future-proof definition
106−#else
107 mappend = append
95 mappend = append
108−#endif
109 {-# INLINE mappend #-}
96 {-# INLINE mappend #-}
110 mconcat = foldr mappend Data.Monoid.mempty
97 mconcat = foldr mappend Data.Monoid.mempty
111 {-# INLINE mconcat #-}
98 {-# INLINE mconcat #-}
@@ -242,8 +229,6 @@ flush = Builder $ \ k buf@(Buffer p o u l) ->
242 !t = Text arr o u
229 !t = Text arr o u
243 ts <- inlineInterleaveST (k b)
230 ts <- inlineInterleaveST (k b)
244 return $! t : ts
231 return $! t : ts
245−{-# INLINE [1] flush #-}
246−-- defer inlining so that flush/flush rule may fire.
247
232
248------------------------------------------------------------------------
233------------------------------------------------------------------------
249
234
Data/Text/Internal/Builder/Int/Digits.hs+1−1
@@ -2,7 +2,7 @@
2
2
3-- Module: Data.Text.Internal.Builder.Int.Digits
3-- Module: Data.Text.Internal.Builder.Int.Digits
4-- Copyright: (c) 2013 Bryan O'Sullivan
4-- Copyright: (c) 2013 Bryan O'Sullivan
5−-- License: BSD-style
5+-- License: BSD3
6-- Maintainer: Bryan O'Sullivan <bos@serpentine.com>
6-- Maintainer: Bryan O'Sullivan <bos@serpentine.com>
7-- Stability: experimental
7-- Stability: experimental
8-- Portability: portable
8-- 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
98-- | /O(n)/ Convert a 'Stream Char' into a 'Text'.
98-- | /O(n)/ Convert a 'Stream Char' into a 'Text'.
99unstream :: Stream Char -> Text
99unstream :: Stream Char -> Text
100unstream (Stream next0 s0 len) = runText $ \done -> do
100unstream (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
106 arr0 <- A.new mlen
102 arr0 <- A.new mlen
107− let outer !arr !maxi = encode
103+ let outer arr top = loop
108 where
104 where
109− -- keep the common case loop as small as possible
105+ loop !s !i =
110− encode !si !di =
111− case next0 si of
106+ case next0 s of
112− Done -> done arr di
107+ Done -> done arr i
113− Skip si' -> encode si' di
108+ Skip s' -> loop s' i
114− Yield c si'
109+ Yield x s'
115− -- simply check for the worst case
110+ | j >= top -> {-# SCC "unstream/resize" #-} do
116− | maxi < di + 1 -> realloc si di
111+ let top' = (top + 1) `shiftL` 1
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
112+ arr' <- A.new top'
126− A.copyM arr' 0 arr 0 di
113+ A.copyM arr' 0 arr 0 top
127− outer arr' (newlen - 1) si di
114+ outer arr' top' s i
128−
115+ | otherwise -> do d <- unsafeWrite arr i x
116+ loop s' (i+d)
117+ where j | ord x < 0x10000 = i
118+ | otherwise = i + 1
129− outer arr0 (mlen - 1) s0 0
119+ outer arr0 mlen s0 0
130{-# INLINE [0] unstream #-}
120{-# INLINE [0] unstream #-}
131{-# RULES "STREAM stream/unstream fusion" forall s. stream (unstream s) = s #-}
121{-# RULES "STREAM stream/unstream fusion" forall s. stream (unstream s) = s #-}
132
122
Data/Text/Internal/Fusion/CaseMapping.hs+112−286
@@ -1,10 +1,10 @@
1{-# LANGUAGE Rank2Types #-}
1{-# LANGUAGE Rank2Types #-}
2-- AUTOMATICALLY GENERATED - DO NOT EDIT
2-- AUTOMATICALLY GENERATED - DO NOT EDIT
3-- Generated by scripts/CaseMapping.hs
3-- Generated by scripts/CaseMapping.hs
4−-- CaseFolding-8.0.0.txt
4+-- CaseFolding-7.0.0.txt
5−-- Date: 2015-01-13, 18:16:36 GMT [MD]
5+-- Date: 2014-04-09, 20:00:56 GMT [MD]
6−-- SpecialCasing-8.0.0.txt
6+-- SpecialCasing-7.0.0.txt
7−-- Date: 2014-12-16, 23:08:04 GMT [MD]
7+-- Date: 2014-03-18, 07:18:02 GMT [MD]
8
8
9module Data.Text.Internal.Fusion.CaseMapping where
9module Data.Text.Internal.Fusion.CaseMapping where
10import Data.Char
10import Data.Char
@@ -337,6 +337,8 @@ foldMapping '\x017f' s = Yield '\x0073' (CC s '\x0000' '\x0000')
337foldMapping '\x01f0' s = Yield '\x006a' (CC s '\x030c' '\x0000')
337foldMapping '\x01f0' s = Yield '\x006a' (CC s '\x030c' '\x0000')
338-- COMBINING GREEK YPOGEGRAMMENI
338-- COMBINING GREEK YPOGEGRAMMENI
339foldMapping '\x0345' s = Yield '\x03b9' (CC s '\x0000' '\x0000')
339foldMapping '\x0345' s = Yield '\x03b9' (CC s '\x0000' '\x0000')
340+-- GREEK CAPITAL LETTER YOT
341+foldMapping '\x037f' s = Yield '\x03f3' (CC s '\x0000' '\x0000')
340-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
342-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
341foldMapping '\x0390' s = Yield '\x03b9' (CC s '\x0308' '\x0301')
343foldMapping '\x0390' s = Yield '\x03b9' (CC s '\x0308' '\x0301')
342-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
344-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
@@ -357,20 +359,20 @@ foldMapping '\x03f0' s = Yield '\x03ba' (CC s '\x0000' '\x0000')
357foldMapping '\x03f1' s = Yield '\x03c1' (CC s '\x0000' '\x0000')
359foldMapping '\x03f1' s = Yield '\x03c1' (CC s '\x0000' '\x0000')
358-- GREEK LUNATE EPSILON SYMBOL
360-- GREEK LUNATE EPSILON SYMBOL
359foldMapping '\x03f5' s = Yield '\x03b5' (CC s '\x0000' '\x0000')
361foldMapping '\x03f5' s = Yield '\x03b5' (CC s '\x0000' '\x0000')
362+-- CYRILLIC CAPITAL LETTER EN WITH LEFT HOOK
363+foldMapping '\x0528' s = Yield '\x0529' (CC s '\x0000' '\x0000')
364+-- CYRILLIC CAPITAL LETTER DZZHE
365+foldMapping '\x052a' s = Yield '\x052b' (CC s '\x0000' '\x0000')
366+-- CYRILLIC CAPITAL LETTER DCHE
367+foldMapping '\x052c' s = Yield '\x052d' (CC s '\x0000' '\x0000')
368+-- CYRILLIC CAPITAL LETTER EL WITH DESCENDER
369+foldMapping '\x052e' s = Yield '\x052f' (CC s '\x0000' '\x0000')
360-- ARMENIAN SMALL LIGATURE ECH YIWN
370-- ARMENIAN SMALL LIGATURE ECH YIWN
361foldMapping '\x0587' s = Yield '\x0565' (CC s '\x0582' '\x0000')
371foldMapping '\x0587' s = Yield '\x0565' (CC s '\x0582' '\x0000')
362−-- CHEROKEE SMALL LETTER YE
372+-- GEORGIAN CAPITAL LETTER YN
363−foldMapping '\x13f8' s = Yield '\x13f0' (CC s '\x0000' '\x0000')
373+foldMapping '\x10c7' s = Yield '\x2d27' (CC s '\x0000' '\x0000')
364−-- CHEROKEE SMALL LETTER YI
374+-- GEORGIAN CAPITAL LETTER AEN
365−foldMapping '\x13f9' s = Yield '\x13f1' (CC s '\x0000' '\x0000')
375+foldMapping '\x10cd' s = Yield '\x2d2d' (CC s '\x0000' '\x0000')
366−-- CHEROKEE SMALL LETTER YO
367−foldMapping '\x13fa' s = Yield '\x13f2' (CC s '\x0000' '\x0000')
368−-- CHEROKEE SMALL LETTER YU
369−foldMapping '\x13fb' s = Yield '\x13f3' (CC s '\x0000' '\x0000')
370−-- CHEROKEE SMALL LETTER YV
371−foldMapping '\x13fc' s = Yield '\x13f4' (CC s '\x0000' '\x0000')
372−-- CHEROKEE SMALL LETTER MV
373−foldMapping '\x13fd' s = Yield '\x13f5' (CC s '\x0000' '\x0000')
374-- LATIN SMALL LETTER H WITH LINE BELOW
376-- LATIN SMALL LETTER H WITH LINE BELOW
375foldMapping '\x1e96' s = Yield '\x0068' (CC s '\x0331' '\x0000')
377foldMapping '\x1e96' s = Yield '\x0068' (CC s '\x0331' '\x0000')
376-- LATIN SMALL LETTER T WITH DIAERESIS
378-- LATIN SMALL LETTER T WITH DIAERESIS
@@ -545,174 +547,36 @@ foldMapping '\x1ff6' s = Yield '\x03c9' (CC s '\x0342' '\x0000')
545foldMapping '\x1ff7' s = Yield '\x03c9' (CC s '\x0342' '\x03b9')
547foldMapping '\x1ff7' s = Yield '\x03c9' (CC s '\x0342' '\x03b9')
546-- GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
548-- GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
547foldMapping '\x1ffc' s = Yield '\x03c9' (CC s '\x03b9' '\x0000')
549foldMapping '\x1ffc' s = Yield '\x03c9' (CC s '\x03b9' '\x0000')
550+-- COPTIC CAPITAL LETTER BOHAIRIC KHEI
551+foldMapping '\x2cf2' s = Yield '\x2cf3' (CC s '\x0000' '\x0000')
548−-- LATIN CAPITAL LETTER J WITH CROSSED-TAIL
552+-- CYRILLIC CAPITAL LETTER DOUBLE O
553+foldMapping '\xa698' s = Yield '\xa699' (CC s '\x0000' '\x0000')
554+-- CYRILLIC CAPITAL LETTER CROSSED O
555+foldMapping '\xa69a' s = Yield '\xa69b' (CC s '\x0000' '\x0000')
556+-- LATIN CAPITAL LETTER C WITH BAR
557+foldMapping '\xa792' s = Yield '\xa793' (CC s '\x0000' '\x0000')
558+-- LATIN CAPITAL LETTER B WITH FLOURISH
559+foldMapping '\xa796' s = Yield '\xa797' (CC s '\x0000' '\x0000')
560+-- LATIN CAPITAL LETTER F WITH STROKE
549−foldMapping '\xa7b2' s = Yield '\x029d' (CC s '\x0000' '\x0000')
561+foldMapping '\xa798' s = Yield '\xa799' (CC s '\x0000' '\x0000')
550−-- LATIN CAPITAL LETTER CHI
562+-- LATIN CAPITAL LETTER VOLAPUK AE
551−foldMapping '\xa7b3' s = Yield '\xab53' (CC s '\x0000' '\x0000')
563+foldMapping '\xa79a' s = Yield '\xa79b' (CC s '\x0000' '\x0000')
552−-- LATIN CAPITAL LETTER BETA
564+-- LATIN CAPITAL LETTER VOLAPUK OE
553−foldMapping '\xa7b4' s = Yield '\xa7b5' (CC s '\x0000' '\x0000')
565+foldMapping '\xa79c' s = Yield '\xa79d' (CC s '\x0000' '\x0000')
554−-- LATIN CAPITAL LETTER OMEGA
566+-- LATIN CAPITAL LETTER VOLAPUK UE
555−foldMapping '\xa7b6' s = Yield '\xa7b7' (CC s '\x0000' '\x0000')
567+foldMapping '\xa79e' s = Yield '\xa79f' (CC s '\x0000' '\x0000')
556−-- CHEROKEE SMALL LETTER A
568+-- LATIN CAPITAL LETTER H WITH HOOK
557−foldMapping '\xab70' s = Yield '\x13a0' (CC s '\x0000' '\x0000')
569+foldMapping '\xa7aa' s = Yield '\x0266' (CC s '\x0000' '\x0000')
558−-- CHEROKEE SMALL LETTER E
570+-- LATIN CAPITAL LETTER REVERSED OPEN E
559−foldMapping '\xab71' s = Yield '\x13a1' (CC s '\x0000' '\x0000')
560−-- CHEROKEE SMALL LETTER I
561−foldMapping '\xab72' s = Yield '\x13a2' (CC s '\x0000' '\x0000')
562−-- CHEROKEE SMALL LETTER O
563−foldMapping '\xab73' s = Yield '\x13a3' (CC s '\x0000' '\x0000')
564−-- CHEROKEE SMALL LETTER U
565−foldMapping '\xab74' s = Yield '\x13a4' (CC s '\x0000' '\x0000')
566−-- CHEROKEE SMALL LETTER V
567−foldMapping '\xab75' s = Yield '\x13a5' (CC s '\x0000' '\x0000')
568−-- CHEROKEE SMALL LETTER GA
569−foldMapping '\xab76' s = Yield '\x13a6' (CC s '\x0000' '\x0000')
570−-- CHEROKEE SMALL LETTER KA
571−foldMapping '\xab77' s = Yield '\x13a7' (CC s '\x0000' '\x0000')
572−-- CHEROKEE SMALL LETTER GE
573−foldMapping '\xab78' s = Yield '\x13a8' (CC s '\x0000' '\x0000')
574−-- CHEROKEE SMALL LETTER GI
575−foldMapping '\xab79' s = Yield '\x13a9' (CC s '\x0000' '\x0000')
576−-- CHEROKEE SMALL LETTER GO
577−foldMapping '\xab7a' s = Yield '\x13aa' (CC s '\x0000' '\x0000')
578−-- CHEROKEE SMALL LETTER GU
579−foldMapping '\xab7b' s = Yield '\x13ab' (CC s '\x0000' '\x0000')
580−-- CHEROKEE SMALL LETTER GV
581−foldMapping '\xab7c' s = Yield '\x13ac' (CC s '\x0000' '\x0000')
582−-- CHEROKEE SMALL LETTER HA
583−foldMapping '\xab7d' s = Yield '\x13ad' (CC s '\x0000' '\x0000')
584−-- CHEROKEE SMALL LETTER HE
585−foldMapping '\xab7e' s = Yield '\x13ae' (CC s '\x0000' '\x0000')
586−-- CHEROKEE SMALL LETTER HI
587−foldMapping '\xab7f' s = Yield '\x13af' (CC s '\x0000' '\x0000')
588−-- CHEROKEE SMALL LETTER HO
589−foldMapping '\xab80' s = Yield '\x13b0' (CC s '\x0000' '\x0000')
590−-- CHEROKEE SMALL LETTER HU
591−foldMapping '\xab81' s = Yield '\x13b1' (CC s '\x0000' '\x0000')
592−-- CHEROKEE SMALL LETTER HV
593−foldMapping '\xab82' s = Yield '\x13b2' (CC s '\x0000' '\x0000')
594−-- CHEROKEE SMALL LETTER LA
595−foldMapping '\xab83' s = Yield '\x13b3' (CC s '\x0000' '\x0000')
596−-- CHEROKEE SMALL LETTER LE
597−foldMapping '\xab84' s = Yield '\x13b4' (CC s '\x0000' '\x0000')
598−-- CHEROKEE SMALL LETTER LI
599−foldMapping '\xab85' s = Yield '\x13b5' (CC s '\x0000' '\x0000')
600−-- CHEROKEE SMALL LETTER LO
601−foldMapping '\xab86' s = Yield '\x13b6' (CC s '\x0000' '\x0000')
602−-- CHEROKEE SMALL LETTER LU
603−foldMapping '\xab87' s = Yield '\x13b7' (CC s '\x0000' '\x0000')
604−-- CHEROKEE SMALL LETTER LV
605−foldMapping '\xab88' s = Yield '\x13b8' (CC s '\x0000' '\x0000')
606−-- CHEROKEE SMALL LETTER MA
607−foldMapping '\xab89' s = Yield '\x13b9' (CC s '\x0000' '\x0000')
608−-- CHEROKEE SMALL LETTER ME
609−foldMapping '\xab8a' s = Yield '\x13ba' (CC s '\x0000' '\x0000')
610−-- CHEROKEE SMALL LETTER MI
611−foldMapping '\xab8b' s = Yield '\x13bb' (CC s '\x0000' '\x0000')
612−-- CHEROKEE SMALL LETTER MO
613−foldMapping '\xab8c' s = Yield '\x13bc' (CC s '\x0000' '\x0000')
614−-- CHEROKEE SMALL LETTER MU
615−foldMapping '\xab8d' s = Yield '\x13bd' (CC s '\x0000' '\x0000')
616−-- CHEROKEE SMALL LETTER NA
617−foldMapping '\xab8e' s = Yield '\x13be' (CC s '\x0000' '\x0000')
618−-- CHEROKEE SMALL LETTER HNA
619−foldMapping '\xab8f' s = Yield '\x13bf' (CC s '\x0000' '\x0000')
620−-- CHEROKEE SMALL LETTER NAH
621−foldMapping '\xab90' s = Yield '\x13c0' (CC s '\x0000' '\x0000')
622−-- CHEROKEE SMALL LETTER NE
623−foldMapping '\xab91' s = Yield '\x13c1' (CC s '\x0000' '\x0000')
624−-- CHEROKEE SMALL LETTER NI
625−foldMapping '\xab92' s = Yield '\x13c2' (CC s '\x0000' '\x0000')
626−-- CHEROKEE SMALL LETTER NO
627−foldMapping '\xab93' s = Yield '\x13c3' (CC s '\x0000' '\x0000')
628−-- CHEROKEE SMALL LETTER NU
629−foldMapping '\xab94' s = Yield '\x13c4' (CC s '\x0000' '\x0000')
630−-- CHEROKEE SMALL LETTER NV
631−foldMapping '\xab95' s = Yield '\x13c5' (CC s '\x0000' '\x0000')
632−-- CHEROKEE SMALL LETTER QUA
633−foldMapping '\xab96' s = Yield '\x13c6' (CC s '\x0000' '\x0000')
634−-- CHEROKEE SMALL LETTER QUE
635−foldMapping '\xab97' s = Yield '\x13c7' (CC s '\x0000' '\x0000')
636−-- CHEROKEE SMALL LETTER QUI
637−foldMapping '\xab98' s = Yield '\x13c8' (CC s '\x0000' '\x0000')
638−-- CHEROKEE SMALL LETTER QUO
639−foldMapping '\xab99' s = Yield '\x13c9' (CC s '\x0000' '\x0000')
640−-- CHEROKEE SMALL LETTER QUU
641−foldMapping '\xab9a' s = Yield '\x13ca' (CC s '\x0000' '\x0000')
642−-- CHEROKEE SMALL LETTER QUV
643−foldMapping '\xab9b' s = Yield '\x13cb' (CC s '\x0000' '\x0000')
644−-- CHEROKEE SMALL LETTER SA
645−foldMapping '\xab9c' s = Yield '\x13cc' (CC s '\x0000' '\x0000')
646−-- CHEROKEE SMALL LETTER S
647−foldMapping '\xab9d' s = Yield '\x13cd' (CC s '\x0000' '\x0000')
648−-- CHEROKEE SMALL LETTER SE
649−foldMapping '\xab9e' s = Yield '\x13ce' (CC s '\x0000' '\x0000')
650−-- CHEROKEE SMALL LETTER SI
651−foldMapping '\xab9f' s = Yield '\x13cf' (CC s '\x0000' '\x0000')
652−-- CHEROKEE SMALL LETTER SO
653−foldMapping '\xaba0' s = Yield '\x13d0' (CC s '\x0000' '\x0000')
654−-- CHEROKEE SMALL LETTER SU
655−foldMapping '\xaba1' s = Yield '\x13d1' (CC s '\x0000' '\x0000')
656−-- CHEROKEE SMALL LETTER SV
657−foldMapping '\xaba2' s = Yield '\x13d2' (CC s '\x0000' '\x0000')
658−-- CHEROKEE SMALL LETTER DA
659−foldMapping '\xaba3' s = Yield '\x13d3' (CC s '\x0000' '\x0000')
660−-- CHEROKEE SMALL LETTER TA
661−foldMapping '\xaba4' s = Yield '\x13d4' (CC s '\x0000' '\x0000')
662−-- CHEROKEE SMALL LETTER DE
663−foldMapping '\xaba5' s = Yield '\x13d5' (CC s '\x0000' '\x0000')
664−-- CHEROKEE SMALL LETTER TE
665−foldMapping '\xaba6' s = Yield '\x13d6' (CC s '\x0000' '\x0000')
666−-- CHEROKEE SMALL LETTER DI
667−foldMapping '\xaba7' s = Yield '\x13d7' (CC s '\x0000' '\x0000')
668−-- CHEROKEE SMALL LETTER TI
669−foldMapping '\xaba8' s = Yield '\x13d8' (CC s '\x0000' '\x0000')
670−-- CHEROKEE SMALL LETTER DO
671−foldMapping '\xaba9' s = Yield '\x13d9' (CC s '\x0000' '\x0000')
672−-- CHEROKEE SMALL LETTER DU
673−foldMapping '\xabaa' s = Yield '\x13da' (CC s '\x0000' '\x0000')
674−-- CHEROKEE SMALL LETTER DV
675−foldMapping '\xabab' s = Yield '\x13db' (CC s '\x0000' '\x0000')
676−-- CHEROKEE SMALL LETTER DLA
677−foldMapping '\xabac' s = Yield '\x13dc' (CC s '\x0000' '\x0000')
678−-- CHEROKEE SMALL LETTER TLA
679−foldMapping '\xabad' s = Yield '\x13dd' (CC s '\x0000' '\x0000')
680−-- CHEROKEE SMALL LETTER TLE
681−foldMapping '\xabae' s = Yield '\x13de' (CC s '\x0000' '\x0000')
682−-- CHEROKEE SMALL LETTER TLI
683−foldMapping '\xabaf' s = Yield '\x13df' (CC s '\x0000' '\x0000')
684−-- CHEROKEE SMALL LETTER TLO
685−foldMapping '\xabb0' s = Yield '\x13e0' (CC s '\x0000' '\x0000')
686−-- CHEROKEE SMALL LETTER TLU
687−foldMapping '\xabb1' s = Yield '\x13e1' (CC s '\x0000' '\x0000')
688−-- CHEROKEE SMALL LETTER TLV
689−foldMapping '\xabb2' s = Yield '\x13e2' (CC s '\x0000' '\x0000')
690−-- CHEROKEE SMALL LETTER TSA
691−foldMapping '\xabb3' s = Yield '\x13e3' (CC s '\x0000' '\x0000')
692−-- CHEROKEE SMALL LETTER TSE
693−foldMapping '\xabb4' s = Yield '\x13e4' (CC s '\x0000' '\x0000')
694−-- CHEROKEE SMALL LETTER TSI
695−foldMapping '\xabb5' s = Yield '\x13e5' (CC s '\x0000' '\x0000')
696−-- CHEROKEE SMALL LETTER TSO
697−foldMapping '\xabb6' s = Yield '\x13e6' (CC s '\x0000' '\x0000')
698−-- CHEROKEE SMALL LETTER TSU
699−foldMapping '\xabb7' s = Yield '\x13e7' (CC s '\x0000' '\x0000')
571+foldMapping '\xa7ab' s = Yield '\x025c' (CC s '\x0000' '\x0000')
700−-- CHEROKEE SMALL LETTER TSV
572+-- LATIN CAPITAL LETTER SCRIPT G
701−foldMapping '\xabb8' s = Yield '\x13e8' (CC s '\x0000' '\x0000')
702−-- CHEROKEE SMALL LETTER WA
703−foldMapping '\xabb9' s = Yield '\x13e9' (CC s '\x0000' '\x0000')
573+foldMapping '\xa7ac' s = Yield '\x0261' (CC s '\x0000' '\x0000')
704−-- CHEROKEE SMALL LETTER WE
574+-- LATIN CAPITAL LETTER L WITH BELT
705−foldMapping '\xabba' s = Yield '\x13ea' (CC s '\x0000' '\x0000')
706−-- CHEROKEE SMALL LETTER WI
707−foldMapping '\xabbb' s = Yield '\x13eb' (CC s '\x0000' '\x0000')
575+foldMapping '\xa7ad' s = Yield '\x026c' (CC s '\x0000' '\x0000')
708−-- CHEROKEE SMALL LETTER WO
576+-- LATIN CAPITAL LETTER TURNED K
709−foldMapping '\xabbc' s = Yield '\x13ec' (CC s '\x0000' '\x0000')
710−-- CHEROKEE SMALL LETTER WU
711−foldMapping '\xabbd' s = Yield '\x13ed' (CC s '\x0000' '\x0000')
577+foldMapping '\xa7b0' s = Yield '\x029e' (CC s '\x0000' '\x0000')
712−-- CHEROKEE SMALL LETTER WV
578+-- LATIN CAPITAL LETTER TURNED T
713−foldMapping '\xabbe' s = Yield '\x13ee' (CC s '\x0000' '\x0000')
714−-- CHEROKEE SMALL LETTER YA
715−foldMapping '\xabbf' s = Yield '\x13ef' (CC s '\x0000' '\x0000')
579+foldMapping '\xa7b1' s = Yield '\x0287' (CC s '\x0000' '\x0000')
716-- LATIN SMALL LIGATURE FF
580-- LATIN SMALL LIGATURE FF
717foldMapping '\xfb00' s = Yield '\x0066' (CC s '\x0066' '\x0000')
581foldMapping '\xfb00' s = Yield '\x0066' (CC s '\x0066' '\x0000')
718-- LATIN SMALL LIGATURE FI
582-- LATIN SMALL LIGATURE FI
@@ -737,106 +601,68 @@ foldMapping '\xfb15' s = Yield '\x0574' (CC s '\x056b' '\x0000')
737foldMapping '\xfb16' s = Yield '\x057e' (CC s '\x0576' '\x0000')
601foldMapping '\xfb16' s = Yield '\x057e' (CC s '\x0576' '\x0000')
738-- ARMENIAN SMALL LIGATURE MEN XEH
602-- ARMENIAN SMALL LIGATURE MEN XEH
739foldMapping '\xfb17' s = Yield '\x0574' (CC s '\x056d' '\x0000')
603foldMapping '\xfb17' s = Yield '\x0574' (CC s '\x056d' '\x0000')
604+-- WARANG CITI CAPITAL LETTER NGAA
605+foldMapping '\x118a0' s = Yield '\x118c0' (CC s '\x0000' '\x0000')
740−-- OLD HUNGARIAN CAPITAL LETTER A
606+-- WARANG CITI CAPITAL LETTER A
741−foldMapping '\x10c80' s = Yield '\x10cc0' (CC s '\x0000' '\x0000')
742−-- OLD HUNGARIAN CAPITAL LETTER AA
743−foldMapping '\x10c81' s = Yield '\x10cc1' (CC s '\x0000' '\x0000')
744−-- OLD HUNGARIAN CAPITAL LETTER EB
745−foldMapping '\x10c82' s = Yield '\x10cc2' (CC s '\x0000' '\x0000')
746−-- OLD HUNGARIAN CAPITAL LETTER AMB
747−foldMapping '\x10c83' s = Yield '\x10cc3' (CC s '\x0000' '\x0000')
748−-- OLD HUNGARIAN CAPITAL LETTER EC
749−foldMapping '\x10c84' s = Yield '\x10cc4' (CC s '\x0000' '\x0000')
750−-- OLD HUNGARIAN CAPITAL LETTER ENC
751−foldMapping '\x10c85' s = Yield '\x10cc5' (CC s '\x0000' '\x0000')
752−-- OLD HUNGARIAN CAPITAL LETTER ECS
753−foldMapping '\x10c86' s = Yield '\x10cc6' (CC s '\x0000' '\x0000')
754−-- OLD HUNGARIAN CAPITAL LETTER ED
755−foldMapping '\x10c87' s = Yield '\x10cc7' (CC s '\x0000' '\x0000')
756−-- OLD HUNGARIAN CAPITAL LETTER AND
757−foldMapping '\x10c88' s = Yield '\x10cc8' (CC s '\x0000' '\x0000')
607+foldMapping '\x118a1' s = Yield '\x118c1' (CC s '\x0000' '\x0000')
758−-- OLD HUNGARIAN CAPITAL LETTER E
608+-- WARANG CITI CAPITAL LETTER WI
759−foldMapping '\x10c89' s = Yield '\x10cc9' (CC s '\x0000' '\x0000')
609+foldMapping '\x118a2' s = Yield '\x118c2' (CC s '\x0000' '\x0000')
760−-- OLD HUNGARIAN CAPITAL LETTER CLOSE E
610+-- WARANG CITI CAPITAL LETTER YU
761−foldMapping '\x10c8a' s = Yield '\x10cca' (CC s '\x0000' '\x0000')
611+foldMapping '\x118a3' s = Yield '\x118c3' (CC s '\x0000' '\x0000')
762−-- OLD HUNGARIAN CAPITAL LETTER EE
612+-- WARANG CITI CAPITAL LETTER YA
763−foldMapping '\x10c8b' s = Yield '\x10ccb' (CC s '\x0000' '\x0000')
613+foldMapping '\x118a4' s = Yield '\x118c4' (CC s '\x0000' '\x0000')
764−-- OLD HUNGARIAN CAPITAL LETTER EF
614+-- WARANG CITI CAPITAL LETTER YO
765−foldMapping '\x10c8c' s = Yield '\x10ccc' (CC s '\x0000' '\x0000')
615+foldMapping '\x118a5' s = Yield '\x118c5' (CC s '\x0000' '\x0000')
766−-- OLD HUNGARIAN CAPITAL LETTER EG
767−foldMapping '\x10c8d' s = Yield '\x10ccd' (CC s '\x0000' '\x0000')
768−-- OLD HUNGARIAN CAPITAL LETTER EGY
769−foldMapping '\x10c8e' s = Yield '\x10cce' (CC s '\x0000' '\x0000')
770−-- OLD HUNGARIAN CAPITAL LETTER EH
771−foldMapping '\x10c8f' s = Yield '\x10ccf' (CC s '\x0000' '\x0000')
772−-- OLD HUNGARIAN CAPITAL LETTER I
773−foldMapping '\x10c90' s = Yield '\x10cd0' (CC s '\x0000' '\x0000')
774−-- OLD HUNGARIAN CAPITAL LETTER II
616+-- WARANG CITI CAPITAL LETTER II
775−foldMapping '\x10c91' s = Yield '\x10cd1' (CC s '\x0000' '\x0000')
617+foldMapping '\x118a6' s = Yield '\x118c6' (CC s '\x0000' '\x0000')
776−-- OLD HUNGARIAN CAPITAL LETTER EJ
618+-- WARANG CITI CAPITAL LETTER UU
777−foldMapping '\x10c92' s = Yield '\x10cd2' (CC s '\x0000' '\x0000')
619+foldMapping '\x118a7' s = Yield '\x118c7' (CC s '\x0000' '\x0000')
778−-- OLD HUNGARIAN CAPITAL LETTER EK
620+-- WARANG CITI CAPITAL LETTER E
779−foldMapping '\x10c93' s = Yield '\x10cd3' (CC s '\x0000' '\x0000')
621+foldMapping '\x118a8' s = Yield '\x118c8' (CC s '\x0000' '\x0000')
780−-- OLD HUNGARIAN CAPITAL LETTER AK
622+-- WARANG CITI CAPITAL LETTER O
781−foldMapping '\x10c94' s = Yield '\x10cd4' (CC s '\x0000' '\x0000')
623+foldMapping '\x118a9' s = Yield '\x118c9' (CC s '\x0000' '\x0000')
782−-- OLD HUNGARIAN CAPITAL LETTER UNK
624+-- WARANG CITI CAPITAL LETTER ANG
783−foldMapping '\x10c95' s = Yield '\x10cd5' (CC s '\x0000' '\x0000')
625+foldMapping '\x118aa' s = Yield '\x118ca' (CC s '\x0000' '\x0000')
784−-- OLD HUNGARIAN CAPITAL LETTER EL
626+-- WARANG CITI CAPITAL LETTER GA
785−foldMapping '\x10c96' s = Yield '\x10cd6' (CC s '\x0000' '\x0000')
627+foldMapping '\x118ab' s = Yield '\x118cb' (CC s '\x0000' '\x0000')
786−-- OLD HUNGARIAN CAPITAL LETTER ELY
628+-- WARANG CITI CAPITAL LETTER KO
787−foldMapping '\x10c97' s = Yield '\x10cd7' (CC s '\x0000' '\x0000')
629+foldMapping '\x118ac' s = Yield '\x118cc' (CC s '\x0000' '\x0000')
788−-- OLD HUNGARIAN CAPITAL LETTER EM
789−foldMapping '\x10c98' s = Yield '\x10cd8' (CC s '\x0000' '\x0000')
790−-- OLD HUNGARIAN CAPITAL LETTER EN
791−foldMapping '\x10c99' s = Yield '\x10cd9' (CC s '\x0000' '\x0000')
792−-- OLD HUNGARIAN CAPITAL LETTER ENY
630+-- WARANG CITI CAPITAL LETTER ENY
793−foldMapping '\x10c9a' s = Yield '\x10cda' (CC s '\x0000' '\x0000')
631+foldMapping '\x118ad' s = Yield '\x118cd' (CC s '\x0000' '\x0000')
794−-- OLD HUNGARIAN CAPITAL LETTER O
632+-- WARANG CITI CAPITAL LETTER YUJ
795−foldMapping '\x10c9b' s = Yield '\x10cdb' (CC s '\x0000' '\x0000')
633+foldMapping '\x118ae' s = Yield '\x118ce' (CC s '\x0000' '\x0000')
796−-- OLD HUNGARIAN CAPITAL LETTER OO
634+-- WARANG CITI CAPITAL LETTER UC
797−foldMapping '\x10c9c' s = Yield '\x10cdc' (CC s '\x0000' '\x0000')
635+foldMapping '\x118af' s = Yield '\x118cf' (CC s '\x0000' '\x0000')
798−-- OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
636+-- WARANG CITI CAPITAL LETTER ENN
799−foldMapping '\x10c9d' s = Yield '\x10cdd' (CC s '\x0000' '\x0000')
800−-- OLD HUNGARIAN CAPITAL LETTER RUDIMENTA OE
801−foldMapping '\x10c9e' s = Yield '\x10cde' (CC s '\x0000' '\x0000')
802−-- OLD HUNGARIAN CAPITAL LETTER OEE
803−foldMapping '\x10c9f' s = Yield '\x10cdf' (CC s '\x0000' '\x0000')
804−-- OLD HUNGARIAN CAPITAL LETTER EP
805−foldMapping '\x10ca0' s = Yield '\x10ce0' (CC s '\x0000' '\x0000')
806−-- OLD HUNGARIAN CAPITAL LETTER EMP
807−foldMapping '\x10ca1' s = Yield '\x10ce1' (CC s '\x0000' '\x0000')
808−-- OLD HUNGARIAN CAPITAL LETTER ER
809−foldMapping '\x10ca2' s = Yield '\x10ce2' (CC s '\x0000' '\x0000')
637+foldMapping '\x118b0' s = Yield '\x118d0' (CC s '\x0000' '\x0000')
810−-- OLD HUNGARIAN CAPITAL LETTER SHORT ER
638+-- WARANG CITI CAPITAL LETTER ODD
811−foldMapping '\x10ca3' s = Yield '\x10ce3' (CC s '\x0000' '\x0000')
639+foldMapping '\x118b1' s = Yield '\x118d1' (CC s '\x0000' '\x0000')
812−-- OLD HUNGARIAN CAPITAL LETTER ES
640+-- WARANG CITI CAPITAL LETTER TTE
813−foldMapping '\x10ca4' s = Yield '\x10ce4' (CC s '\x0000' '\x0000')
641+foldMapping '\x118b2' s = Yield '\x118d2' (CC s '\x0000' '\x0000')
814−-- OLD HUNGARIAN CAPITAL LETTER ESZ
642+-- WARANG CITI CAPITAL LETTER NUNG
815−foldMapping '\x10ca5' s = Yield '\x10ce5' (CC s '\x0000' '\x0000')
643+foldMapping '\x118b3' s = Yield '\x118d3' (CC s '\x0000' '\x0000')
816−-- OLD HUNGARIAN CAPITAL LETTER ET
644+-- WARANG CITI CAPITAL LETTER DA
817−foldMapping '\x10ca6' s = Yield '\x10ce6' (CC s '\x0000' '\x0000')
645+foldMapping '\x118b4' s = Yield '\x118d4' (CC s '\x0000' '\x0000')
818−-- OLD HUNGARIAN CAPITAL LETTER ENT
646+-- WARANG CITI CAPITAL LETTER AT
819−foldMapping '\x10ca7' s = Yield '\x10ce7' (CC s '\x0000' '\x0000')
647+foldMapping '\x118b5' s = Yield '\x118d5' (CC s '\x0000' '\x0000')
820−-- OLD HUNGARIAN CAPITAL LETTER ETY
648+-- WARANG CITI CAPITAL LETTER AM
821−foldMapping '\x10ca8' s = Yield '\x10ce8' (CC s '\x0000' '\x0000')
649+foldMapping '\x118b6' s = Yield '\x118d6' (CC s '\x0000' '\x0000')
822−-- OLD HUNGARIAN CAPITAL LETTER ECH
650+-- WARANG CITI CAPITAL LETTER BU
823−foldMapping '\x10ca9' s = Yield '\x10ce9' (CC s '\x0000' '\x0000')
651+foldMapping '\x118b7' s = Yield '\x118d7' (CC s '\x0000' '\x0000')
824−-- OLD HUNGARIAN CAPITAL LETTER U
652+-- WARANG CITI CAPITAL LETTER PU
825−foldMapping '\x10caa' s = Yield '\x10cea' (CC s '\x0000' '\x0000')
653+foldMapping '\x118b8' s = Yield '\x118d8' (CC s '\x0000' '\x0000')
826−-- OLD HUNGARIAN CAPITAL LETTER UU
654+-- WARANG CITI CAPITAL LETTER HIYO
827−foldMapping '\x10cab' s = Yield '\x10ceb' (CC s '\x0000' '\x0000')
655+foldMapping '\x118b9' s = Yield '\x118d9' (CC s '\x0000' '\x0000')
828−-- OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
656+-- WARANG CITI CAPITAL LETTER HOLO
829−foldMapping '\x10cac' s = Yield '\x10cec' (CC s '\x0000' '\x0000')
657+foldMapping '\x118ba' s = Yield '\x118da' (CC s '\x0000' '\x0000')
830−-- OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
658+-- WARANG CITI CAPITAL LETTER HORR
831−foldMapping '\x10cad' s = Yield '\x10ced' (CC s '\x0000' '\x0000')
659+foldMapping '\x118bb' s = Yield '\x118db' (CC s '\x0000' '\x0000')
832−-- OLD HUNGARIAN CAPITAL LETTER EV
660+-- WARANG CITI CAPITAL LETTER HAR
833−foldMapping '\x10cae' s = Yield '\x10cee' (CC s '\x0000' '\x0000')
661+foldMapping '\x118bc' s = Yield '\x118dc' (CC s '\x0000' '\x0000')
834−-- OLD HUNGARIAN CAPITAL LETTER EZ
662+-- WARANG CITI CAPITAL LETTER SSUU
835−foldMapping '\x10caf' s = Yield '\x10cef' (CC s '\x0000' '\x0000')
663+foldMapping '\x118bd' s = Yield '\x118dd' (CC s '\x0000' '\x0000')
836−-- OLD HUNGARIAN CAPITAL LETTER EZS
664+-- WARANG CITI CAPITAL LETTER SII
837−foldMapping '\x10cb0' s = Yield '\x10cf0' (CC s '\x0000' '\x0000')
838−-- OLD HUNGARIAN CAPITAL LETTER ENT-SHAPED SIGN
839−foldMapping '\x10cb1' s = Yield '\x10cf1' (CC s '\x0000' '\x0000')
665+foldMapping '\x118be' s = Yield '\x118de' (CC s '\x0000' '\x0000')
840−-- OLD HUNGARIAN CAPITAL LETTER US
666+-- WARANG CITI CAPITAL LETTER VIYO
841−foldMapping '\x10cb2' s = Yield '\x10cf2' (CC s '\x0000' '\x0000')
667+foldMapping '\x118bf' s = Yield '\x118df' (CC s '\x0000' '\x0000')
842foldMapping c s = Yield (toLower c) (CC s '\0' '\0')
668foldMapping c s = Yield (toLower c) (CC s '\0' '\0')
Data/Text/Internal/Fusion/Common.hs+5−5
@@ -593,7 +593,7 @@ concatMap f = foldr (append . f) empty
593{-# INLINE [0] concatMap #-}
593{-# INLINE [0] concatMap #-}
594
594
595-- | /O(n)/ any @p @xs determines if any character in the stream
595-- | /O(n)/ any @p @xs determines if any character in the stream
596−-- @xs@ satisfies the predicate @p@.
596+-- @xs@ satisifes the predicate @p@.
597any :: (Char -> Bool) -> Stream Char -> Bool
597any :: (Char -> Bool) -> Stream Char -> Bool
598any p (Stream next0 s0 _len) = loop_any s0
598any p (Stream next0 s0 _len) = loop_any s0
599 where
599 where
@@ -605,7 +605,7 @@ any p (Stream next0 s0 _len) = loop_any s0
605{-# INLINE [0] any #-}
605{-# INLINE [0] any #-}
606
606
607-- | /O(n)/ all @p @xs determines if all characters in the 'Text'
607-- | /O(n)/ all @p @xs determines if all characters in the 'Text'
608−-- @xs@ satisfy the predicate @p@.
608+-- @xs@ satisify the predicate @p@.
609all :: (Char -> Bool) -> Stream Char -> Bool
609all :: (Char -> Bool) -> Stream Char -> Bool
610all p (Stream next0 s0 _len) = loop_all s0
610all p (Stream next0 s0 _len) = loop_all s0
611 where
611 where
@@ -669,12 +669,12 @@ scanl f z0 (Stream next0 s0 len) = Stream next (Scan1 z0 s0) (len+1) -- HINT may
669-- ** Generating and unfolding streams
669-- ** Generating and unfolding streams
670
670
671replicateCharI :: Integral a => a -> Char -> Stream Char
671replicateCharI :: Integral a => a -> Char -> Stream Char
672−replicateCharI !n !c
672+replicateCharI n c
673 | n < 0 = empty
673 | n < 0 = empty
674 | otherwise = Stream next 0 (fromIntegral n) -- HINT maybe too low
674 | otherwise = Stream next 0 (fromIntegral n) -- HINT maybe too low
675 where
675 where
676− next !i | i >= n = Done
676+ next i | i >= n = Done
677− | otherwise = Yield c (i + 1)
677+ | otherwise = Yield c (i + 1)
678{-# INLINE [0] replicateCharI #-}
678{-# INLINE [0] replicateCharI #-}
679
679
680data RI s = RI !s {-# UNPACK #-} !Int64
680data RI s = RI !s {-# UNPACK #-} !Int64
Data/Text/Internal/Read.hs+1−1
@@ -7,7 +7,7 @@
7-- Stability : experimental
7-- Stability : experimental
8-- Portability : GHC
8-- Portability : GHC
9--
9--
10−-- Common internal functions for reading textual data.
10+-- Common internal functiopns for reading textual data.
11module Data.Text.Internal.Read
11module Data.Text.Internal.Read
12 (
12 (
13 IReader
13 IReader
Data/Text/Lazy.hs+8−49
@@ -140,7 +140,6 @@ module Data.Text.Lazy
140 , drop
140 , drop
141 , dropEnd
141 , dropEnd
142 , takeWhile
142 , takeWhile
143− , takeWhileEnd
144 , dropWhile
143 , dropWhile
145 , dropWhileEnd
144 , dropWhileEnd
146 , dropAround
145 , dropAround
@@ -215,9 +214,6 @@ import Data.Data (Data(gfoldl, toConstr, gunfold, dataTypeOf), constrIndex,
215 Constr, mkConstr, DataType, mkDataType, Fixity(Prefix))
214 Constr, mkConstr, DataType, mkDataType, Fixity(Prefix))
216import Data.Binary (Binary(get, put))
215import Data.Binary (Binary(get, put))
217import Data.Monoid (Monoid(..))
216import Data.Monoid (Monoid(..))
218−#if MIN_VERSION_base(4,9,0)
219−import Data.Semigroup (Semigroup(..))
220−#endif
221import Data.String (IsString(..))
217import Data.String (IsString(..))
222import qualified Data.Text as T
218import qualified Data.Text as T
223import qualified Data.Text.Internal as T
219import qualified Data.Text.Internal as T
@@ -229,7 +225,7 @@ import Data.Text.Internal.Lazy.Fusion (stream, unstream)
229import Data.Text.Internal.Lazy (Text(..), chunk, empty, foldlChunks,
225import Data.Text.Internal.Lazy (Text(..), chunk, empty, foldlChunks,
230 foldrChunks, smallChunkSize)
226 foldrChunks, smallChunkSize)
231import Data.Text.Internal (firstf, safe, text)
227import Data.Text.Internal (firstf, safe, text)
232−import Data.Text.Lazy.Encoding (decodeUtf8', encodeUtf8)
228+import Data.Text.Lazy.Encoding (decodeUtf8, encodeUtf8)
233import qualified Data.Text.Internal.Functions as F
229import qualified Data.Text.Internal.Functions as F
234import Data.Text.Internal.Lazy.Search (indices)
230import Data.Text.Internal.Lazy.Search (indices)
235#if __GLASGOW_HASKELL__ >= 702
231#if __GLASGOW_HASKELL__ >= 702
@@ -241,9 +237,7 @@ import qualified GHC.Base as GHC
241import qualified GHC.Exts as Exts
237import qualified GHC.Exts as Exts
242#endif
238#endif
243import GHC.Prim (Addr#)
239import GHC.Prim (Addr#)
244−#if MIN_VERSION_base(4,7,0)
245import Text.Printf (PrintfArg, formatArg, formatString)
240import Text.Printf (PrintfArg, formatArg, formatString)
246−#endif
247
241
248-- $fusion
242-- $fusion
249--
243--
@@ -341,21 +335,9 @@ instance Show Text where
341instance Read Text where
335instance Read Text where
342 readsPrec p str = [(pack x,y) | (x,y) <- readsPrec p str]
336 readsPrec p str = [(pack x,y) | (x,y) <- readsPrec p str]
343
337
344−#if MIN_VERSION_base(4,9,0)
345−-- Semigroup orphan instances for older GHCs are provided by
346−-- 'semigroups` package
347−
348−instance Semigroup Text where
349− (<>) = append
350−#endif
351−
352instance Monoid Text where
338instance Monoid Text where
353 mempty = empty
339 mempty = empty
354−#if MIN_VERSION_base(4,9,0)
355− mappend = (<>) -- future-proof definition
356−#else
357 mappend = append
340 mappend = append
358−#endif
359 mconcat = concat
341 mconcat = concat
360
342
361instance IsString Text where
343instance IsString Text where
@@ -376,11 +358,7 @@ instance NFData Text where
376
358
377instance Binary Text where
359instance Binary Text where
378 put t = put (encodeUtf8 t)
360 put t = put (encodeUtf8 t)
379− get = do
380− bs <- get
381− case decodeUtf8' bs of
361+ get = P.fmap decodeUtf8 get
382− P.Left exn -> P.fail (P.show exn)
383− P.Right a -> P.return a
384
362
385-- | This instance preserves data abstraction at the cost of inefficiency.
363-- | This instance preserves data abstraction at the cost of inefficiency.
386-- We omit reflection services for the sake of data abstraction.
364-- We omit reflection services for the sake of data abstraction.
@@ -395,11 +373,8 @@ instance Data Text where
395 _ -> error "Data.Text.Lazy.Text.gunfold"
373 _ -> error "Data.Text.Lazy.Text.gunfold"
396 dataTypeOf _ = textDataType
374 dataTypeOf _ = textDataType
397
375
398−#if MIN_VERSION_base(4,7,0)
399−-- | Only defined for @base-4.7.0.0@ and later
400instance PrintfArg Text where
376instance PrintfArg Text where
401 formatArg txt = formatString $ unpack txt
377 formatArg txt = formatString $ unpack txt
402−#endif
403
378
404packConstr :: Constr
379packConstr :: Constr
405packConstr = mkConstr textDataType "pack" [] Prefix
380packConstr = mkConstr textDataType "pack" [] Prefix
@@ -545,7 +520,7 @@ tail Empty = emptyError "tail"
545 unstream (S.tail (stream t)) = tail t
520 unstream (S.tail (stream t)) = tail t
546 #-}
521 #-}
547
522
548−-- | /O(n\/c)/ Returns all but the last character of a 'Text', which must
523+-- | /O(1)/ Returns all but the last character of a 'Text', which must
549-- be non-empty. Subject to fusion.
524-- be non-empty. Subject to fusion.
550init :: Text -> Text
525init :: Text -> Text
551init (Chunk t0 ts0) = go t0 ts0
526init (Chunk t0 ts0) = go t0 ts0
@@ -581,7 +556,7 @@ isSingleton :: Text -> Bool
581isSingleton = S.isSingleton . stream
556isSingleton = S.isSingleton . stream
582{-# INLINE isSingleton #-}
557{-# INLINE isSingleton #-}
583
558
584−-- | /O(n\/c)/ Returns the last character of a 'Text', which must be
559+-- | /O(1)/ Returns the last character of a 'Text', which must be
585-- non-empty. Subject to fusion.
560-- non-empty. Subject to fusion.
586last :: Text -> Char
561last :: Text -> Char
587last Empty = emptyError "last"
562last Empty = emptyError "last"
@@ -881,13 +856,13 @@ concatMap f = concat . foldr ((:) . f) []
881{-# INLINE concatMap #-}
856{-# INLINE concatMap #-}
882
857
883-- | /O(n)/ 'any' @p@ @t@ determines whether any character in the
858-- | /O(n)/ 'any' @p@ @t@ determines whether any character in the
884−-- 'Text' @t@ satisfies the predicate @p@. Subject to fusion.
859+-- 'Text' @t@ satisifes the predicate @p@. Subject to fusion.
885any :: (Char -> Bool) -> Text -> Bool
860any :: (Char -> Bool) -> Text -> Bool
886any p t = S.any p (stream t)
861any p t = S.any p (stream t)
887{-# INLINE any #-}
862{-# INLINE any #-}
888
863
889-- | /O(n)/ 'all' @p@ @t@ determines whether all characters in the
864-- | /O(n)/ 'all' @p@ @t@ determines whether all characters in the
890−-- 'Text' @t@ satisfy the predicate @p@. Subject to fusion.
865+-- 'Text' @t@ satisify the predicate @p@. Subject to fusion.
891all :: (Char -> Bool) -> Text -> Bool
866all :: (Char -> Bool) -> Text -> Bool
892all p t = S.all p (stream t)
867all p t = S.all p (stream t)
893{-# INLINE all #-}
868{-# INLINE all #-}
@@ -1144,20 +1119,6 @@ takeWhile p t0 = takeWhile' t0
1144"LAZY TEXT takeWhile -> unfused" [1] forall p t.
1119"LAZY TEXT takeWhile -> unfused" [1] forall p t.
1145 unstream (S.takeWhile p (stream t)) = takeWhile p t
1120 unstream (S.takeWhile p (stream t)) = takeWhile p t
1146 #-}
1121 #-}
1147−-- | /O(n)/ 'takeWhileEnd', applied to a predicate @p@ and a 'Text',
1148−-- returns the longest suffix (possibly empty) of elements that
1149−-- satisfy @p@.
1150−-- Examples:
1151−--
1152−-- > takeWhileEnd (=='o') "foo" == "oo"
1153−takeWhileEnd :: (Char -> Bool) -> Text -> Text
1154−takeWhileEnd p = takeChunk empty . L.reverse . toChunks
1155− where takeChunk acc [] = acc
1156− takeChunk acc (t:ts) = if T.length t' < T.length t
1157− then (Chunk t' acc)
1158− else takeChunk (Chunk t' acc) ts
1159− where t' = T.takeWhileEnd p t
1160−{-# INLINE takeWhileEnd #-}
1161
1122
1162-- | /O(n)/ 'dropWhile' @p@ @t@ returns the suffix remaining after
1123-- | /O(n)/ 'dropWhile' @p@ @t@ returns the suffix remaining after
1163-- 'takeWhile' @p@ @t@. Subject to fusion.
1124-- 'takeWhile' @p@ @t@. Subject to fusion.
@@ -1176,11 +1137,9 @@ dropWhile p t0 = dropWhile' t0
1176"LAZY TEXT dropWhile -> unfused" [1] forall p t.
1137"LAZY TEXT dropWhile -> unfused" [1] forall p t.
1177 unstream (S.dropWhile p (stream t)) = dropWhile p t
1138 unstream (S.dropWhile p (stream t)) = dropWhile p t
1178 #-}
1139 #-}
1179−
1180-- | /O(n)/ 'dropWhileEnd' @p@ @t@ returns the prefix remaining after
1140-- | /O(n)/ 'dropWhileEnd' @p@ @t@ returns the prefix remaining after
1181−-- dropping characters that satisfy the predicate @p@ from the end of
1141+-- dropping characters that fail the predicate @p@ from the end of
1182-- @t@.
1142-- @t@.
1183−--
1184-- Examples:
1143-- Examples:
1185--
1144--
1186-- > dropWhileEnd (=='.') "foo..." == "foo"
1145-- > dropWhileEnd (=='.') "foo..." == "foo"
@@ -1197,7 +1156,7 @@ dropWhileEnd p = go
1197{-# INLINE dropWhileEnd #-}
1156{-# INLINE dropWhileEnd #-}
1198
1157
1199-- | /O(n)/ 'dropAround' @p@ @t@ returns the substring remaining after
1158-- | /O(n)/ 'dropAround' @p@ @t@ returns the substring remaining after
1200−-- dropping characters that satisfy the predicate @p@ from both the
1159+-- dropping characters that fail the predicate @p@ from both the
1201-- beginning and end of @t@. Subject to fusion.
1160-- beginning and end of @t@. Subject to fusion.
1202dropAround :: (Char -> Bool) -> Text -> Text
1161dropAround :: (Char -> Bool) -> Text -> Text
1203dropAround p = dropWhile p . dropWhileEnd p
1162dropAround p = dropWhile p . dropWhileEnd p
Data/Text/Lazy/Builder.hs+1−1
@@ -8,7 +8,7 @@
8-- Module : Data.Text.Lazy.Builder
8-- Module : Data.Text.Lazy.Builder
9-- Copyright : (c) 2013 Bryan O'Sullivan
9-- Copyright : (c) 2013 Bryan O'Sullivan
10-- (c) 2010 Johan Tibell
10-- (c) 2010 Johan Tibell
11−-- License : BSD-style (see LICENSE)
11+-- License : BSD3-style (see LICENSE)
12--
12--
13-- Maintainer : Johan Tibell <johan.tibell@gmail.com>
13-- Maintainer : Johan Tibell <johan.tibell@gmail.com>
14-- Stability : experimental
14-- Stability : experimental
Data/Text/Lazy/Builder/Int.hs+1−1
@@ -7,7 +7,7 @@
7-- Module: Data.Text.Lazy.Builder.Int
7-- Module: Data.Text.Lazy.Builder.Int
8-- Copyright: (c) 2013 Bryan O'Sullivan
8-- Copyright: (c) 2013 Bryan O'Sullivan
9-- (c) 2011 MailRank, Inc.
9-- (c) 2011 MailRank, Inc.
10−-- License: BSD-style
10+-- License: BSD3
11-- Maintainer: Bryan O'Sullivan <bos@serpentine.com>
11-- Maintainer: Bryan O'Sullivan <bos@serpentine.com>
12-- Stability: experimental
12-- Stability: experimental
13-- Portability: portable
13-- Portability: portable
Data/Text/Lazy/Encoding.hs+15−5
@@ -46,23 +46,27 @@ module Data.Text.Lazy.Encoding
46 , encodeUtf32LE
46 , encodeUtf32LE
47 , encodeUtf32BE
47 , encodeUtf32BE
48
48
49+#if MIN_VERSION_bytestring(0,10,4)
49 -- * Encoding Text using ByteString Builders
50 -- * Encoding Text using ByteString Builders
50 , encodeUtf8Builder
51 , encodeUtf8Builder
51 , encodeUtf8BuilderEscaped
52 , encodeUtf8BuilderEscaped
53+#endif
52 ) where
54 ) where
53
55
54import Control.Exception (evaluate, try)
56import Control.Exception (evaluate, try)
55−import Data.Monoid (Monoid(..))
56import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
57import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
57import Data.Text.Internal.Lazy (Text(..), chunk, empty, foldrChunks)
58import Data.Text.Internal.Lazy (Text(..), chunk, empty, foldrChunks)
58−import Data.Word (Word8)
59import qualified Data.ByteString as S
59import 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
63import qualified Data.ByteString.Lazy as B
60import qualified Data.ByteString.Lazy as B
64import qualified Data.ByteString.Lazy.Internal as B
61import qualified Data.ByteString.Lazy.Internal as B
65import qualified Data.ByteString.Unsafe as B
62import 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
66import qualified Data.Text as T
70import qualified Data.Text as T
67import qualified Data.Text.Encoding as TE
71import qualified Data.Text.Encoding as TE
68import qualified Data.Text.Internal.Lazy.Encoding.Fusion as E
72import qualified Data.Text.Internal.Lazy.Encoding.Fusion as E
@@ -142,6 +146,7 @@ decodeUtf8' bs = unsafeDupablePerformIO $ do
142{-# INLINE decodeUtf8' #-}
146{-# INLINE decodeUtf8' #-}
143
147
144encodeUtf8 :: Text -> B.ByteString
148encodeUtf8 :: Text -> B.ByteString
149+#if MIN_VERSION_bytestring(0,10,4)
145encodeUtf8 Empty = B.empty
150encodeUtf8 Empty = B.empty
146encodeUtf8 lt@(Chunk t _) =
151encodeUtf8 lt@(Chunk t _) =
147 B.toLazyByteStringWith strategy B.empty $ encodeUtf8Builder lt
152 B.toLazyByteStringWith strategy B.empty $ encodeUtf8Builder lt
@@ -163,6 +168,11 @@ encodeUtf8BuilderEscaped :: BP.BoundedPrim Word8 -> Text -> B.Builder
163encodeUtf8BuilderEscaped prim =
168encodeUtf8BuilderEscaped prim =
164 foldrChunks (\c b -> TE.encodeUtf8BuilderEscaped prim c `mappend` b) mempty
169 foldrChunks (\c b -> TE.encodeUtf8BuilderEscaped prim c `mappend` b) mempty
165
170
171+#else
172+encodeUtf8 (Chunk c cs) = B.Chunk (TE.encodeUtf8 c) (encodeUtf8 cs)
173+encodeUtf8 Empty = B.Empty
174+#endif
175+
166-- | Decode text from little endian UTF-16 encoding.
176-- | Decode text from little endian UTF-16 encoding.
167decodeUtf16LEWith :: OnDecodeError -> B.ByteString -> Text
177decodeUtf16LEWith :: OnDecodeError -> B.ByteString -> Text
168decodeUtf16LEWith onErr bs = F.unstream (E.streamUtf16LE onErr bs)
178decodeUtf16LEWith onErr bs = F.unstream (E.streamUtf16LE onErr bs)
benchmarks/haskell/Benchmarks.hs+1−1
@@ -53,7 +53,7 @@ benchmarks = do
53 , Mul.benchmark
53 , Mul.benchmark
54 , Pure.benchmark "tiny" (tf "tiny.txt")
54 , Pure.benchmark "tiny" (tf "tiny.txt")
55 , Pure.benchmark "ascii" (tf "ascii-small.txt")
55 , Pure.benchmark "ascii" (tf "ascii-small.txt")
56− -- , Pure.benchmark "france" (tf "france.html")
56+ , Pure.benchmark "france" (tf "france.html")
57 , Pure.benchmark "russian" (tf "russian-small.txt")
57 , Pure.benchmark "russian" (tf "russian-small.txt")
58 , Pure.benchmark "japanese" (tf "japanese.txt")
58 , Pure.benchmark "japanese" (tf "japanese.txt")
59 , ReadNumbers.benchmark (tf "numbers.txt")
59 , ReadNumbers.benchmark (tf "numbers.txt")
benchmarks/haskell/Benchmarks/Pure.hs−7
@@ -262,13 +262,6 @@ benchmark kind fp = do
262 , benchBSL $ nf (BL.map toUpper) bla
262 , benchBSL $ nf (BL.map toUpper) bla
263 , benchS $ nf (L.map toUpper) sa
263 , benchS $ nf (L.map toUpper) sa
264 ]
264 ]
265− , bgroup "uncons"
266− [ benchT $ nf T.uncons ta
267− , benchTL $ nf TL.uncons tla
268− , benchBS $ nf BS.uncons bsa
269− , benchBSL $ nf BL.uncons bla
270− , benchS $ nf L.uncons sa
271− ]
272 , bgroup "words"
265 , bgroup "words"
273 [ benchT $ nf T.words ta
266 [ benchT $ nf T.words ta
274 , benchTL $ nf TL.words tla
267 , benchTL $ nf TL.words tla
benchmarks/haskell/Benchmarks/ReadNumbers.hs+5−2
@@ -25,7 +25,8 @@ import Data.List (foldl')
25import Numeric (readDec, readFloat, readHex)
25import Numeric (readDec, readFloat, readHex)
26import qualified Data.ByteString.Char8 as B
26import qualified Data.ByteString.Char8 as B
27import qualified Data.ByteString.Lazy.Char8 as BL
27import qualified Data.ByteString.Lazy.Char8 as BL
28−import qualified Data.ByteString.Lex.Fractional as B
28+import qualified Data.ByteString.Lex.Double as B
29+import qualified Data.ByteString.Lex.Lazy.Double as BL
29import qualified Data.Text as T
30import qualified Data.Text as T
30import qualified Data.Text.IO as T
31import qualified Data.Text.IO as T
31import qualified Data.Text.Lazy as TL
32import qualified Data.Text.Lazy as TL
@@ -62,10 +63,12 @@ benchmark fp = do
62 whnf (double . text TL.rational) tl
63 whnf (double . text TL.rational) tl
63
64
64 , bench "DecimalByteString" $ whnf (int . byteString B.readInt) b
65 , bench "DecimalByteString" $ whnf (int . byteString B.readInt) b
65− , bench "DoubleByteString" $ whnf (double . byteString B.readDecimal) b
66+ , bench "DoubleByteString" $ whnf (double . byteString B.readDouble) b
66
67
67 , bench "DecimalLazyByteString" $
68 , bench "DecimalLazyByteString" $
68 whnf (int . byteString BL.readInt) bl
69 whnf (int . byteString BL.readInt) bl
70+ , bench "DoubleLazyByteString" $
71+ whnf (double . byteString BL.readDouble) bl
69 ]
72 ]
70 where
73 where
71 -- Used for fixing types
74 -- Used for fixing types
benchmarks/haskell/Benchmarks/Stream.hs+5−16
@@ -18,11 +18,11 @@ import qualified Data.Text.Encoding as T
18import qualified Data.Text.Encoding.Error as E
18import qualified Data.Text.Encoding.Error as E
19import qualified Data.Text.Internal.Encoding.Fusion as T
19import qualified Data.Text.Internal.Encoding.Fusion as T
20import qualified Data.Text.Internal.Encoding.Fusion.Common as F
20import 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
22import qualified Data.Text.IO as T
22import qualified Data.Text.IO as T
23import qualified Data.Text.Lazy.Encoding as TL
23import qualified Data.Text.Lazy.Encoding as TL
24import qualified Data.Text.Internal.Lazy.Encoding.Fusion as TL
24import 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
26import qualified Data.Text.Lazy.IO as TL
26import qualified Data.Text.Lazy.IO as TL
27
27
28instance NFData a => NFData (Stream a) where
28instance NFData a => NFData (Stream a) where
@@ -53,25 +53,14 @@ benchmark fp = do
53 !utf32beL = TL.encodeUtf32BE tl
53 !utf32beL = TL.encodeUtf32BE tl
54
54
55 -- For the functions which operate on streams
55 -- For the functions which operate on streams
56− let !s = F.stream t
56+ let !s = T.stream t
57
57
58 return $ bgroup "Stream"
58 return $ bgroup "Stream"
59
59
60 -- Fusion
60 -- Fusion
61 [ bgroup "stream" $
61 [ bgroup "stream" $
62− [ bench "Text" $ nf F.stream t
62+ [ bench "Text" $ nf T.stream t
63− , bench "LazyText" $ nf FL.stream tl
63+ , bench "LazyText" $ nf TL.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
75 ]
64 ]
76
65
77 -- Encoding.Fusion
66 -- Encoding.Fusion
benchmarks/text-benchmarks.cabal+3−13
@@ -3,7 +3,7 @@ version: 0.0.0.0
3synopsis: Benchmarks for the text package
3synopsis: Benchmarks for the text package
4description: Benchmarks for the text package
4description: Benchmarks for the text package
5homepage: https://bitbucket.org/bos/text
5homepage: https://bitbucket.org/bos/text
6−license: BSD2
6+license: BSD3
7license-file: ../LICENSE
7license-file: ../LICENSE
8author: Jasper Van der Jeugt <jaspervdj@gmail.com>,
8author: Jasper Van der Jeugt <jaspervdj@gmail.com>,
9 Bryan O'Sullivan <bos@serpentine.com>,
9 Bryan O'Sullivan <bos@serpentine.com>,
@@ -15,11 +15,6 @@ build-type: Simple
15
15
16cabal-version: >=1.2
16cabal-version: >=1.2
17
17
18−flag bytestring-builder
19− description: Depend on the bytestring-builder package for backwards compatibility.
20− default: False
21− manual: False
22−
23flag llvm
18flag llvm
24 description: use LLVM
19 description: use LLVM
25 default: False
20 default: False
@@ -38,7 +33,8 @@ executable text-benchmarks
38 build-depends: base == 4.*,
33 build-depends: base == 4.*,
39 binary,
34 binary,
40 blaze-builder,
35 blaze-builder,
41− bytestring-lexing >= 0.5.0,
36+ bytestring,
37+ bytestring-lexing,
42 containers,
38 containers,
43 criterion >= 0.10.0.0,
39 criterion >= 0.10.0.0,
44 deepseq,
40 deepseq,
@@ -50,12 +46,6 @@ executable text-benchmarks
50 utf8-string,
46 utf8-string,
51 vector
47 vector
52
48
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−
59executable text-multilang
49executable text-multilang
60 hs-source-dirs: haskell
50 hs-source-dirs: haskell
61 main-is: Multilang.hs
51 main-is: Multilang.hs
changelog.md+1−28
@@ -1,33 +1,6 @@
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−
12−1.2.2.0
13−
14−* The `integer-simple` package, upon which this package optionally
15− depended, has been replaced with `integer-pure`. The build flag has
16− been renamed accordingly.
17−
18−* Bug fix: For the `Binary` instance, If UTF-8 decoding fails during a
19− `get`, the error is propagated via `fail` instead of an uncatchable
20− crash.
21−
22−* New function: `takeWhileEnd`
23−
24−* New instances for the `Text` types:
25− * if `base` >= 4.7: `PrintfArg`
26− * if `base` >= 4.9: `Semigroup`
27−
281.2.1.3
11.2.1.3
29
2
30−* Bug fix: As it turns out, moving the literal rewrite rules to simplifier
3+* Bug fix: As it turns out, moving the literal rewrite rules to simplifier
31 phase 2 does not prevent competition with the `unpack` rule, which is
4 phase 2 does not prevent competition with the `unpack` rule, which is
32 also active in this phase. Unfortunately this was hidden due to a silly
5 also active in this phase. Unfortunately this was hidden due to a silly
33 test environment mistake. Moving literal rules back to phase 1 finally
6 test environment mistake. Moving literal rules back to phase 1 finally
tests/Tests/Properties.hs−6
@@ -516,10 +516,6 @@ sf_takeWhile q p = (L.takeWhile p . L.filter q) `eqP`
516 (unpackS . S.takeWhile p . S.filter q)
516 (unpackS . S.takeWhile p . S.filter q)
517t_takeWhile p = L.takeWhile p `eqP` (unpackS . T.takeWhile p)
517t_takeWhile p = L.takeWhile p `eqP` (unpackS . T.takeWhile p)
518tl_takeWhile p = L.takeWhile p `eqP` (unpackS . TL.takeWhile p)
518tl_takeWhile p = L.takeWhile p `eqP` (unpackS . TL.takeWhile p)
519−t_takeWhileEnd p = (L.reverse . L.takeWhile p . L.reverse) `eqP`
520− (unpackS . T.takeWhileEnd p)
521−tl_takeWhileEnd p = (L.reverse . L.takeWhile p . L.reverse) `eqP`
522− (unpackS . TL.takeWhileEnd p)
523s_dropWhile p = L.dropWhile p `eqP` (unpackS . S.dropWhile p)
519s_dropWhile p = L.dropWhile p `eqP` (unpackS . S.dropWhile p)
524s_dropWhile_s p = L.dropWhile p `eqP` (unpackS . S.unstream . S.dropWhile p)
520s_dropWhile_s p = L.dropWhile p `eqP` (unpackS . S.unstream . S.dropWhile p)
525sf_dropWhile q p = (L.dropWhile p . L.filter q) `eqP`
521sf_dropWhile q p = (L.dropWhile p . L.filter q) `eqP`
@@ -1146,8 +1142,6 @@ tests =
1146 testProperty "sf_takeWhile" sf_takeWhile,
1142 testProperty "sf_takeWhile" sf_takeWhile,
1147 testProperty "t_takeWhile" t_takeWhile,
1143 testProperty "t_takeWhile" t_takeWhile,
1148 testProperty "tl_takeWhile" tl_takeWhile,
1144 testProperty "tl_takeWhile" tl_takeWhile,
1149− testProperty "t_takeWhileEnd" t_takeWhileEnd,
1150− testProperty "tl_takeWhileEnd" tl_takeWhileEnd,
1151 testProperty "sf_dropWhile" sf_dropWhile,
1145 testProperty "sf_dropWhile" sf_dropWhile,
1152 testProperty "s_dropWhile" s_dropWhile,
1146 testProperty "s_dropWhile" s_dropWhile,
1153 testProperty "s_dropWhile_s" s_dropWhile_s,
1147 testProperty "s_dropWhile_s" s_dropWhile_s,
tests/literal-rule-test.sh+1−1
@@ -6,7 +6,7 @@ function check_firings() {
6 rule=$1
6 rule=$1
7 expected=$2
7 expected=$2
8 build="ghc -O -ddump-rule-firings LiteralRuleTest.hs"
8 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"
10 touch LiteralRuleTest.hs
10 touch LiteralRuleTest.hs
11 echo -n "Want to see $expected firings of rule $rule... " >&2
11 echo -n "Want to see $expected firings of rule $rule... " >&2
12 firings=$($build 2>&1 | grep "Rule fired: $rule\$" | wc -l)
12 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
3synopsis: Functional tests for the text package
3synopsis: Functional tests for the text package
4description: Functional tests for the text package
4description: Functional tests for the text package
5homepage: https://github.com/bos/text
5homepage: https://github.com/bos/text
6−license: BSD2
6+license: BSD3
7license-file: ../LICENSE
7license-file: ../LICENSE
8author: Jasper Van der Jeugt <jaspervdj@gmail.com>,
8author: Jasper Van der Jeugt <jaspervdj@gmail.com>,
9 Bryan O'Sullivan <bos@serpentine.com>,
9 Bryan O'Sullivan <bos@serpentine.com>,
text.cabal+6−19
@@ -1,5 +1,5 @@
1name: text
1name: text
2−version: 1.2.2.1
2+version: 1.2.1.3
3homepage: https://github.com/bos/text
3homepage: https://github.com/bos/text
4bug-reports: https://github.com/bos/text/issues
4bug-reports: https://github.com/bos/text/issues
5synopsis: An efficient packed Unicode text type.
5synopsis: An efficient packed Unicode text type.
@@ -31,7 +31,7 @@ description:
31 the @text-icu@ package:
31 the @text-icu@ package:
32 <http://hackage.haskell.org/package/text-icu>
32 <http://hackage.haskell.org/package/text-icu>
33
33
34−license: BSD2
34+license: BSD3
35license-file: LICENSE
35license-file: LICENSE
36author: Bryan O'Sullivan <bos@serpentine.com>
36author: Bryan O'Sullivan <bos@serpentine.com>
37maintainer: Bryan O'Sullivan <bos@serpentine.com>
37maintainer: Bryan O'Sullivan <bos@serpentine.com>
@@ -64,11 +64,6 @@ extra-source-files:
64 tests/scripts/*.sh
64 tests/scripts/*.sh
65 tests/text-tests.cabal
65 tests/text-tests.cabal
66
66
67−flag bytestring-builder
68− description: Depend on the bytestring-builder package for backwards compatibility.
69− default: False
70− manual: False
71−
72flag developer
67flag developer
73 description: operate in developer mode
68 description: operate in developer mode
74 default: False
69 default: False
@@ -76,8 +71,6 @@ flag developer
76
71
77flag integer-simple
72flag integer-simple
78 description: Use the simple integer library instead of GMP
73 description: Use the simple integer library instead of GMP
79− default: False
80− manual: False
81
74
82library
75library
83 c-sources: cbits/cbits.c
76 c-sources: cbits/cbits.c
@@ -138,11 +131,10 @@ library
138 deepseq >= 1.1.0.0,
131 deepseq >= 1.1.0.0,
139 ghc-prim >= 0.2
132 ghc-prim >= 0.2
140
133
141− if flag(bytestring-builder)
134+ if impl(ghc >= 7.7)
142− build-depends: bytestring >= 0.9 && < 0.10.4,
135+ build-depends: bytestring >= 0.10.4.0
143− bytestring-builder >= 0.10.4
144 else
136 else
145− build-depends: bytestring >= 0.10.4
137+ build-depends: bytestring >= 0.9
146
138
147 cpp-options: -DHAVE_DEEPSEQ
139 cpp-options: -DHAVE_DEEPSEQ
148 ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
140 ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
@@ -177,6 +169,7 @@ test-suite tests
177 array,
169 array,
178 base,
170 base,
179 binary,
171 binary,
172+ bytestring,
180 deepseq,
173 deepseq,
181 directory,
174 directory,
182 ghc-prim,
175 ghc-prim,
@@ -186,12 +179,6 @@ test-suite tests
186 test-framework-hunit >= 0.2,
179 test-framework-hunit >= 0.2,
187 test-framework-quickcheck2 >= 0.2
180 test-framework-quickcheck2 >= 0.2
188
181
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)
182 if flag(integer-simple)
196 cpp-options: -DINTEGER_SIMPLE
183 cpp-options: -DINTEGER_SIMPLE
197 build-depends: integer-simple >= 0.1 && < 0.5
184 build-depends: integer-simple >= 0.1 && < 0.5