@@ -6,27 +6,27 @@
6{-# LANGUAGE FlexibleContexts #-}
6{-# LANGUAGE FlexibleContexts #-}
7{-# LANGUAGE ScopedTypeVariables #-}
7{-# LANGUAGE ScopedTypeVariables #-}
9import Streamly.Internal.Data.Stream (Stream)
10import Streamly.Internal.Data.Stream (Stream)
10−import Streamly.Internal.Data.SVar (MonadAsync)
11+import System.IO (hSeek, SeekMode(..), openFile, IOMode(..))
12import qualified Streamly.Data.Array.Unboxed as A
13import qualified Streamly.Data.Array.Unboxed as A
13−import qualified Streamly.FileSystem.Handle as FH
14import qualified Streamly.Internal.FileSystem.Handle as IFH
14import qualified Streamly.Internal.FileSystem.Handle as IFH
15import qualified Streamly.Data.Fold as FL
15import qualified Streamly.Data.Fold as FL
16+import qualified Streamly.Internal.Data.Stream as S
16import qualified Streamly.Internal.Data.Stream.IsStream as Internal
17import qualified Streamly.Internal.Data.Stream.IsStream as Internal
17−import qualified Streamly.Prelude as S
18−import qualified Streamly.Internal.Data.Stream.StreamK as K
20−import Data.Char (ord)
21import Gauge
19import Gauge
22−import System.IO (hSeek, SeekMode(..), openFile, IOMode(..))
23import System.Random
20import System.Random
25maxValue :: Int
22maxValue :: Int
26maxValue = 100000
23maxValue = 100000
25+drain :: Monad m => S.Stream m a -> m ()
26+drain = S.fold FL.drain
28{-# INLINE sourceUnfoldrM #-}
28{-# INLINE sourceUnfoldrM #-}
29−sourceUnfoldrM :: MonadAsync m => Stream m Int
29+sourceUnfoldrM :: Monad m => Stream m Int
30sourceUnfoldrM = S.unfoldrM step 0
30sourceUnfoldrM = S.unfoldrM step 0
32 step cnt =
32 step cnt =
@@ -35,7 +35,7 @@ sourceUnfoldrM = S.unfoldrM step 0
35 else return (Just (cnt, cnt + 1))
35 else return (Just (cnt, cnt + 1))
37{-# INLINE sourceUnfoldrMN #-}
37{-# INLINE sourceUnfoldrMN #-}
38−sourceUnfoldrMN :: MonadAsync m => Int -> Stream m Int
38+sourceUnfoldrMN :: Monad m => Int -> Stream m Int
39sourceUnfoldrMN n = S.unfoldrM step n
39sourceUnfoldrMN n = S.unfoldrM step n
41 step cnt =
41 step cnt =
@@ -64,7 +64,7 @@ takeAllDropOne = S.drop 1 . S.take maxValue
65{-# INLINE takeDrop #-}
65{-# INLINE takeDrop #-}
66takeDrop :: Monad m => Stream m Int -> m ()
66takeDrop :: Monad m => Stream m Int -> m ()
67−takeDrop = S.drain .
67+takeDrop = drain .
68 takeAllDropOne . takeAllDropOne . takeAllDropOne . takeAllDropOne
68 takeAllDropOne . takeAllDropOne . takeAllDropOne . takeAllDropOne
70-------------------------------------------------------------------------------
70-------------------------------------------------------------------------------
@@ -79,7 +79,7 @@ dropWhileFalse = S.dropWhile (> maxValue)
80{-# INLINE dropWhileFalseX4 #-}
80{-# INLINE dropWhileFalseX4 #-}
81dropWhileFalseX4 :: Monad m => Stream m Int -> m ()
81dropWhileFalseX4 :: Monad m => Stream m Int -> m ()
82−dropWhileFalseX4 = S.drain
82+dropWhileFalseX4 = drain
83 . dropWhileFalse . dropWhileFalse . dropWhileFalse . dropWhileFalse
83 . dropWhileFalse . dropWhileFalse . dropWhileFalse . dropWhileFalse
85-------------------------------------------------------------------------------
85-------------------------------------------------------------------------------
@@ -88,7 +88,7 @@ dropWhileFalseX4 = S.drain
89{-# INLINE iterateSource #-}
89{-# INLINE iterateSource #-}
90iterateSource
90iterateSource
91− :: MonadAsync m
91+ :: Monad m
92 => (Stream m Int -> Stream m Int) -> Int -> Int -> Stream m Int
92 => (Stream m Int -> Stream m Int) -> Int -> Int -> Stream m Int
93iterateSource g i n = f i (sourceUnfoldrMN n)
93iterateSource g i n = f i (sourceUnfoldrMN n)
@@ -100,20 +100,26 @@ iterateSource g i n = f i (sourceUnfoldrMN n)
100main :: IO ()
100main :: IO ()
102 defaultMain [bench "unfoldr" $ nfIO $
102 defaultMain [bench "unfoldr" $ nfIO $
103− randomRIO (1,1) >>= \n -> S.drain (sourceUnfoldr n)]
103+ randomRIO (1,1) >>= \n -> drain (sourceUnfoldr n)]
104 defaultMain [bench "take-drop" $ nfIO $ takeDrop sourceUnfoldrM]
104 defaultMain [bench "take-drop" $ nfIO $ takeDrop sourceUnfoldrM]
105 defaultMain [bench "dropWhileFalseX4" $
105 defaultMain [bench "dropWhileFalseX4" $
106 nfIO $ dropWhileFalseX4 sourceUnfoldrM]
106 nfIO $ dropWhileFalseX4 sourceUnfoldrM]
107 defaultMain [bench "iterate-mapM" $
107 defaultMain [bench "iterate-mapM" $
108− nfIO $ S.drain $ iterateSource (S.mapM return) 100000 10]
108+ nfIO $ drain $ iterateSource (S.mapM return) 100000 10]
110 inText <- openFile "benchmark/text-processing/gutenberg-500.txt" ReadMode
110 inText <- openFile "benchmark/text-processing/gutenberg-500.txt" ReadMode
111 defaultMain [mkBenchText "splitOn abc...xyz" inText $ do
111 defaultMain [mkBenchText "splitOn abc...xyz" inText $ do
112− (S.length $ Internal.splitOnSeq (A.fromList $ map (fromIntegral . ord)
113+ (Internal.splitOnSeq
113− "abcdefghijklmnopqrstuvwxyz") FL.drain
115+ $ map (fromIntegral . ord) "abcdefghijklmnopqrstuvwxyz"
114− $ IFH.getBytes inText) >>= print
118+ $ IFH.getBytes inText
118 mkBenchText name h action =
124 mkBenchText name h action =
119− bench name $ perRunEnv (hSeek h AbsoluteSeek 0) (\_ -> action)
125+ env (hSeek h AbsoluteSeek 0) (\_ -> bench name $ nfIO action)