on master help sign in
Change the order of arguments in Unfold.fold
ae741f1Harendra Kumar
benchmark/Streamly/Benchmark/Data/Unfold.hs+11−13
@@ -62,7 +62,7 @@ source n = UF.enumerateFromToIntegral n
62
62
63{-# INLINE drainGeneration #-}
63{-# INLINE drainGeneration #-}
64drainGeneration :: Monad m => Unfold m a b -> a -> m ()
64drainGeneration :: Monad m => Unfold m a b -> a -> m ()
65−drainGeneration unf seed = UF.fold unf FL.drain seed
65+drainGeneration unf seed = UF.fold FL.drain unf seed
66
66
67{-# INLINE drainTransformation #-}
67{-# INLINE drainTransformation #-}
68drainTransformation ::
68drainTransformation ::
@@ -409,7 +409,7 @@ toNullAp value start =
409 let end = start + nthRoot 2 value
409 let end = start + nthRoot 2 value
410 s = source end
410 s = source end
411 -- in UF.fold ((+) <$> s <*> s) FL.drain start
411 -- in UF.fold ((+) <$> s <*> s) FL.drain start
412− in UF.fold ((+) `fmap` s `UF.apply` s) FL.drain start
412+ in UF.fold FL.drain ((+) `fmap` s `UF.apply` s) start
413
413
414{-# INLINE _apDiscardFst #-}
414{-# INLINE _apDiscardFst #-}
415_apDiscardFst :: Int -> Int -> m ()
415_apDiscardFst :: Int -> Int -> m ()
@@ -451,7 +451,7 @@ toNull value start =
451 u = src `UF.bind` \x ->
451 u = src `UF.bind` \x ->
452 src `UF.bind` \y ->
452 src `UF.bind` \y ->
453 UF.yield (x + y)
453 UF.yield (x + y)
454− in UF.fold u FL.drain start
454+ in UF.fold FL.drain u start
455
455
456
456
457{-# INLINE toNull3 #-}
457{-# INLINE toNull3 #-}
@@ -469,7 +469,7 @@ toNull3 value start =
469 u = src `UF.bind` \x ->
469 u = src `UF.bind` \x ->
470 src `UF.bind` \y ->
470 src `UF.bind` \y ->
471 UF.yield (x + y)
471 UF.yield (x + y)
472− in UF.fold u FL.drain start
472+ in UF.fold FL.drain u start
473
473
474{-# INLINE toList #-}
474{-# INLINE toList #-}
475toList :: Monad m => Int -> Int -> m [Int]
475toList :: Monad m => Int -> Int -> m [Int]
@@ -485,7 +485,7 @@ toList value start = do
485 u = src `UF.bind` \x ->
485 u = src `UF.bind` \x ->
486 src `UF.bind` \y ->
486 src `UF.bind` \y ->
487 UF.yield (x + y)
487 UF.yield (x + y)
488− in UF.fold u FL.toList start
488+ in UF.fold FL.toList u start
489
489
490{-# INLINE toListSome #-}
490{-# INLINE toListSome #-}
491toListSome :: Monad m => Int -> Int -> m [Int]
491toListSome :: Monad m => Int -> Int -> m [Int]
@@ -501,7 +501,7 @@ toListSome value start = do
501 u = src `UF.bind` \x ->
501 u = src `UF.bind` \x ->
502 src `UF.bind` \y ->
502 src `UF.bind` \y ->
503 UF.yield (x + y)
503 UF.yield (x + y)
504− in UF.fold (UF.take 1000 u) FL.toList start
504+ in UF.fold FL.toList (UF.take 1000 u) start
505
505
506{-# INLINE filterAllOut #-}
506{-# INLINE filterAllOut #-}
507filterAllOut :: Monad m => Int -> Int -> m ()
507filterAllOut :: Monad m => Int -> Int -> m ()
@@ -519,7 +519,7 @@ filterAllOut value start = do
519 in if s < 0
519 in if s < 0
520 then UF.yield s
520 then UF.yield s
521 else UF.nilM (return . const ())
521 else UF.nilM (return . const ())
522− in UF.fold u FL.drain start
522+ in UF.fold FL.drain u start
523
523
524{-# INLINE filterAllIn #-}
524{-# INLINE filterAllIn #-}
525filterAllIn :: Monad m => Int -> Int -> m ()
525filterAllIn :: Monad m => Int -> Int -> m ()
@@ -537,7 +537,7 @@ filterAllIn value start = do
537 in if s > 0
537 in if s > 0
538 then UF.yield s
538 then UF.yield s
539 else UF.nilM (return . const ())
539 else UF.nilM (return . const ())
540− in UF.fold u FL.drain start
540+ in UF.fold FL.drain u start
541
541
542{-# INLINE filterSome #-}
542{-# INLINE filterSome #-}
543filterSome :: Monad m => Int -> Int -> m ()
543filterSome :: Monad m => Int -> Int -> m ()
@@ -555,7 +555,7 @@ filterSome value start = do
555 in if s > 1100000
555 in if s > 1100000
556 then UF.yield s
556 then UF.yield s
557 else UF.nilM (return . const ())
557 else UF.nilM (return . const ())
558− in UF.fold u FL.drain start
558+ in UF.fold FL.drain u start
559
559
560{-# INLINE breakAfterSome #-}
560{-# INLINE breakAfterSome #-}
561breakAfterSome :: Int -> Int -> IO ()
561breakAfterSome :: Int -> Int -> IO ()
@@ -574,7 +574,7 @@ breakAfterSome value start =
574 then error "break"
574 then error "break"
575 else UF.yield s
575 else UF.yield s
576 in do
576 in do
577− (_ :: Either ErrorCall ()) <- try $ UF.fold u FL.drain start
577+ (_ :: Either ErrorCall ()) <- try $ UF.fold FL.drain u start
578 return ()
578 return ()
579
579
580-------------------------------------------------------------------------------
580-------------------------------------------------------------------------------
@@ -590,9 +590,7 @@ concatCount linearCount =
590concat :: Monad m => Int -> Int -> m ()
590concat :: Monad m => Int -> Int -> m ()
591concat linearCount start = do
591concat linearCount start = do
592 let end = start + concatCount linearCount
592 let end = start + concatCount linearCount
593− UF.fold
594− (UF.many (source end) (source end))
595− FL.drain start
593+ UF.fold FL.drain (UF.many (source end) (source end)) start
596
594
597-------------------------------------------------------------------------------
595-------------------------------------------------------------------------------
598-- Benchmarks
596-- Benchmarks
benchmark/Streamly/Benchmark/FileSystem/Handle/ReadWrite.hs+4−4
@@ -132,7 +132,7 @@ inspect $ 'readWithBufferOfFromBytesNull `hasNoType` ''D.FoldMany
132-- | Send the chunk content ('defaultChunkSize') to /dev/null
132-- | Send the chunk content ('defaultChunkSize') to /dev/null
133-- Implicitly benchmarked via 'readFromBytesNull'
133-- Implicitly benchmarked via 'readFromBytesNull'
134_readChunks :: Handle -> Handle -> IO ()
134_readChunks :: Handle -> Handle -> IO ()
135−_readChunks inh devNull = IUF.fold unf fld inh
135+_readChunks inh devNull = IUF.fold fld unf inh
136
136
137 where
137 where
138
138
@@ -142,7 +142,7 @@ _readChunks inh devNull = IUF.fold unf fld inh
142-- | Send the chunk content to /dev/null
142-- | Send the chunk content to /dev/null
143-- Implicitly benchmarked via 'readWithBufferOfFromBytesNull'
143-- Implicitly benchmarked via 'readWithBufferOfFromBytesNull'
144_readChunksWithBufferOf :: Handle -> Handle -> IO ()
144_readChunksWithBufferOf :: Handle -> Handle -> IO ()
145−_readChunksWithBufferOf inh devNull = IUF.fold unf fld (defaultChunkSize, inh)
145+_readChunksWithBufferOf inh devNull = IUF.fold fld unf (defaultChunkSize, inh)
146
146
147 where
147 where
148
148
@@ -163,7 +163,7 @@ o_1_space_copy_fromBytes env =
163-- | Send the file contents ('defaultChunkSize') to /dev/null
163-- | Send the file contents ('defaultChunkSize') to /dev/null
164{-# NOINLINE writeReadWithBufferOf #-}
164{-# NOINLINE writeReadWithBufferOf #-}
165writeReadWithBufferOf :: Handle -> Handle -> IO ()
165writeReadWithBufferOf :: Handle -> Handle -> IO ()
166−writeReadWithBufferOf inh devNull = IUF.fold unf fld (defaultChunkSize, inh)
166+writeReadWithBufferOf inh devNull = IUF.fold fld unf (defaultChunkSize, inh)
167
167
168 where
168 where
169
169
@@ -181,7 +181,7 @@ inspect $ 'writeReadWithBufferOf `hasNoType` ''AT.ArrayUnsafe -- FH.write/writeN
181-- | Send the file contents ('AT.defaultChunkSize') to /dev/null
181-- | Send the file contents ('AT.defaultChunkSize') to /dev/null
182{-# NOINLINE writeRead #-}
182{-# NOINLINE writeRead #-}
183writeRead :: Handle -> Handle -> IO ()
183writeRead :: Handle -> Handle -> IO ()
184−writeRead inh devNull = IUF.fold unf fld inh
184+writeRead inh devNull = IUF.fold fld unf inh
185
185
186 where
186 where
187
187
benchmark/Streamly/Benchmark/Prelude/Serial/Exceptions.hs+3−3
@@ -135,7 +135,7 @@ o_1_space_copy_stream_exceptions env =
135readChunksOnException :: Handle -> Handle -> IO ()
135readChunksOnException :: Handle -> Handle -> IO ()
136readChunksOnException inh devNull =
136readChunksOnException inh devNull =
137 let readEx = IUF.onException (\_ -> hClose inh) FH.readChunks
137 let readEx = IUF.onException (\_ -> hClose inh) FH.readChunks
138− in IUF.fold readEx (IFH.writeChunks devNull) inh
138+ in IUF.fold (IFH.writeChunks devNull) readEx inh
139
139
140#ifdef INSPECTION
140#ifdef INSPECTION
141inspect $ hasNoTypeClasses 'readChunksOnException
141inspect $ hasNoTypeClasses 'readChunksOnException
@@ -146,7 +146,7 @@ inspect $ hasNoTypeClasses 'readChunksOnException
146readChunksBracket_ :: Handle -> Handle -> IO ()
146readChunksBracket_ :: Handle -> Handle -> IO ()
147readChunksBracket_ inh devNull =
147readChunksBracket_ inh devNull =
148 let readEx = IUF.bracket_ return (\_ -> hClose inh) FH.readChunks
148 let readEx = IUF.bracket_ return (\_ -> hClose inh) FH.readChunks
149− in IUF.fold readEx (IFH.writeChunks devNull) inh
149+ in IUF.fold (IFH.writeChunks devNull) readEx inh
150
150
151#ifdef INSPECTION
151#ifdef INSPECTION
152inspect $ hasNoTypeClasses 'readChunksBracket_
152inspect $ hasNoTypeClasses 'readChunksBracket_
@@ -156,7 +156,7 @@ inspect $ hasNoTypeClasses 'readChunksBracket_
156readChunksBracket :: Handle -> Handle -> IO ()
156readChunksBracket :: Handle -> Handle -> IO ()
157readChunksBracket inh devNull =
157readChunksBracket inh devNull =
158 let readEx = IUF.bracket return (\_ -> hClose inh) FH.readChunks
158 let readEx = IUF.bracket return (\_ -> hClose inh) FH.readChunks
159− in IUF.fold readEx (IFH.writeChunks devNull) inh
159+ in IUF.fold (IFH.writeChunks devNull) readEx inh
160
160
161o_1_space_copy_exceptions_readChunks :: BenchEnv -> [Benchmark]
161o_1_space_copy_exceptions_readChunks :: BenchEnv -> [Benchmark]
162o_1_space_copy_exceptions_readChunks env =
162o_1_space_copy_exceptions_readChunks env =
src/Streamly/Internal/Data/Unfold.hs+2−2
@@ -328,8 +328,8 @@ swap = lmap Tuple.swap
328-- /Pre-release/
328-- /Pre-release/
329--
329--
330{-# INLINE_NORMAL fold #-}
330{-# INLINE_NORMAL fold #-}
331−fold :: Monad m => Unfold m a b -> Fold m b c -> a -> m c
331+fold :: Monad m => Fold m b c -> Unfold m a b -> a -> m c
332−fold (Unfold ustep inject) (Fold fstep initial extract) a = do
332+fold (Fold fstep initial extract) (Unfold ustep inject) a = do
333 res <- initial
333 res <- initial
334 case res of
334 case res of
335 FL.Partial x -> inject a >>= go SPEC x
335 FL.Partial x -> inject a >>= go SPEC x