Hello Swift community, before Swift 3 drops I’d like to discuss if it is reasonable to consider to create a standalone type to drop/seal the T.Type magic?
However this change does not play well with the proposal of dropping the .self compiler magic. Some bikeshedding: public struct Type<T> : Hashable { // Seal the `.Type` magic into this standalone type. // Disallow `.Type` usage elsewhere public let sealed: T.Type public var hashValue: Int { /* implement somehow */ } public init() { // Or do it somehow different for the sake of dropping `.self` magic self.sealed = T.self } } public func ==<T>(lhs: Type<T>, rhs: Type<T>) -> Bool { return lhs.hashValue == rhs.hashValue } Downside of this approach is the accessibility of the .Type instance: protocol Initializable { init() } func foo<T : Initializable>(type: Type<T>) -> T { // It would be nice if we could use `type.init()` instead, but than we // would need more compiler magic :/ return type.sealed.init() } I couldn’t come up with a better name than sealed, if anyone has a better idea feel free to share your thoughts. Remember this is a discussion and not (yet) a detailed proposal, where everyone can provide feedback and bikeshedding for a better design. -- Adrian Zubarev Sent with Airmail
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution