 
   """
   @spec put(t(val), new_val) :: t(val | new_val) when val: value, new_val: value
-  def put(%MapSet{map: map} = map_set, value) do
-    %{map_set | map: Map.put(map, value, true)}
+  def put(%MapSet{data: map} = map_set, value) do
+    %{map_set | data: Map.put(map, value, [])}
   end
 
   @doc """


  """
  @spec disjoint?(t, t) :: boolean
  def disjoint?(%MapSet{map: map1}, %MapSet{map: map2}) do
    {map1, map2} = order_by_size(map1, map2)

    map1

      |> Enum.to_list
      |> new_from_list_transform(transform, [])

    %MapSet{data: map}
  end

  defp new_from_list([], acc) do
    :maps.from_list(acc)
  end
  defp new_from_list([item | rest], acc) do
    new_from_list(rest, [{item, []} | acc])
  end

  defp new_from_list_transform([], _fun, acc) do
    :maps.from_list(acc)
  end
  defp new_from_list_transform([item | rest], fun, acc) do
    new_from_list_transform(rest, fun, [{fun.(item), []} | acc])
  end

  @doc """
