@@ -52,7 +52,6 @@ import Control.Exception (evaluate, try)
52import Data.Bits ((.&.))
52import Data.Bits ((.&.))
53import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
53import Data.Text.Encoding.Error (OnDecodeError, UnicodeException, strictDecode)
54import Data.Text.Lazy.Internal (Text(..), chunk, empty, foldrChunks)
54import Data.Text.Lazy.Internal (Text(..), chunk, empty, foldrChunks)
55−import System.IO.Unsafe (unsafePerformIO)
56import qualified Data.ByteString as S
55import qualified Data.ByteString as S
57import qualified Data.ByteString.Lazy as B
56import qualified Data.ByteString.Lazy as B
58import qualified Data.ByteString.Lazy.Internal as B
57import qualified Data.ByteString.Lazy.Internal as B
@@ -61,6 +60,7 @@ import qualified Data.Text as T
61import qualified Data.Text.Encoding as TE
60import qualified Data.Text.Encoding as TE
62import qualified Data.Text.Lazy.Encoding.Fusion as E
61import qualified Data.Text.Lazy.Encoding.Fusion as E
63import qualified Data.Text.Lazy.Fusion as F
62import qualified Data.Text.Lazy.Fusion as F
63+import Data.Text.Unsafe (unsafeDupablePerformIO)
@@ -149,7 +149,7 @@ decodeUtf8 = decodeUtf8With strictDecode
149-- input before it can return a result. If you need lazy (streaming)
149-- input before it can return a result. If you need lazy (streaming)
150-- decoding, use 'decodeUtf8With' in lenient mode.
150-- decoding, use 'decodeUtf8With' in lenient mode.
151decodeUtf8' :: B.ByteString -> Either UnicodeException Text
151decodeUtf8' :: B.ByteString -> Either UnicodeException Text
152−decodeUtf8' bs = unsafePerformIO $ do
152+decodeUtf8' bs = unsafeDupablePerformIO $ do
153 let t = decodeUtf8 bs
153 let t = decodeUtf8 bs
154 try (evaluate (rnf t `seq` t))
154 try (evaluate (rnf t `seq` t))