on 543ca59 help sign in
20 files changed+207−419
since splitsnapshots
unifiedsplit
.hgtags−1 Data/Text.hs+7−10 Data/Text/Array.hs+1−1 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/CaseMapping.hs+112−286 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+1−1
@@ -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 (
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/CaseMapping.hs+112−286
@@ -1,10 +1,10 @@
11{-# LANGUAGE Rank2Types #-}
22-- AUTOMATICALLY GENERATED - DO NOT EDIT
33-- Generated by scripts/CaseMapping.hs
4−-- CaseFolding-8.0.0.txt
5−-- Date: 2015-01-13, 18:16:36 GMT [MD]
6−-- SpecialCasing-8.0.0.txt
7−-- Date: 2014-12-16, 23:08:04 GMT [MD]
4+-- CaseFolding-7.0.0.txt
5+-- Date: 2014-04-09, 20:00:56 GMT [MD]
6+-- SpecialCasing-7.0.0.txt
7+-- Date: 2014-03-18, 07:18:02 GMT [MD]
88
99module Data.Text.Internal.Fusion.CaseMapping where
1010import Data.Char
@@ -337,6 +337,8 @@ foldMapping '\x017f' s = Yield '\x0073' (CC s '\x0000' '\x0000')
337337foldMapping '\x01f0' s = Yield '\x006a' (CC s '\x030c' '\x0000')
338338-- COMBINING GREEK YPOGEGRAMMENI
339339foldMapping '\x0345' s = Yield '\x03b9' (CC s '\x0000' '\x0000')
340+-- GREEK CAPITAL LETTER YOT
341+foldMapping '\x037f' s = Yield '\x03f3' (CC s '\x0000' '\x0000')
340342-- GREEK SMALL LETTER IOTA WITH DIALYTIKA AND TONOS
341343foldMapping '\x0390' s = Yield '\x03b9' (CC s '\x0308' '\x0301')
342344-- GREEK SMALL LETTER UPSILON WITH DIALYTIKA AND TONOS
@@ -357,20 +359,20 @@ foldMapping '\x03f0' s = Yield '\x03ba' (CC s '\x0000' '\x0000')
357359foldMapping '\x03f1' s = Yield '\x03c1' (CC s '\x0000' '\x0000')
358360-- GREEK LUNATE EPSILON SYMBOL
359361foldMapping '\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')
360370-- ARMENIAN SMALL LIGATURE ECH YIWN
361371foldMapping '\x0587' s = Yield '\x0565' (CC s '\x0582' '\x0000')
362−-- CHEROKEE SMALL LETTER YE
363−foldMapping '\x13f8' s = Yield '\x13f0' (CC s '\x0000' '\x0000')
364−-- CHEROKEE SMALL LETTER YI
365−foldMapping '\x13f9' s = Yield '\x13f1' (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')
372+-- GEORGIAN CAPITAL LETTER YN
373+foldMapping '\x10c7' s = Yield '\x2d27' (CC s '\x0000' '\x0000')
374+-- GEORGIAN CAPITAL LETTER AEN
375+foldMapping '\x10cd' s = Yield '\x2d2d' (CC s '\x0000' '\x0000')
374376-- LATIN SMALL LETTER H WITH LINE BELOW
375377foldMapping '\x1e96' s = Yield '\x0068' (CC s '\x0331' '\x0000')
376378-- LATIN SMALL LETTER T WITH DIAERESIS
@@ -545,174 +547,36 @@ foldMapping '\x1ff6' s = Yield '\x03c9' (CC s '\x0342' '\x0000')
545547foldMapping '\x1ff7' s = Yield '\x03c9' (CC s '\x0342' '\x03b9')
546548-- GREEK CAPITAL LETTER OMEGA WITH PROSGEGRAMMENI
547549foldMapping '\x1ffc' s = Yield '\x03c9' (CC s '\x03b9' '\x0000')
548−-- LATIN CAPITAL LETTER J WITH CROSSED-TAIL
549−foldMapping '\xa7b2' s = Yield '\x029d' (CC s '\x0000' '\x0000')
550−-- LATIN CAPITAL LETTER CHI
551−foldMapping '\xa7b3' s = Yield '\xab53' (CC s '\x0000' '\x0000')
552−-- LATIN CAPITAL LETTER BETA
553−foldMapping '\xa7b4' s = Yield '\xa7b5' (CC s '\x0000' '\x0000')
554−-- LATIN CAPITAL LETTER OMEGA
555−foldMapping '\xa7b6' s = Yield '\xa7b7' (CC s '\x0000' '\x0000')
556−-- CHEROKEE SMALL LETTER A
557−foldMapping '\xab70' s = Yield '\x13a0' (CC s '\x0000' '\x0000')
558−-- CHEROKEE SMALL LETTER 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')
700−-- CHEROKEE SMALL LETTER TSV
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')
704−-- CHEROKEE SMALL LETTER WE
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')
708−-- CHEROKEE SMALL LETTER WO
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')
712−-- CHEROKEE SMALL LETTER WV
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')
550+-- COPTIC CAPITAL LETTER BOHAIRIC KHEI
551+foldMapping '\x2cf2' s = Yield '\x2cf3' (CC s '\x0000' '\x0000')
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
561+foldMapping '\xa798' s = Yield '\xa799' (CC s '\x0000' '\x0000')
562+-- LATIN CAPITAL LETTER VOLAPUK AE
563+foldMapping '\xa79a' s = Yield '\xa79b' (CC s '\x0000' '\x0000')
564+-- LATIN CAPITAL LETTER VOLAPUK OE
565+foldMapping '\xa79c' s = Yield '\xa79d' (CC s '\x0000' '\x0000')
566+-- LATIN CAPITAL LETTER VOLAPUK UE
567+foldMapping '\xa79e' s = Yield '\xa79f' (CC s '\x0000' '\x0000')
568+-- LATIN CAPITAL LETTER H WITH HOOK
569+foldMapping '\xa7aa' s = Yield '\x0266' (CC s '\x0000' '\x0000')
570+-- LATIN CAPITAL LETTER REVERSED OPEN E
571+foldMapping '\xa7ab' s = Yield '\x025c' (CC s '\x0000' '\x0000')
572+-- LATIN CAPITAL LETTER SCRIPT G
573+foldMapping '\xa7ac' s = Yield '\x0261' (CC s '\x0000' '\x0000')
574+-- LATIN CAPITAL LETTER L WITH BELT
575+foldMapping '\xa7ad' s = Yield '\x026c' (CC s '\x0000' '\x0000')
576+-- LATIN CAPITAL LETTER TURNED K
577+foldMapping '\xa7b0' s = Yield '\x029e' (CC s '\x0000' '\x0000')
578+-- LATIN CAPITAL LETTER TURNED T
579+foldMapping '\xa7b1' s = Yield '\x0287' (CC s '\x0000' '\x0000')
716580-- LATIN SMALL LIGATURE FF
717581foldMapping '\xfb00' s = Yield '\x0066' (CC s '\x0066' '\x0000')
718582-- LATIN SMALL LIGATURE FI
@@ -737,106 +601,68 @@ foldMapping '\xfb15' s = Yield '\x0574' (CC s '\x056b' '\x0000')
737601foldMapping '\xfb16' s = Yield '\x057e' (CC s '\x0576' '\x0000')
738602-- ARMENIAN SMALL LIGATURE MEN XEH
739603foldMapping '\xfb17' s = Yield '\x0574' (CC s '\x056d' '\x0000')
740−-- OLD HUNGARIAN 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')
758−-- OLD HUNGARIAN CAPITAL LETTER E
759−foldMapping '\x10c89' s = Yield '\x10cc9' (CC s '\x0000' '\x0000')
760−-- OLD HUNGARIAN CAPITAL LETTER CLOSE E
761−foldMapping '\x10c8a' s = Yield '\x10cca' (CC s '\x0000' '\x0000')
762−-- OLD HUNGARIAN CAPITAL LETTER EE
763−foldMapping '\x10c8b' s = Yield '\x10ccb' (CC s '\x0000' '\x0000')
764−-- OLD HUNGARIAN CAPITAL LETTER EF
765−foldMapping '\x10c8c' s = Yield '\x10ccc' (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
775−foldMapping '\x10c91' s = Yield '\x10cd1' (CC s '\x0000' '\x0000')
776−-- OLD HUNGARIAN CAPITAL LETTER EJ
777−foldMapping '\x10c92' s = Yield '\x10cd2' (CC s '\x0000' '\x0000')
778−-- OLD HUNGARIAN CAPITAL LETTER EK
779−foldMapping '\x10c93' s = Yield '\x10cd3' (CC s '\x0000' '\x0000')
780−-- OLD HUNGARIAN CAPITAL LETTER AK
781−foldMapping '\x10c94' s = Yield '\x10cd4' (CC s '\x0000' '\x0000')
782−-- OLD HUNGARIAN CAPITAL LETTER UNK
783−foldMapping '\x10c95' s = Yield '\x10cd5' (CC s '\x0000' '\x0000')
784−-- OLD HUNGARIAN CAPITAL LETTER EL
785−foldMapping '\x10c96' s = Yield '\x10cd6' (CC s '\x0000' '\x0000')
786−-- OLD HUNGARIAN CAPITAL LETTER ELY
787−foldMapping '\x10c97' s = Yield '\x10cd7' (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
793−foldMapping '\x10c9a' s = Yield '\x10cda' (CC s '\x0000' '\x0000')
794−-- OLD HUNGARIAN CAPITAL LETTER O
795−foldMapping '\x10c9b' s = Yield '\x10cdb' (CC s '\x0000' '\x0000')
796−-- OLD HUNGARIAN CAPITAL LETTER OO
797−foldMapping '\x10c9c' s = Yield '\x10cdc' (CC s '\x0000' '\x0000')
798−-- OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG OE
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')
810−-- OLD HUNGARIAN CAPITAL LETTER SHORT ER
811−foldMapping '\x10ca3' s = Yield '\x10ce3' (CC s '\x0000' '\x0000')
812−-- OLD HUNGARIAN CAPITAL LETTER ES
813−foldMapping '\x10ca4' s = Yield '\x10ce4' (CC s '\x0000' '\x0000')
814−-- OLD HUNGARIAN CAPITAL LETTER ESZ
815−foldMapping '\x10ca5' s = Yield '\x10ce5' (CC s '\x0000' '\x0000')
816−-- OLD HUNGARIAN CAPITAL LETTER ET
817−foldMapping '\x10ca6' s = Yield '\x10ce6' (CC s '\x0000' '\x0000')
818−-- OLD HUNGARIAN CAPITAL LETTER ENT
819−foldMapping '\x10ca7' s = Yield '\x10ce7' (CC s '\x0000' '\x0000')
820−-- OLD HUNGARIAN CAPITAL LETTER ETY
821−foldMapping '\x10ca8' s = Yield '\x10ce8' (CC s '\x0000' '\x0000')
822−-- OLD HUNGARIAN CAPITAL LETTER ECH
823−foldMapping '\x10ca9' s = Yield '\x10ce9' (CC s '\x0000' '\x0000')
824−-- OLD HUNGARIAN CAPITAL LETTER U
825−foldMapping '\x10caa' s = Yield '\x10cea' (CC s '\x0000' '\x0000')
826−-- OLD HUNGARIAN CAPITAL LETTER UU
827−foldMapping '\x10cab' s = Yield '\x10ceb' (CC s '\x0000' '\x0000')
828−-- OLD HUNGARIAN CAPITAL LETTER NIKOLSBURG UE
829−foldMapping '\x10cac' s = Yield '\x10cec' (CC s '\x0000' '\x0000')
830−-- OLD HUNGARIAN CAPITAL LETTER RUDIMENTA UE
831−foldMapping '\x10cad' s = Yield '\x10ced' (CC s '\x0000' '\x0000')
832−-- OLD HUNGARIAN CAPITAL LETTER EV
833−foldMapping '\x10cae' s = Yield '\x10cee' (CC s '\x0000' '\x0000')
834−-- OLD HUNGARIAN CAPITAL LETTER EZ
835−foldMapping '\x10caf' s = Yield '\x10cef' (CC s '\x0000' '\x0000')
836−-- OLD HUNGARIAN CAPITAL LETTER EZS
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')
840−-- OLD HUNGARIAN CAPITAL LETTER US
841−foldMapping '\x10cb2' s = Yield '\x10cf2' (CC s '\x0000' '\x0000')
604+-- WARANG CITI CAPITAL LETTER NGAA
605+foldMapping '\x118a0' s = Yield '\x118c0' (CC s '\x0000' '\x0000')
606+-- WARANG CITI CAPITAL LETTER A
607+foldMapping '\x118a1' s = Yield '\x118c1' (CC s '\x0000' '\x0000')
608+-- WARANG CITI CAPITAL LETTER WI
609+foldMapping '\x118a2' s = Yield '\x118c2' (CC s '\x0000' '\x0000')
610+-- WARANG CITI CAPITAL LETTER YU
611+foldMapping '\x118a3' s = Yield '\x118c3' (CC s '\x0000' '\x0000')
612+-- WARANG CITI CAPITAL LETTER YA
613+foldMapping '\x118a4' s = Yield '\x118c4' (CC s '\x0000' '\x0000')
614+-- WARANG CITI CAPITAL LETTER YO
615+foldMapping '\x118a5' s = Yield '\x118c5' (CC s '\x0000' '\x0000')
616+-- WARANG CITI CAPITAL LETTER II
617+foldMapping '\x118a6' s = Yield '\x118c6' (CC s '\x0000' '\x0000')
618+-- WARANG CITI CAPITAL LETTER UU
619+foldMapping '\x118a7' s = Yield '\x118c7' (CC s '\x0000' '\x0000')
620+-- WARANG CITI CAPITAL LETTER E
621+foldMapping '\x118a8' s = Yield '\x118c8' (CC s '\x0000' '\x0000')
622+-- WARANG CITI CAPITAL LETTER O
623+foldMapping '\x118a9' s = Yield '\x118c9' (CC s '\x0000' '\x0000')
624+-- WARANG CITI CAPITAL LETTER ANG
625+foldMapping '\x118aa' s = Yield '\x118ca' (CC s '\x0000' '\x0000')
626+-- WARANG CITI CAPITAL LETTER GA
627+foldMapping '\x118ab' s = Yield '\x118cb' (CC s '\x0000' '\x0000')
628+-- WARANG CITI CAPITAL LETTER KO
629+foldMapping '\x118ac' s = Yield '\x118cc' (CC s '\x0000' '\x0000')
630+-- WARANG CITI CAPITAL LETTER ENY
631+foldMapping '\x118ad' s = Yield '\x118cd' (CC s '\x0000' '\x0000')
632+-- WARANG CITI CAPITAL LETTER YUJ
633+foldMapping '\x118ae' s = Yield '\x118ce' (CC s '\x0000' '\x0000')
634+-- WARANG CITI CAPITAL LETTER UC
635+foldMapping '\x118af' s = Yield '\x118cf' (CC s '\x0000' '\x0000')
636+-- WARANG CITI CAPITAL LETTER ENN
637+foldMapping '\x118b0' s = Yield '\x118d0' (CC s '\x0000' '\x0000')
638+-- WARANG CITI CAPITAL LETTER ODD
639+foldMapping '\x118b1' s = Yield '\x118d1' (CC s '\x0000' '\x0000')
640+-- WARANG CITI CAPITAL LETTER TTE
641+foldMapping '\x118b2' s = Yield '\x118d2' (CC s '\x0000' '\x0000')
642+-- WARANG CITI CAPITAL LETTER NUNG
643+foldMapping '\x118b3' s = Yield '\x118d3' (CC s '\x0000' '\x0000')
644+-- WARANG CITI CAPITAL LETTER DA
645+foldMapping '\x118b4' s = Yield '\x118d4' (CC s '\x0000' '\x0000')
646+-- WARANG CITI CAPITAL LETTER AT
647+foldMapping '\x118b5' s = Yield '\x118d5' (CC s '\x0000' '\x0000')
648+-- WARANG CITI CAPITAL LETTER AM
649+foldMapping '\x118b6' s = Yield '\x118d6' (CC s '\x0000' '\x0000')
650+-- WARANG CITI CAPITAL LETTER BU
651+foldMapping '\x118b7' s = Yield '\x118d7' (CC s '\x0000' '\x0000')
652+-- WARANG CITI CAPITAL LETTER PU
653+foldMapping '\x118b8' s = Yield '\x118d8' (CC s '\x0000' '\x0000')
654+-- WARANG CITI CAPITAL LETTER HIYO
655+foldMapping '\x118b9' s = Yield '\x118d9' (CC s '\x0000' '\x0000')
656+-- WARANG CITI CAPITAL LETTER HOLO
657+foldMapping '\x118ba' s = Yield '\x118da' (CC s '\x0000' '\x0000')
658+-- WARANG CITI CAPITAL LETTER HORR
659+foldMapping '\x118bb' s = Yield '\x118db' (CC s '\x0000' '\x0000')
660+-- WARANG CITI CAPITAL LETTER HAR
661+foldMapping '\x118bc' s = Yield '\x118dc' (CC s '\x0000' '\x0000')
662+-- WARANG CITI CAPITAL LETTER SSUU
663+foldMapping '\x118bd' s = Yield '\x118dd' (CC s '\x0000' '\x0000')
664+-- WARANG CITI CAPITAL LETTER SII
665+foldMapping '\x118be' s = Yield '\x118de' (CC s '\x0000' '\x0000')
666+-- WARANG CITI CAPITAL LETTER VIYO
667+foldMapping '\x118bf' s = Yield '\x118df' (CC s '\x0000' '\x0000')
842668foldMapping c s = Yield (toLower c) (CC s '\0' '\0')
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