@@ -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