     >(sequence: S) -> Bool { return !sequence.contains(self.contains) }
 }
 
+// MARK: More effecient implementations
+
+extension Trie {
+  public func map<S : SequenceType>(@noescape transform: [Element] -> S) -> Trie<S.Generator.Element> {
+    return Trie<S.Generator.Element>(contents.map(transform))
+  }
+}
+
 extension Trie {
   public func flatMap<S : SequenceType>(@noescape transform: [Element] -> S?) -> Trie<S.Generator.Element> {
     var ret = Trie<S.Generator.Element>()

      for element in sequence where contains(element) { ret.insert(element) }
      return ret
  }
}

extension Trie {
  public func isDisjointWith<
    S : SequenceType where
    S.Generator.Element : SequenceType,

    >(sequence: S) {
      for toRemove in sequence { remove(toRemove) }
  }

  public func intersect<
    S : SequenceType where
    S.Generator.Element : SequenceType,
