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

  #     Enum.mapfoldl [1, 2, 3], 0, fn(x, acc) { { x * 2, x + acc } }
  #     #=> { [2, 4, 6], 6 }
  #
  def mapfoldl(collection, acc, fun) do
    mapfoldl(I.iterator(collection), collection, acc, fun)
  end

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

  def empty?(collection) do
    empty?(I.iterator(collection), collection)
  end
