* adding better support for finite lazy lists  
* make lists even
* this stuff
  # XXX
  def append(*elements)
    return rest if empty?
    s = self
    loop do
      if s.tail.empty?
        break s
      else
        s = s.tail
      end
    end
    s.tail = rest
    self
  end
  alias << append

  # XXX self should be finite
  def +(other)
    other.is_a? self.class or
      raise TypeError, "other has to be a #{self.class}"
    copy = LazyList[to_a]
    s = copy
    loop do
      if s.tail.empty?
        break s
      else
        s = s.tail
      end
    end
    s.tail = LazyList[other.to_a]
    copy
  end

