   defmacrop target(set) do
     quote do
       case unquote(set) do
-        %module{} ->
-          module
-        set ->
-          unsupported_set(set)
+        %module{} -> module
+        set -> unsupported_set(set)
       end
     end
   end

    end
  end


  def intersection(set1, set2) do
    target1 = target(set1)
    target2 = target(set2)

    else
      Enumerable.reduce(set1, {:cont, target1.new}, fn v, acc ->
        {:cont, if(target2.member?(set2, v), do: target1.put(acc, v), else: acc)}
      end)
      |> elem(1)
    end
  end

  def member?(set, value) do
    target(set).member?(set, value)
  end

  def put(set, value) do
    target(set).put(set, value)
