on master help sign in
Use StreamD versions for null/head

findIndex benchmark improves quite a bit with that. When using `head` from StreamK, findIndex degraded significantly when using bigger value of -fmax-worker-args.

commit527ab96060ea07e3df29cde6fea9f7a2beb423c2 authorHarendra Kumar <harendra.kumar@gmail.com> dateThu 22 Aug 2019, 20:27 (7 years ago) parent17b7d92
2 files changed+2−3
src/Streamly/Prelude/Internal.hs+2−2 src/Streamly/Streams/StreamD.hs−1
src/Streamly/Prelude/Internal.hs+2−2
@@ -1024,7 +1024,7 @@ runWhile = drainWhile
10241024-- @since 0.1.1
10251025{-# INLINE null #-}
10261026null :: Monad m => SerialT m a -> m Bool
1027−null = K.null
1027+null = S.null . toStreamS
10281028
10291029-- | Extract the first element of the stream, if any.
10301030--
@@ -1033,7 +1033,7 @@ null = K.null
10331033-- @since 0.1.0
10341034{-# INLINE head #-}
10351035head :: Monad m => SerialT m a -> m (Maybe a)
1036−head = K.head
1036+head = S.head . toStreamS
10371037
10381038-- |
10391039-- > tail = fmap (fmap snd) . uncons
src/Streamly/Streams/StreamD.hs−1
@@ -648,7 +648,6 @@ drain (Stream step state) = go SPEC state
648648null :: Monad m => Stream m a -> m Bool
649649null m = foldrM (\_ _ -> return False) (return True) m
650650
651−-- XXX SPEC?
652651{-# INLINE_NORMAL head #-}
653652head :: Monad m => Stream m a -> m (Maybe a)
654653head m = foldrM (\x _ -> return (Just x)) (return Nothing) m