The
intersect function takes the list intersection of two
lists. It is a special case of
intersectBy, which allows the
programmer to supply their own equality test. For example,
>>> [1,2,3,4] `intersect` [2,4,6,8]
[2,4]
If equal elements are present in both lists, an element from the first
list will be used, and all duplicates from the second list quashed:
>>> import Data.Semigroup
>>> intersect [Arg () "dog"] [Arg () "cow", Arg () "cat"]
[Arg () "dog"]
However if the first list contains duplicates, so will the result.
>>> "coot" `intersect` "heron"
"oo"
>>> "heron" `intersect` "coot"
"o"
If the second list is infinite,
intersect either hangs or
returns its first argument in full. Otherwise if the first list is
infinite,
intersect might be productive:
>>> intersect [100..] [0..]
[100,101,102,103...
>>> intersect [0] [1..]
* Hangs forever *
>>> intersect [1..] [0]
* Hangs forever *
>>> intersect (cycle [1..3]) [2]
[2,2,2,2...