on master help sign in
Expose rollinghash and intercalate
commita75c178599fa6f515516bec6277bb0b0f749ab66 authorHarendra Kumar <harendra@composewell.com> dateWed 21 Apr 2021, 02:55 (5 years ago) parentf64dd78
4 files changed+28−2
benchmark/Streamly/Benchmark/Prelude/Serial/Transformation1.hs+14−1 src/Streamly/Data/Fold.hs+2−1 src/Streamly/Prelude.hs+2 src/Streamly/Unicode/Stream.hs+10
benchmark/Streamly/Benchmark/Prelude/Serial/Transformation1.hs+14−1
@@ -33,6 +33,7 @@ import Test.Inspection
3333import qualified Streamly.Prelude as S
3434import qualified Streamly.Internal.Data.Stream.IsStream as Internal
3535import qualified Streamly.Internal.Data.Fold as FL
36+import qualified Streamly.Internal.Data.Unfold as Unfold
3637import qualified Prelude
3738
3839import Gauge
@@ -482,12 +483,24 @@ intersperseM value n = composeN n $ S.intersperseM (return $ value + 1)
482483insertBy :: MonadIO m => Int -> Int -> SerialT m Int -> m ()
483484insertBy value n = composeN n $ S.insertBy compare (value + 1)
484485
486+{-# INLINE interposeSuffix #-}
487+interposeSuffix :: S.MonadAsync m => Int -> Int -> SerialT m Int -> m ()
488+interposeSuffix value n =
489+ composeN n $ Internal.interposeSuffix (value + 1) Unfold.identity
490+
491+{-# INLINE intercalateSuffix #-}
492+intercalateSuffix :: S.MonadAsync m => Int -> Int -> SerialT m Int -> m ()
493+intercalateSuffix value n =
494+ composeN n $ Internal.intercalateSuffix (value + 1) Unfold.identity
495+
485496o_1_space_inserting :: Int -> [Benchmark]
486497o_1_space_inserting value =
487− [ bgroup "filtering"
498+ [ bgroup "inserting"
488499 [ benchIOSink value "intersperse" (intersperse value 1)
489500 , benchIOSink value "intersperseM" (intersperseM value 1)
490501 , benchIOSink value "insertBy" (insertBy value 1)
502+ , benchIOSink value "interposeSuffix" (interposeSuffix value 1)
503+ , benchIOSink value "intercalateSuffix" (intercalateSuffix value 1)
491504 ]
492505 ]
493506
src/Streamly/Data/Fold.hs+2−1
@@ -150,7 +150,8 @@ module Streamly.Data.Fold
150150 , mean
151151 , variance
152152 , stdDev
153−
153+ , rollingHash
154+ , rollingHashWithSalt
154155
155156 -- Collectors
156157 , toList
src/Streamly/Prelude.hs+2
@@ -756,6 +756,8 @@ module Streamly.Prelude
756756
757757 -- ** Nested Unfolds
758758 , unfoldMany
759+ , intercalate
760+ , intercalateSuffix
759761
760762 -- ** Nested Streams
761763 -- | Stream operations like map and filter represent loop processing in
src/Streamly/Unicode/Stream.hs+10
@@ -43,6 +43,16 @@
4343-- can be used for convenience when specifying unicode strings literals using
4444-- these types.
4545--
46+-- = Idioms
47+--
48+-- Some simple text processing operations can be represented simply as
49+-- operations on Char streams. Follow the links for the following idioms:
50+--
51+-- * 'Streamly.Internal.Unicode.Stream.lines'
52+-- * 'Streamly.Internal.Unicode.Stream.words'
53+-- * 'Streamly.Internal.Unicode.Stream.unlines'
54+-- * 'Streamly.Internal.Unicode.Stream.unwords'
55+--
4656-- = Pitfalls
4757--
4858-- * Case conversion: Some unicode characters translate to more than one code