text-builder 0.5.3.1 → 0.5.4
raw patch · 4 files changed
+91/−10 lines, 4 filesdep −semigroupsPVP ok
version bump matches the API change (PVP)
Dependencies removed: semigroups
API changes (from Hackage documentation)
+ Text.Builder: asciiByteString :: ByteString -> Builder
Files
- library/Text/Builder.hs +14/−0
- library/Text/Builder/Prelude.hs +65/−7
- test/Main.hs +11/−1
- text-builder.cabal +1/−2
library/Text/Builder.hs view
@@ -8,6 +8,7 @@ char, text, string,+ asciiByteString, unicodeCodePoint, utf16CodeUnits1, utf16CodeUnits2,@@ -30,6 +31,7 @@ import qualified Data.Text.Encoding as E import qualified Data.Text.Encoding.Error as E import qualified Text.Builder.UTF16 as D+import qualified Data.ByteString as ByteString newtype Action =@@ -106,6 +108,18 @@ utf8CodeUnits4 :: Word8 -> Word8 -> Word8 -> Word8 -> Builder utf8CodeUnits4 unit1 unit2 unit3 unit4 = D.utf8CodeUnits4 unit1 unit2 unit3 unit4 utf16CodeUnits1 utf16CodeUnits2++{-# INLINABLE asciiByteString #-}+asciiByteString :: ByteString -> Builder+asciiByteString byteString =+ Builder action (ByteString.length byteString)+ where+ action =+ Action $ \array -> let+ step byte next index = do+ B.unsafeWrite array index (fromIntegral byte)+ next (succ index)+ in ByteString.foldr step (const (return ())) byteString {-# INLINABLE text #-} text :: Text -> Builder
library/Text/Builder/Prelude.hs view
@@ -5,14 +5,72 @@ ) where ---- base-prelude---------------------------import BasePrelude as Exports hiding (assert, left, right, isLeft, isRight, error, First(..), Last(..), (<>))---- semigroup+-- base --------------------------import Data.Semigroup as Exports+import Control.Applicative as Exports+import Control.Arrow as Exports+import Control.Category as Exports+import Control.Concurrent as Exports+import Control.Exception as Exports+import Control.Monad as Exports hiding (mapM_, sequence_, forM_, msum, mapM, sequence, forM)+import Control.Monad.IO.Class as Exports+import Control.Monad.Fix as Exports hiding (fix)+import Control.Monad.ST as Exports+import Control.Monad.ST.Unsafe as Exports+import Data.Bits as Exports+import Data.Bool as Exports+import Data.Char as Exports+import Data.Coerce as Exports+import Data.Complex as Exports+import Data.Data as Exports+import Data.Dynamic as Exports+import Data.Either as Exports+import Data.Fixed as Exports+import Data.Foldable as Exports+import Data.Function as Exports hiding (id, (.))+import Data.Functor as Exports+import Data.Functor.Identity as Exports+import Data.Int as Exports+import Data.IORef as Exports+import Data.Ix as Exports+import Data.List as Exports hiding (sortOn, isSubsequenceOf, uncons, concat, foldr, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, find, maximumBy, minimumBy, mapAccumL, mapAccumR, foldl')+import Data.Maybe as Exports+import Data.Monoid as Exports hiding (Last(..), First(..))+import Data.Ord as Exports+import Data.Proxy as Exports+import Data.Ratio as Exports+import Data.STRef as Exports+import Data.String as Exports+import Data.Traversable as Exports+import Data.Tuple as Exports+import Data.Unique as Exports+import Data.Version as Exports+import Data.Word as Exports+import Debug.Trace as Exports+import Foreign.ForeignPtr.Unsafe as Exports+import Foreign.ForeignPtr as Exports+import Foreign.Ptr as Exports+import Foreign.StablePtr as Exports+import Foreign.Storable as Exports hiding (sizeOf, alignment)+import GHC.Conc as Exports hiding (withMVar, threadWaitWriteSTM, threadWaitWrite, threadWaitReadSTM, threadWaitRead)+import GHC.Exts as Exports (lazy, inline, sortWith, groupWith)+import GHC.Generics as Exports (Generic)+import GHC.IO.Exception as Exports+import Numeric as Exports+import Prelude as Exports hiding (concat, foldr, mapM_, sequence_, foldl1, maximum, minimum, product, sum, all, and, any, concatMap, elem, foldl, foldr1, notElem, or, mapM, sequence, id, (.))+import System.Environment as Exports+import System.Exit as Exports+import System.IO as Exports+import System.IO.Error as Exports+import System.IO.Unsafe as Exports+import System.Mem as Exports+import System.Mem.StableName as Exports+import System.Timeout as Exports+import Text.ParserCombinators.ReadP as Exports (ReadP, ReadS, readP_to_S, readS_to_P)+import Text.ParserCombinators.ReadPrec as Exports (ReadPrec, readPrec_to_P, readP_to_Prec, readPrec_to_S, readS_to_Prec)+import Text.Printf as Exports (printf, hPrintf)+import Text.Read as Exports (Read(..), readMaybe, readEither)+import Unsafe.Coerce as Exports -- bytestring -------------------------
test/Main.hs view
@@ -1,18 +1,28 @@ module Main where -import Prelude+import Prelude hiding (choose) import Test.QuickCheck.Instances import Test.Tasty import Test.Tasty.HUnit import Test.Tasty.QuickCheck import qualified Data.Text as A import qualified Text.Builder as B+import qualified Data.ByteString as ByteString+import qualified Data.Text.Encoding as Text main = defaultMain $ testGroup "All tests" $ [+ testProperty "ASCII ByteString" $ let+ gen = listOf $ do+ list <- listOf (choose (0, 127))+ return (ByteString.pack list)+ in forAll gen $ \ chunks ->+ mconcat chunks ===+ Text.encodeUtf8 (B.run (foldMap B.asciiByteString chunks))+ , testProperty "Intercalation has the same effect as in Text" $ \ separator texts -> A.intercalate separator texts ===
text-builder.cabal view
@@ -1,5 +1,5 @@ name: text-builder-version: 0.5.3.1+version: 0.5.4 category: Text synopsis: An efficient strict text builder homepage: https://github.com/nikita-volkov/text-builder@@ -25,7 +25,6 @@ base >=4.9 && <5, base-prelude <2, bytestring >=0.10 && <0.11,- semigroups >=0.18 && <0.19, text >=1 && <2 test-suite test