Skip to content

Commit 3b29249

Browse files
committed
Implement unionBySorted API
1 parent 13abd4a commit 3b29249

File tree

3 files changed

+595
-8
lines changed

3 files changed

+595
-8
lines changed

src/Streamly/Internal/Data/Stream/IsStream/Top.hs

Lines changed: 12 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -28,11 +28,11 @@ module Streamly.Internal.Data.Stream.IsStream.Top
2828
-- | These are not exactly set operations because streams are not
2929
-- necessarily sets, they may have duplicated elements.
3030
, intersectBy
31-
, intersectBySorted
31+
, intersectBySorted
3232
, differenceBy
3333
, mergeDifferenceBy
3434
, unionBy
35-
, mergeUnionBy
35+
, unionBySorted
3636

3737
-- ** Join operations
3838
, crossJoin
@@ -521,7 +521,9 @@ intersectBy eq s1 s2 =
521521
intersectBySorted :: (IsStream t, MonadIO m, Eq a) =>
522522
(a -> a -> Ordering) -> t m a -> t m a -> t m a
523523
intersectBySorted eq s1 =
524-
IsStream.fromStreamD . StreamD.intersectBySorted eq (IsStream.toStreamD s1) . IsStream.toStreamD
524+
IsStream.fromStreamD
525+
. StreamD.intersectBySorted eq (IsStream.toStreamD s1)
526+
. IsStream.toStreamD
525527

526528
-- Roughly leftJoin s1 s2 = s1 `difference` s2 + s1 `intersection` s2
527529

@@ -613,8 +615,11 @@ unionBy eq s1 s2 =
613615
--
614616
-- Space: O(1)
615617
--
616-
-- /Unimplemented/
617-
{-# INLINE mergeUnionBy #-}
618-
mergeUnionBy :: -- (IsStream t, Monad m) =>
618+
-- /Pre-release/
619+
{-# INLINE unionBySorted #-}
620+
unionBySorted :: (IsStream t, MonadAsync m, Ord a) =>
619621
(a -> a -> Ordering) -> t m a -> t m a -> t m a
620-
mergeUnionBy _eq _s1 _s2 = undefined
622+
unionBySorted cmp s1 =
623+
IsStream.fromStreamD
624+
. StreamD.unionBySorted cmp (IsStream.toStreamD s1)
625+
. IsStream.toStreamD

0 commit comments

Comments
 (0)