@@ -78,6 +78,8 @@ module Streamly.Streams.StreamK
82 -- ** Map and Fold
84 -- ** Map and Fold
@@ -126,7 +128,8 @@ import Control.Monad.Trans.Class (MonadTrans(lift))
126import Data.Semigroup (Semigroup(..))
128import Data.Semigroup (Semigroup(..))
127import Prelude
129import Prelude
128 hiding (foldl, foldr, last, map, mapM, mapM_, repeat, sequence,
130 hiding (foldl, foldr, last, map, mapM, mapM_, repeat, sequence,
129− take, filter, all, any, takeWhile, drop, dropWhile)
131+ take, filter, all, any, takeWhile, drop, dropWhile, minimum,
130import qualified Prelude
133import qualified Prelude
132import Streamly.SVar
135import Streamly.SVar
@@ -543,6 +546,50 @@ any p m = go (toStream m)
543last :: (IsStream t, Monad m) => t m a -> m (Maybe a)
546last :: (IsStream t, Monad m) => t m a -> m (Maybe a)
544last = foldx (\_ y -> Just y) Nothing id
547last = foldx (\_ y -> Just y) Nothing id
549+{-# INLINE minimum #-}
550+minimum :: (IsStream t, Monad m, Ord a) => t m a -> m (Maybe a)
551+minimum m = go Nothing (toStream m)
554+ let stop = return Nothing
555+ single a = return (Just a)
556+ yieldk a r = go (Just a) r
557+ in unStream m1 Nothing stop single yieldk
560+ let stop = return (Just res)
563+ then return (Just res)
564+ else return (Just a)
567+ then go (Just res) r
569+ in unStream m1 Nothing stop single yieldk
571+{-# INLINE maximum #-}
572+maximum :: (IsStream t, Monad m, Ord a) => t m a -> m (Maybe a)
573+maximum m = go Nothing (toStream m)
576+ let stop = return Nothing
577+ single a = return (Just a)
578+ yieldk a r = go (Just a) r
579+ in unStream m1 Nothing stop single yieldk
582+ let stop = return (Just res)
585+ then return (Just a)
586+ else return (Just res)
590+ else go (Just res) r
591+ in unStream m1 Nothing stop single yieldk
546------------------------------------------------------------------------------
593------------------------------------------------------------------------------
547-- Map and Fold
594-- Map and Fold
548------------------------------------------------------------------------------
595------------------------------------------------------------------------------