 
 func !=<A: Equatable, B: Equatable>(lhs:Set<A>, rhs:Set<B>) -> Bool {
     return lhs.bucket != rhs.bucket
-}+}
+
+func +=<A>(set:Set<A>, item:A) -> Set<A> {
+    if set.contains(item) {
+        return set
+    } else {
+        var arr = set.array
+        arr += item
+        return Set(array:arr)
+    }
+}
+
+func -<A>(lhs:Set<A>, rhs:Set<A>) -> Set<A> {
+    return lhs.minus(rhs)
+}
+
+func ∩<A>(lhs:Set<A>, rhs:Set<A>) -> Set<A> {
+    return lhs.intersect(rhs)
+}
+
+func ∪<A>(lhs:Set<A>, rhs:Set<A>) -> Set<A> {
+    return lhs.union(rhs)
+}

    
}

extension Set : Printable, DebugPrintable {
    var description:String {
    return "\(self.array)"
    }

            arr += key
        }
        return arr
        
    }
    
    var count:Int {
        return bucket.count
        
    }
    
    init(items:A...) {
