@@ -6,27 +6,27 @@
66{-# LANGUAGE FlexibleContexts #-}
77{-# LANGUAGE ScopedTypeVariables #-}
88
9+import Data.Char (ord)
910import Streamly.Internal.Data.Stream (Stream)
10−import Streamly.Internal.Data.SVar (MonadAsync)
11+import System.IO (hSeek, SeekMode(..), openFile, IOMode(..))
1112
1213import qualified Streamly.Data.Array.Unboxed as A
13−import qualified Streamly.FileSystem.Handle as FH
1414import qualified Streamly.Internal.FileSystem.Handle as IFH
1515import qualified Streamly.Data.Fold as FL
16+import qualified Streamly.Internal.Data.Stream as S
1617import 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
1918
20−import Data.Char (ord)
2119import Gauge
22−import System.IO (hSeek, SeekMode(..), openFile, IOMode(..))
2320import System.Random
2421
2522maxValue :: Int
2623maxValue = 100000
2724
25+drain :: Monad m => S.Stream m a -> m ()
26+drain = S.fold FL.drain
27+
2828{-# INLINE sourceUnfoldrM #-}
29−sourceUnfoldrM :: MonadAsync m => Stream m Int
29+sourceUnfoldrM :: Monad m => Stream m Int
3030sourceUnfoldrM = S.unfoldrM step 0
3131 where
3232 step cnt =
@@ -35,7 +35,7 @@ sourceUnfoldrM = S.unfoldrM step 0
3535 else return (Just (cnt, cnt + 1))
3636
3737{-# INLINE sourceUnfoldrMN #-}
38−sourceUnfoldrMN :: MonadAsync m => Int -> Stream m Int
38+sourceUnfoldrMN :: Monad m => Int -> Stream m Int
3939sourceUnfoldrMN n = S.unfoldrM step n
4040 where
4141 step cnt =
@@ -64,7 +64,7 @@ takeAllDropOne = S.drop 1 . S.take maxValue
6464
6565{-# INLINE takeDrop #-}
6666takeDrop :: Monad m => Stream m Int -> m ()
67−takeDrop = S.drain .
67+takeDrop = drain .
6868 takeAllDropOne . takeAllDropOne . takeAllDropOne . takeAllDropOne
6969
7070-------------------------------------------------------------------------------
@@ -79,7 +79,7 @@ dropWhileFalse = S.dropWhile (> maxValue)
7979
8080{-# INLINE dropWhileFalseX4 #-}
8181dropWhileFalseX4 :: Monad m => Stream m Int -> m ()
82−dropWhileFalseX4 = S.drain
82+dropWhileFalseX4 = drain
8383 . dropWhileFalse . dropWhileFalse . dropWhileFalse . dropWhileFalse
8484
8585-------------------------------------------------------------------------------
@@ -88,7 +88,7 @@ dropWhileFalseX4 = S.drain
8888
8989{-# INLINE iterateSource #-}
9090iterateSource
91− :: MonadAsync m
91+ :: Monad m
9292 => (Stream m Int -> Stream m Int) -> Int -> Int -> Stream m Int
9393iterateSource g i n = f i (sourceUnfoldrMN n)
9494 where
@@ -100,20 +100,26 @@ iterateSource g i n = f i (sourceUnfoldrMN n)
100100main :: IO ()
101101main = do
102102 defaultMain [bench "unfoldr" $ nfIO $
103− randomRIO (1,1) >>= \n -> S.drain (sourceUnfoldr n)]
103+ randomRIO (1,1) >>= \n -> drain (sourceUnfoldr n)]
104104 defaultMain [bench "take-drop" $ nfIO $ takeDrop sourceUnfoldrM]
105105 defaultMain [bench "dropWhileFalseX4" $
106106 nfIO $ dropWhileFalseX4 sourceUnfoldrM]
107107 defaultMain [bench "iterate-mapM" $
108− nfIO $ S.drain $ iterateSource (S.mapM return) 100000 10]
108+ nfIO $ drain $ iterateSource (S.mapM return) 100000 10]
109109
110110 inText <- openFile "benchmark/text-processing/gutenberg-500.txt" ReadMode
111111 defaultMain [mkBenchText "splitOn abc...xyz" inText $ do
112− (S.length $ Internal.splitOnSeq (A.fromList $ map (fromIntegral . ord)
113− "abcdefghijklmnopqrstuvwxyz") FL.drain
114− $ IFH.getBytes inText) >>= print
112+ S.fold FL.length
113+ (Internal.splitOnSeq
114+ (A.fromList
115+ $ map (fromIntegral . ord) "abcdefghijklmnopqrstuvwxyz"
116+ )
117+ FL.drain
118+ $ IFH.getBytes inText
119+ )
120+ >>= print
115121 ]
116122 where
117123
118124 mkBenchText name h action =
119− bench name $ perRunEnv (hSeek h AbsoluteSeek 0) (\_ -> action)
125+ env (hSeek h AbsoluteSeek 0) (\_ -> bench name $ nfIO action)