   @opaque t(value) :: %__MODULE__{map: %{optional(value) => []}}
   @type t :: t(term)
 
+  # TODO: Remove version key on Elixir 2.0
   defstruct map: %{}, version: 2
 
   @doc """


  defp filter_not_in([key | rest], map2, acc) do
    case map2 do
      %{^key => _} ->
        filter_not_in(rest, map2, acc)

      _ ->
        filter_not_in(rest, map2, [{key, @dummy_value} | acc])
    end
  end


  end

  defimpl Collectable do
    def into(map_set) do
      fun = fn
        list, {:cont, x} -> [{x, []} | list]
        list, :done -> %{map_set | map: Map.merge(map_set.map, Map.new(list))}
        _, :halt -> :ok
      end

      {[], fun}
    end
  end

