   end
 
   def map(collection, fun) do
-    { iterator, pointer } = I.iterator(collection)
-    do_map(pointer, iterator, fun)
+    case I.iterator(collection) do
+      { iterator, pointer }  ->
+        do_map(pointer, iterator, fun)
+      list when is_list(list) ->
+        map(list, fun)
+    end
   end
 
   @doc """

  end

  def empty?(collection) do
    { _iterator, pointer } = I.iterator(collection)
    pointer === :stop
  end

  @doc """


  ## all?

  defp do_all?([h|t], fun) do
    case fun.(h) do
      x in [false, nil] -> false
      _ -> do_all?(t, fun)
    end
  end

  defp do_all?([], _) do
    true
  end

  defp do_all?({ h, next }, iterator, fun) do
    case fun.(h) do
      x in [false, nil] -> false
      _ -> do_all?(iterator.(next), iterator, fun)
    end
  end

