     var iterator: Base.AsyncIterator
 
     @usableFromInline
-    var predicate: (Element, Element) async -> Bool
+    let predicate: @Sendable (Element, Element) async -> Bool
 
     @usableFromInline
     var last: Element?
 
     @inlinable
-    init(iterator: Base.AsyncIterator, predicate: @escaping (Element, Element) async -> Bool) {
+    init(iterator: Base.AsyncIterator, predicate: @escaping @Sendable (Element, Element) async -> Bool) {
       self.iterator = iterator
       self.predicate = predicate
     }

    var iterator: Base.AsyncIterator

    @usableFromInline
    var predicate: (Element, Element) async throws -> Bool

    @usableFromInline
    var last: Element?

    @inlinable
    init(iterator: Base.AsyncIterator, predicate: @escaping (Element, Element) async throws -> Bool) {
      self.iterator = iterator
      self.predicate = predicate
    }

}

extension AsyncSequence {
  public func removeDuplicates(by predicate: @escaping @Sendable (Element, Element) async -> Bool) -> AsyncRemoveDuplicatesSequence<Self> {
    return AsyncRemoveDuplicatesSequence(self, predicate: predicate)
  }
  
  public func removeDuplicates(by predicate: @escaping @Sendable (Element, Element) async throws -> Bool) -> AsyncThrowingRemoveDuplicatesSequence<Self> {
    return AsyncThrowingRemoveDuplicatesSequence(self, predicate: predicate)
  }
}
