class List

< do |value|
  self.push(value)
end

+ do |other|
  if other.kind_of?(List)
    self.merge!(other)
  else
    self
  end
end

each do
  if lambda?
    keys = self.keys
    i = 0
    while i < keys.length
      key = keys[i]
      lambda.call(self[key], key)
      i += 1
    end
  end
end

inject do |val, iter|
  if lambda?
    self.each -> { |item, key|
      val = lambda.call(val, item, key)
    }
  end
  val
end

sum do
  inject(0) -> { |sum, val|
    if val.kind_of?(Number)
      sum + val
    else
      sum
    end
  }
end

pairs do
  lst = []
  self.each -> { |val, key| lst < (key => val) }
  lst
end

to_list do self end

end