34 lines
971 B
Haskell
34 lines
971 B
Haskell
module StreamingHelp
|
|
( minStreamOn
|
|
, sortStreamOn
|
|
, module Streaming
|
|
, module StreamingHelp.Data
|
|
) where
|
|
import Streaming
|
|
import StreamingHelp.Data
|
|
import qualified Streaming.Prelude as S
|
|
import qualified Control.Foldl as L
|
|
import Data.Function (on)
|
|
|
|
|
|
minStreamOn :: Ord a => (b -> a) -> StreamOf b -> Maybe b
|
|
{-# INLINE minStreamOn #-}
|
|
minStreamOn f = runIdentity
|
|
. L.purely S.fold_ (L.minimumBy (compare `on` f))
|
|
|
|
-- this hopefully also nub the stream in most cases
|
|
--orderStreamOn :: Ord b => (a -> b) -> Stream (Of a) Identity () -> Identity (Of (M.Map b a) ())
|
|
sortStreamOn :: Ord a => (b -> a) -> StreamOf b -> Stream (Of b) Identity ()
|
|
{-# INLINE sortStreamOn #-}
|
|
sortStreamOn f = S.each . runIdentity . L.purely S.fold_ L.map . S.map g
|
|
where
|
|
g x = (f x,x)
|
|
|
|
--applyUnzip
|
|
-- :: (Stream (Of a) IO () -> IO r)
|
|
-- -> (Stream (Of b) IO () -> IO ())
|
|
-- -> Stream (Of a) (Stream g IO) ()
|
|
-- -> IO r
|
|
--applyUnzip f g s = h s
|
|
|