     false
   end
 
+  ## concat
+
+  defp concat_list([h | t]) when is_list(h), do: h ++ concat_list(t)
+  defp concat_list([h | t]), do: concat_enum([h | t])
+  defp concat_list([]), do: []
+
+  defp concat_enum(enum) do
+    fun = &[&1 | &2]
+    enum |> reduce([], &reduce(&1, &2, fun)) |> :lists.reverse()
+  end
+
   # dedup
 
   defp dedup_list([value | tail], acc) do


  """
  @spec concat(t) :: t
  def concat(enumerables) do
    fun = &[&1 | &2]
    enumerables |> reduce([], &reduce(&1, &2, fun)) |> :lists.reverse()
  end

  @doc """

  end

  def concat(left, right) do
    concat_enum([left, right])
  end

  @doc """
