   #
   # This is used internally by `for` and should not be used directly.
   def for(lists, fun) do
-    iterators = lc list in lists, do: { list, Enum::Iterator.iterator(list) }
+    iterators = lc list in lists, do: { list, I.iterator(list) }
     [{h,iterator}|t] = iterators
     first_comprehension_each iterator, iterator.(h), t, [], fun
   end

  #     Enum.empty? [] #=> true
  #     Enum.empty? [1,2,3] #=> false
  #
  def empty?(collection) do
    empty?(I.iterator(collection), collection)
  end

  #     Enum.mapfoldl [1, 2, 3], 0, fn(x, acc) { { x * 2, x + acc } }
  #     #=> { [2, 4, 6], 6 }
  #
  def mapfoldl(collection, acc, f) when is_list(collection) do
    :lists.mapfoldl(f, acc, collection)
  end

  def mapfoldl(collection, acc, fun) do
    mapfoldl(I.iterator(collection), collection, acc, fun)
  end
