     Iterator(iterator: base.makeAsyncIterator(), predicate: predicate)
   }
 }
+
+extension AsyncThrowingRemoveDuplicatesSequence: Sendable where Base: Sendable, Base.Element: Sendable, Base.AsyncIterator: Sendable { }
+extension AsyncThrowingRemoveDuplicatesSequence.Iterator: Sendable where Base: Sendable, Base.Element: Sendable, Base.AsyncIterator: Sendable { }

  let base: Base

  @usableFromInline
  let predicate: (Element, Element) async throws -> Bool
  
  init(_ base: Base, predicate: @escaping (Element, Element) async throws -> Bool) {
    self.base = base
    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)
  }
}
