Unlike sum types, such as Swift enums, unions don't have parametricity, because 
(T \union Nil) \union Nil == T \union Nil. This means that things like 
collections containing Optionals don't just work, since it becomes impossible 
for operations like 'find' to distinguish 'nil' as a value in the container 
from 'nil' as a "not found" result. Languages without sum types tend to 
compensate by growing multiple "nil"-like values—ObjC has NSNull, Javascript 
has undefined and null, VB has Null, Nothing, *and* None, and so on.

-Joe

> On May 14, 2016, at 7:33 PM, Cao Jiannan via swift-evolution 
> <swift-evolution@swift.org> wrote:
> 
> 
> It’s kind of same idea of TypeScipt 2, at 46:21 in this video.
> 
> https://channel9.msdn.com/Events/Build/2016/B881
> 
> <屏幕快照 2016-05-15 10.20.36.png>
> 
> 
>> 
>> 2016-2-16 GMT+8 14:36:28
>> Hi all,
>> 
>> I think the best way to solve the either problem is to separate it from 
>> generic. 
>> Optional and Either shouldn’t work the same way of generic type. 
>> It’s just a represent of multiple type in one location.
>> 
>> Using an old friend, Union in C.
>> union {
>>      case firstType
>>      case secondType
>> }
>> 
>> This is the final solution for the sub typing problem of optional.
>> 
>> A  == union(A,A)
>> union(A,B) == union(B,A)
>> B == union(B,B)
>> 
>> B is subtype of union(A,B)
>> A is subtype of union(A,B)
>> union(A,B,C) is subtype of union(A,B,C,D,…)
>> 
>> suppose 
>> a is subclass of A
>> b is subclass of B, then
>>      union(a,B) is subtype of union(A,B)
>>      union(A,b) is subtype of union(A,B)
>>      union(a,b) is subtype of union(a,B)
>>      union(a,b) is subtype of union(A,b)
>> 
>> union can have as many case as possible. e.g., union(A,B,C,D,…)
>> 
>> So the Optional<UITableView> should be union(UITableView, None)
>> and Optional<MyTableVIew> should be union(MyTableView, None), which is 
>> subclass of union(UITableView, None)
>> 
>> This is a final rational solution. I think.
>> 
>> -Jiannan
>> 
> 
> 
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to