on a324702 help sign in
Data/Text.hs+7−10
since splitsnapshots
unifiedsplit
@@ -238,7 +238,6 @@ import Data.ByteString (ByteString)
238import qualified Data.Text.Lazy as L
238import qualified Data.Text.Lazy as L
239import Data.Int (Int64)
239import Data.Int (Int64)
240#endif
240#endif
241−import GHC.Base (eqInt, neInt, gtInt, geInt, ltInt, leInt)
242#if __GLASGOW_HASKELL__ >= 708
241#if __GLASGOW_HASKELL__ >= 708
243import qualified GHC.Exts as Exts
242import qualified GHC.Exts as Exts
244#endif
243#endif
@@ -572,9 +571,7 @@ isSingleton = S.isSingleton . stream
572-- Subject to fusion.
571-- Subject to fusion.
573length :: Text -> Int
572length :: Text -> Int
574length t = S.length (stream t)
573length t = S.length (stream t)
575−{-# INLINE [0] length #-}
574+{-# 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
575
579-- | /O(n)/ Compare the count of characters in a 'Text' to a number.
576-- | /O(n)/ Compare the count of characters in a 'Text' to a number.
580-- Subject to fusion.
577-- Subject to fusion.
@@ -593,32 +590,32 @@ compareLength t n = S.compareLengthI (stream t) n
593
590
594{-# RULES
591{-# RULES
595"TEXT ==N/length -> compareLength/==EQ" [~1] forall t n.
592"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
597 #-}
594 #-}
598
595
599{-# RULES
596{-# RULES
600"TEXT /=N/length -> compareLength//=EQ" [~1] forall t n.
597"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
602 #-}
599 #-}
603
600
604{-# RULES
601{-# RULES
605"TEXT <N/length -> compareLength/==LT" [~1] forall t n.
602"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
607 #-}
604 #-}
608
605
609{-# RULES
606{-# RULES
610"TEXT <=N/length -> compareLength//=GT" [~1] forall t n.
607"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
612 #-}
609 #-}
613
610
614{-# RULES
611{-# RULES
615"TEXT >N/length -> compareLength/==GT" [~1] forall t n.
612"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
617 #-}
614 #-}
618
615
619{-# RULES
616{-# RULES
620"TEXT >=N/length -> compareLength//=LT" [~1] forall t n.
617"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
622 #-}
619 #-}
623
620
624-- -----------------------------------------------------------------------------
621-- -----------------------------------------------------------------------------
Data/Text/Array.hs+1−1
@@ -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 (
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−3
@@ -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
@@ -242,8 +242,6 @@ flush = Builder $ \ k buf@(Buffer p o u l) ->
242 !t = Text arr o u
242 !t = Text arr o u
243 ts <- inlineInterleaveST (k b)
243 ts <- inlineInterleaveST (k b)
244 return $! t : ts
244 return $! t : ts
245−{-# INLINE [1] flush #-}
246−-- defer inlining so that flush/flush rule may fire.
247
245
248------------------------------------------------------------------------
246------------------------------------------------------------------------
249
247
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/Lazy.hs+2−2
@@ -545,7 +545,7 @@ tail Empty = emptyError "tail"
545 unstream (S.tail (stream t)) = tail t
545 unstream (S.tail (stream t)) = tail t
546 #-}
546 #-}
547
547
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
549-- be non-empty. Subject to fusion.
549-- be non-empty. Subject to fusion.
550init :: Text -> Text
550init :: Text -> Text
551init (Chunk t0 ts0) = go t0 ts0
551init (Chunk t0 ts0) = go t0 ts0
@@ -581,7 +581,7 @@ isSingleton :: Text -> Bool
581isSingleton = S.isSingleton . stream
581isSingleton = S.isSingleton . stream
582{-# INLINE isSingleton #-}
582{-# INLINE isSingleton #-}
583
583
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
585-- non-empty. Subject to fusion.
585-- non-empty. Subject to fusion.
586last :: Text -> Char
586last :: Text -> Char
587last Empty = emptyError "last"
587last Empty = emptyError "last"
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/text-benchmarks.cabal+2−12
@@ -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,6 +33,7 @@ executable text-benchmarks
38 build-depends: base == 4.*,
33 build-depends: base == 4.*,
39 binary,
34 binary,
40 blaze-builder,
35 blaze-builder,
36+ bytestring,
41 bytestring-lexing >= 0.5.0,
37 bytestring-lexing >= 0.5.0,
42 containers,
38 containers,
43 criterion >= 0.10.0.0,
39 criterion >= 0.10.0.0,
@@ -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
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+5−16
@@ -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
@@ -138,11 +133,10 @@ library
138 deepseq >= 1.1.0.0,
133 deepseq >= 1.1.0.0,
139 ghc-prim >= 0.2
134 ghc-prim >= 0.2
140
135
141− if flag(bytestring-builder)
136+ if impl(ghc >= 7.7)
142− build-depends: bytestring >= 0.9 && < 0.10.4,
137+ build-depends: bytestring >= 0.10.4.0
143− bytestring-builder >= 0.10.4
144 else
138 else
145− build-depends: bytestring >= 0.10.4
139+ build-depends: bytestring >= 0.9
146
140
147 cpp-options: -DHAVE_DEEPSEQ
141 cpp-options: -DHAVE_DEEPSEQ
148 ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
142 ghc-options: -Wall -fwarn-tabs -funbox-strict-fields -O2
@@ -177,6 +171,7 @@ test-suite tests
177 array,
171 array,
178 base,
172 base,
179 binary,
173 binary,
174+ bytestring,
180 deepseq,
175 deepseq,
181 directory,
176 directory,
182 ghc-prim,
177 ghc-prim,
@@ -186,12 +181,6 @@ test-suite tests
186 test-framework-hunit >= 0.2,
181 test-framework-hunit >= 0.2,
187 test-framework-quickcheck2 >= 0.2
182 test-framework-quickcheck2 >= 0.2
188
183
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)
184 if flag(integer-simple)
196 cpp-options: -DINTEGER_SIMPLE
185 cpp-options: -DINTEGER_SIMPLE
197 build-depends: integer-simple >= 0.1 && < 0.5
186 build-depends: integer-simple >= 0.1 && < 0.5