     []
   end
 
+  ## intersperse
+
+  defp intersperse_non_empty_list([head], _separator), do: [head]
+
+  defp intersperse_non_empty_list([head | rest], separator) do
+    [head, separator | intersperse_non_empty_list(rest, separator)]
+  end
+
   ## map_intersperse
 
   defp map_intersperse_list([], _, _),


  """
  @spec intersperse(t, element) :: list
  def intersperse(enumerable, element) do
    list =
      enumerable
      |> reduce([], fn x, acc -> [x, element | acc] end)
      |> :lists.reverse()

    # Head is a superfluous intersperser element
    case list do
      [] -> []
      [_ | t] -> t

  end

  @doc """
  Intersperses `separator` between each element of the enumeration.

  ## Examples

