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