 }
 
 extension CollectionType where Index: BidirectionalIndexType {
-    /// Returns the `SubSequence` at the specified index iff it is within bounds, otherwise nil.
+    /// Returns the `SubSequence` at the specified range iff it is within bounds, otherwise nil.
     public func at(range: Range<Index>) -> SubSequence? {
         return indices.contains(range) ? self[range] : nil
     }

}

extension RangeReplaceableCollectionType {
    public mutating func appendAll(collection: [Self.Generator.Element]) {
        appendContentsOf(collection)
    }
}

extension SequenceType where Self.Generator.Element: Hashable {
    /// Return an `Array` containing only the unique elements of `self` in order.
    public func unique() -> [Self.Generator.Element] {
        var seen: [Self.Generator.Element: Bool] = [:]
        return filter { seen.updateValue(true, forKey: $0) == nil }
    }
}

    ///
    /// - returns: Return an `Array` containing only the unique elements of `self`,
    /// in order, that satisfy the predicate `uniqueProperty`.
    public func unique<T: Hashable>(uniqueProperty: (Generator.Element) -> T) -> [Generator.Element] {
        var seen: [T: Bool] = [:]
        return filter { seen.updateValue(true, forKey: uniqueProperty($0)) == nil }
    }
