   #     Enum.all? [1,nil,3] #=> false
   #
   def all?(collection, fun // fn(x, do: x)) do
-    all?(I.iterator(collection), collection, fun)
-  end
-
-  def all?(iterator, collection, fun) do
-    do_all?(iterator.(collection), iterator, fun)
+    { iterator, pointer } = I.iterator(collection)
+    all?(iterator, pointer, fun)
+  end
+
+  def all?(iterator, pointer, fun) do
+    do_all?(pointer, iterator, fun)
   end
 
   # Invokes the given `fun` for each item in the `collection`

  #     # => 3
  #
  def find(collection, ifnone // nil, fun) do
    find(I.iterator(collection), collection, ifnone, fun)
  end

  def find(iterator, collection, ifnone, fun) do
    do_find(iterator.(collection), iterator, ifnone, fun)
  end

  # Similar to find, but returns the value of the function

  #     Enum.each ['some', 'example'], fn(x, do: IO.puts x)
  #
  def each(collection, fun) do
    { iterator, pointer } = I.iterator(collection)
    each(iterator, pointer, fun)
    collection
  end

  def each(iterator, pointer, fun) do
    do_each(pointer, iterator, fun)
    pointer
  end

  # Returns all the entries in the collection. It is the equivalent
