module Hamster::List
def merge(&comparator)
def merge(&comparator) return merge_by unless block_given? Stream.new do sorted = remove(&:empty?).sort do |a, b| yield(a.head, b.head) end next EmptyList if sorted.empty? Sequence.new(sorted.head.head, sorted.tail.cons(sorted.head.tail).merge(&comparator)) end end