intersectBy -package:streamly-core

The intersectBy function is the non-overloaded version of intersect. It is productive for infinite arguments only if the first one is a subset of the second.
The intersectBy function is the non-overloaded version of intersect.
Generic version of intersect
intersectBy is essentially a filtering operation that retains only those elements in the first stream that are present in the second stream.
>>> Stream.toList $ Stream.intersectBy (==) (Stream.fromList [1,2,2,4]) (Stream.fromList [2,1,1,3])
[1,2,2]
>>> Stream.toList $ Stream.intersectBy (==) (Stream.fromList [2,1,1,3]) (Stream.fromList [1,2,2,4])
[2,1,1]
intersectBy is similar to but not the same as joinInner:
>>> Stream.toList $ fmap fst $ Stream.joinInner (==) (Stream.fromList [1,2,2,4]) (Stream.fromList [2,1,1,3])
[1,1,2,2]
Space: O(n) where n is the number of elements in the second stream. Time: O(m x n) where m is the number of elements in the first stream and n is the number of elements in the second stream. Pre-release
Take the intersection of two tries, using a function to resolve collisions.
Overloaded version of intersect.
O(n*m). Non-overloaded version of intersect.
Like intersectBy but works only on streams sorted in ascending order. Space: O(1) Time: O(m+n) Pre-release
Symbolic version of intersectBy, the result would be merged and propagate the mergeable knowledge. Can generate O(len(rhs)) cases, and O(len(lhs) * len(rhs)) constraints, assuming the predicate only generates O(1) constraints.