 /// - A cursor can not be repeated.
 ///
 /// The protocol comes with default implementations for many operations similar
-/// to those defined by Swift's LazySequenceProtocol:
-///
-/// - `func contains(Self.Element)`
-/// - `func contains(where: (Self.Element) throws -> Bool)`
-/// - `func enumerated()`
-/// - `func filter((Self.Element) throws -> Bool)`
-/// - `func first(where: (Self.Element) throws -> Bool)`
-/// - `func flatMap<ElementOfResult>((Self.Element) throws -> ElementOfResult?)`
-/// - `func flatMap<SegmentOfResult>((Self.Element) throws -> SegmentOfResult)`
-/// - `func forEach((Self.Element) throws -> Void)`
-/// - `func joined()`
-/// - `func map<T>((Self.Element) throws -> T)`
-/// - `func reduce<Result>(Result, (Result, Self.Element) throws -> Result)`
+/// to those defined by Swift's Sequence protocol: `contains`, `dropFirst`,
+/// `dropLast`, `drop(while:)`, `enumerated`, `filter`, `first`, `flatMap`,
+/// `forEach`, `joined`, `joined(separator:)`, `max`, `max(by:)`, `min`,
+/// `min(by:)`, `map`, `prefix`, `prefix(while:)`, `reduce`, `reduce(into:)`,
+/// `suffix`.
 public protocol Cursor : class {
     /// The type of element traversed by the cursor.
     associatedtype Element

    
    /// Returns a cursor over the concatenated results of mapping transform
    /// over self.
    public func flatMap<SegmentOfResult: Cursor>(_ transform: @escaping (Iterator.Element) throws -> SegmentOfResult) -> FlattenCursor<MapCursor<IteratorCursor<Self.Iterator>, SegmentOfResult>> {
        return IteratorCursor(self).flatMap(transform)
    }
}

        defer { index += 1 }
        return (index, element)
    }
}

/// A cursor whose elements consist of the elements of some base cursor that
/// also satisfy a given predicate.
public final class FilterCursor<Base: Cursor> : Cursor {
    private let base: Base
    private let isIncluded: (Base.Element) throws -> Bool
    
    init(_ base: Base, _ isIncluded: @escaping (Base.Element) throws -> Bool) {
        self.base = base
        self.isIncluded = isIncluded
