   #     #=> [4]
 
   def filter_map(collection, filter, mapper) do
-    filter_map(I.iterator(collection), collection, filter, mapper)
-  end
-
-  def filter_map(iterator, collection, filter, mapper) do
-    do_filter_map(iterator.(collection), iterator, filter, mapper)
+    { iterator, pointer } = I.iterator(collection)
+    filter_map(iterator, pointer, filter, mapper)
+  end
+
+  def filter_map(iterator, pointer, filter, mapper) do
+    do_filter_map(pointer, iterator, filter, mapper)
   end
 
   # Invokes the `fun` for each item in collection

  #     #=> { [2], [1,3] }
  #
  def partition(collection, fun) do
    partition(I.iterator(collection), collection, fun)
  end

  def partition(iterator, collection, fun) do
    do_partition(iterator.(collection), iterator, fun, [], [])
  end

  # Iterates the collection passing an accumulator as parameter.

  end

  def map(collection, fun) do
    { iterator, pointer } = I.iterator(collection)
    map(iterator, pointer, fun)
  end

  def map(iterator, pointer, fun) do
    do_map(pointer, iterator, fun)
  end

  # Invokes the given `fun` for each item in the `collection`
