   end
 
   defp bucket_difference([], bucket) do
-    []
+    { [], 0 }
   end
 
   defp bucket_difference(bucket, []) do
-    bucket
+    { bucket, 0 }
   end
 
   defp bucket_put([m|_]=bucket, { :put, member }) when m > member do

    end
  end

  defp set_difference(ordered(bucket: bucket1), ordered(bucket: bucket2)) do
    new(bucket_difference(bucket1, bucket2))
  end

  defp set_difference(trie(size: size1) = set1, set2) do

  end

  defp bucket_intersect([m1 | _] = bucket1, [m2 | bucket2]) when m1 > m2 do
    bucket_intersect(bucket1, bucket2)
  end

  defp bucket_intersect([_ | bucket1], bucket2) do
    bucket_intersect(bucket1, bucket2)
  end

  defp bucket_intersect([], _) do
