Hey Brent,

Sorry for being a bit dense about this, but...

> 
>    NSObject
>    NSResponder: NSObject
>    NSView: NSResponder
> 
> `Type<NSResponder>` is a `Subtype<NSObject>`, but not a `Subtype<NSView>`.
> 
> Thus, this reads correctly:
> 
>    let aType: Subtype<NSResponder> = NSView.self
> 
> Whereas this does not:
> 
>    let aType: Supertype<NSResponder> = NSView.self


Calling it SuperTypeOf<T> and SubTypeOf<T> would make it less confusing as that 
is how I read it in my mind in your last example.

Sent from my iPhone

On 30 Sep 2016, at 04:57, Brent Royal-Gordon via swift-evolution 
<[email protected]> wrote:

>> On Sep 29, 2016, at 8:14 PM, Xiaodi Wu via swift-evolution 
>> <[email protected]> wrote:
>> 
>> I'm confused by this explanation.Today, `type(of:)` is the new 
>> `.dynamicType`. Is this proposal suggesting a silent change so that it now 
>> returns the static type? If so, why (particularly when you explain that this 
>> is often *not* what you would want)?
> 
> I'm short-handing the names to talk about the return values. In other words, 
> I assume that, if we have both `type(of:)` and `subtype(of:)`, their 
> signatures would be:
> 
>    func type<T>(of: T) -> Type<T>
>    func subtype<T>(of: T) -> Subtype<T>
> 
> And I'm saying that, given these names, `type(of:)` is confusing and 
> near-useless, whereas `subtype(of:)` is what you almost always want.
> 
> We *could*, of course, have a function called `type(of:)` which returned 
> `Subtype<T>` and had the semantics I'm referring to as `subtype(of:)`. A name 
> is just a name.
> 
>> I'm also somewhat puzzled about the proposed design. This proposal explains 
>> that Subtype<T> should be a supertype of Type<T> and its subtypes. Why is a 
>> supertype named Subtype?
> 
> Because a type's name should describe the *instances*; that's why you don't 
> put "Class" at the end of all of your class names. (It's also why we're 
> proposing `Type<T>` instead of `Metatype<T>`.)
> 
> Every instance of `Subtype<T>` is the type instance for a subtype of `T`. For 
> instance, in this hierarchy:
> 
>    NSObject
>    NSResponder: NSObject
>    NSView: NSResponder
> 
> `Type<NSResponder>` is a `Subtype<NSObject>`, but not a `Subtype<NSView>`.
> 
> Thus, this reads correctly:
> 
>    let aType: Subtype<NSResponder> = NSView.self
> 
> Whereas this does not:
> 
>    let aType: Supertype<NSResponder> = NSView.self
> 
> -- 
> Brent Royal-Gordon
> Architechies
> 
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to