 extension Indirect : Pure where Wrapped : Pure { }
 @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
 extension Array : Pure where Element : Pure { }
-@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
-extension ArraySlice : Pure where Element : Pure { }
+//@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
+//extension ArraySlice : Pure where Element : Pure { }
 @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
 extension ContiguousArray : Pure where Element : Pure { }
 @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
 extension Set : Pure where Element : Pure { }
-@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
-extension CollectionOfOne : Pure where Element : Pure { }
-@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
-extension EmptyCollection : Pure where Element : Pure { }
+//@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
+//extension CollectionOfOne : Pure where Element : Pure { }
+//@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
+//extension EmptyCollection : Pure where Element : Pure { }
 @available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
 extension Dictionary : Pure where Key : Pure, Value : Pure { }
 

#if canImport(Concurrency)
import _Concurrency

/// A pure type is a marker for an immutable value that can be used safely from multiple threads.
///
/// This conforms to `Concurrency.Sendable` in Swift 5.5.
public protocol Pure : Concurrency.Sendable {
}

#else

/// A pure type is a marker for an immutable value that can be used safely from multiple threads.
///
/// This will conform to `Concurrency.Sendable` in Swift 5.5.
public protocol Pure { }

#endif

extension String : Pure { }
extension Double : Pure { }

extension UInt32 : Pure { }
extension UInt64 : Pure { }

// Collection & OneOf types are Pure when their wrapped types are all Pure

@available(macOS 12, iOS 15, tvOS 15, watchOS 8, *)
extension Optional : Pure where Wrapped : Pure { }
