zip = fn|a| map = a.map any = a.any next = |i| i() is_empty = |x| x==empty a = map(a;iter) return fn*|| while true t = map(a;next) if any(t;is_empty) return empty else yield t end end end end Iterable.at = fn at|n| return self.skip(n)() end