     else
       Enumerable.reduce(set2, {:cont, set1}, fn v, acc ->
         {:cont, target1.delete(acc, v)}
-      end) |> elem(1)
+      end)
+      |> elem(1)
     end
   end
 

    Enumerable.reduce(set1, {:cont, true}, fn member, acc ->
      case target2.member?(set2, member) do
        true -> {:cont, acc}
        _    -> {:halt, false}
      end
    end) |> elem(1)
  end

  defp unsupported_set(set) do
    raise ArgumentError, "unsupported set: #{inspect set}"
  end
end

    end
  end

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