         return Set(array: current)
     }
     
+    func add(item:A) -> Set<A> {
+        if contains(item) {
+            return self
+        } else {
+            var arr = array
+            arr += item
+            return Set(array:arr)
+        }
+    }
+    
     func filter(f:(A -> Bool)) -> Set<A> {
         var array = Array<A>()
         for x in self {

    
}

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


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)
}
