     }
 }
 
+extension SequenceType where Generator.Element : Equatable {
+    /// Return `true` iff all elements of `other` are contained in `self`.
+    public func contains<S: SequenceType where S.Generator.Element == Generator.Element>(other: S) -> Bool {
+        return other.all { self.contains($0) }
+    }
+}
+
 extension SequenceType {
     public func each(@noescape action: (Self.Generator.Element) -> Void) -> Void {
         for element in self {

extension CollectionType where Generator.Element : Equatable {
    public func find(element: Self.Generator.Element) -> Self.Generator.Element? {        
        return indexOf(element).map { self[$0] }
    }
}


// MARK: Dictionary

extension Dictionary {
    /// Update the values stored in the dictionary with the given key-value pairs, or, if a key does not exist, add a new entry.
    public mutating func extend<S: SequenceType where S.Generator.Element == Generator.Element>(newElements: S) -> [Value] {
        return newElements.flatMap { 
            (k, v) in updateValue(v, forKey: k) 
        }
    }
}

/// Return a new dictionary created by extending the lef-side dictionary with the elements of the right-side dictionary
public func + <K, V, S: SequenceType where S.Generator.Element == (K, V)>(lhs: [K: V], rhs: S) -> [K: V] {
    var result = lhs
    result.extend(rhs)
