[swift-evolution] Swift Generic Subtype Problem
Developer
devteam.codafi at gmail.com
Mon Feb 15 23:20:48 CST 2016
OK, one type parameter then
struct IO<A> { //... }
struct Observer<A> {
let unObserver : A -> IO<()>
}
Point is, if you're going to introduce variance it has to go both ways. That means you'll need something more in the language than a typing rule that just works in this one small case.
~Robert Widmann
2016/02/16 0:00、Cao Jiannan <frogcjn at 163.com> のメッセージ:
> OK, let narrow the problem.
>
> if B is subclass of A
> Optional<B> is subclass of Optional<A>
>
> Not allow multiple type template.
>
>
>
>
>> 在 2016年2月16日,12:29,Developer <devteam.codafi at gmail.com> 写道:
>>
>> OK, so you have covariance covered, now what about contravariance? Surely a structure like this
>>
>> struct Arrow<A, B> {
>> let unArrow : A -> B
>> }
>>
>> should be contravariant in its first argument and covariant in its second.
>>
>> ~Robert Widmann
>>
>> 2016/02/15 22:48、Cao Jiannan via swift-evolution <swift-evolution at swift.org> のメッセージ:
>>
>>>
>>> Hi all,
>>> I want to discuss on a problem about optional generic sub-typing.
>>>
>>> This is my suggesion.
>>>
>>> if B is subclass of A
>>> Either<B,B> is subclass of Either<A,A>, Either<A,B>, Either<B,A>
>>> Either<B,A> is subclass of Either<A,A>
>>> Either<A,B> is subclass of Either<A,A>
>>>
>>>
>>> Why? Let’s see an example code in a real project:
>>>
>>>
>>>
>>> Here is a protocol type for some UIViewController,
>>> protocol SegueHandlerType {
>>> var tableView: UITableView! { get }
>>> }
>>>
>>> so the UITableViewController can conform to the protocal
>>> extension UITableViewController : SegueHandlerType {
>>> }
>>>
>>> It's great!
>>> What if the tableView is a subclass UITableView?
>>> like:
>>> class MyTableView : UITableView {
>>> }
>>>
>>> MyTableViewController {
>>> @IBOutlet var tableView: MyTableView!
>>> }
>>>
>>> Then
>>> extension MyTableViewController:SegueHandlerType {
>>>
>>> }
>>> will trigger a compiler error.
>>>
>>> So the Optional needs a subclass system.
>>> Or to say, that the template system needs a subclass system.
>>>
>>> Optional<UITableView> should be the super type of Optional<MyTableView>
>>> Array<UITableView> should be the super type of Array<MyTableView>
>>>
>>> https://forums.developer.apple.com/message/101646#101646
>>>
>>>
>>>
>>>
>>> Thanks!
>>>
>>> Jiannan, Cao
>>>
>>>
>>>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org
>>> https://lists.swift.org/mailman/listinfo/swift-evolution
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160216/62e931ed/attachment.html>
More information about the swift-evolution
mailing list