@@ -100,6 +100,7 @@ module Streamly.Internal.Data.StreamK
101 -- ** Reordering
101 -- ** Reordering
104 -- ** Map and Filter
105 -- ** Map and Filter
105 , mapMaybe
106 , mapMaybe
@@ -131,6 +132,7 @@ import Control.Exception (mask_, Exception)
131import Control.Monad (void, join)
132import Control.Monad (void, join)
132import Control.Monad.Catch (MonadCatch)
133import Control.Monad.Catch (MonadCatch)
133import Control.Monad.IO.Class (MonadIO(..))
134import Control.Monad.IO.Class (MonadIO(..))
135+import Data.Ord (comparing)
134import Data.Proxy (Proxy(..))
136import Data.Proxy (Proxy(..))
135import GHC.Types (SPEC(..))
137import GHC.Types (SPEC(..))
136import Streamly.Internal.Data.Array.Type (Array(..))
138import Streamly.Internal.Data.Array.Type (Array(..))
@@ -1717,3 +1719,10 @@ sortBy cmp =
1717 . Stream.catRights -- its a non-failing backtracking parser
1719 . Stream.catRights -- its a non-failing backtracking parser
1718 . Stream.parseMany (fmap (either id id) p)
1720 . Stream.parseMany (fmap (either id id) p)
1719 . Stream.fromStreamK
1721 . Stream.fromStreamK
1723+{-# INLINE sortOn #-}
1724+sortOn :: (Monad m, Ord b) => (a -> b) -> StreamK m a -> StreamK m a
1727+ . sortBy (comparing fst)
1728+ . fmap (\x -> let y = f x in y `seq` (y, x))