   end
 
   def qsort(collection) do
-    { iterator, pointer } = I.iterator(collection)
-    do_qsort(pointer, iterator, [])
+    case I.iterator(collection) do
+      { iterator, pointer } ->
+        do_qsort(pointer, iterator, [])
+      list when is_list(list) ->
+        qsort(list)
+    end
   end
 
   @doc """

      Enum.map_join([1,2,3], &1 * 2, ' = ') #=> '2 = 4 = 6'

  """
  def map_join(collection, joiner // "", mapper) do
    { iterator, pointer } = I.iterator(collection)
    map_join(iterator, pointer, mapper, joiner)
  end

  defp map_join(iterator, collection, mapper, joiner) when is_list(joiner) do
    binary_to_list map_join(iterator, collection, mapper, list_to_binary(joiner))
  end

  defp map_join(iterator, pointer, mapper, joiner) do
    do_map_join(pointer, iterator, mapper, joiner, nil)
  end


  end

  def map_reduce(collection, acc, fun) do
    case I.iterator(collection) do
      { iterator, pointer }  ->
        do_map_reduce(pointer, iterator, [], acc, fun)
      list when is_list(list) ->
        map_reduce(list, acc, fun)
    end
  end

  @doc """
