module Hamster
def self.hash(pairs = {})
def self.hash(pairs = {}) pairs.reduce(Hash.new) { |hash, pair| hash.put(pair.first, pair.last) } end
def self.set(*items)
def self.set(*items) items.reduce(Set.new) { |set, item| set.add(item) } end
def self.stack(*items)
def self.stack(*items) items.reduce(EmptyStack) { |stack, item| stack.push(item) } end
def interval(from, to)
def interval(from, to) return EmptyList if from > to Stream.new(from) { interval(from.succ, to) } end
def iterate(item, &block)
def iterate(item, &block) Stream.new(item) { iterate(yield(item), &block) } end
def list(*items)
def list(*items) items.reverse.reduce(EmptyList) { |list, item| list.cons(item) } end
def repeat(item)
def repeat(item) Stream.new(item) { repeat(item) } end
def replicate(number, item)
def replicate(number, item) repeat(item).take(number) end
def stream(&block)
def stream(&block) return EmptyList unless block_given? Stream.new(yield) { stream(&block) } end