 end
 
 defimpl Enum::Iterator, for: List do
-  def iterator(_), do: iterate(&1)
+  def iterator(list), do: { iterate(&1), iterate(list) }
 
   defp iterate([h|t]) do
     { h, t }

  #     #=> [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)
  end

  # Invokes the `fun` for each item in collection

  #     Enum.all? [1,nil,3] #=> false
  #
  def all?(collection, fun // fn(x, do: x)) do
    { 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`
