Change implementation of intersectBy
Currently, intersectBy eq xs  takes O(length xs) time to calculate and returns | on (x : |). The proposed change,
intersectBy :: (a -> a -> Bool) -> [a] -> [a] -> [a] intersectBy _  _ =  intersectBy _ _  =  intersectBy eq xs ys = [x | x <- xs, any (eq x) ys]
makes this an O(1) operation and returns  for infinite or partial (... : |) lists xs. The first equation is necessary to retain intersectBy _  | = .