module Hamster::List

def take_while(&block)

def take_while(&block)
  return self unless block_given?
  Stream.new do
    next self if empty?
    next Sequence.new(head, tail.take_while(&block)) if yield(head)
    EmptyList
  end
end