     /// 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(makeIterator()).flatMap(transform)
-    }
-}
+        return IteratorCursor(self).flatMap(transform)
+    }
+}

    /// Returns the elements of this cursor of cursors, concatenated.
    public func joined() -> FlattenCursor<Self> {
        return FlattenCursor(self)
    }
}


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