Sent from my iPad

> On Jul 1, 2016, at 1:59 PM, David Sweeris via swift-evolution 
> <[email protected]> wrote:
> 
> It’s already on that list. That’s what Joe was quoting from earlier.
> 
> Everybody (I hope) understands the “something the type system cannot […] 
> support” part, but if the “should not” bit were expanded a bit so that people 
> would know why it shouldn’t be supported…

I would also find elaboration of the rationale here very interesting (as well 
as the reason this "cannot" be supported by Swift's type systems while 
languages like Ceylon don't have a problem supporting it).  I know the core 
team has very good reasons for their position on this but I don't have a clear 
understanding of what they are.

I have run into use cases where unions would be the most elegant solution and 
currently possible solutions require boilerplate.  This makes me wonder why the 
more elegant solution doesn't have a future in Swift.

> 
> The closest I ever saw to a reason was a reply from back in the “Contiguous 
> Variables (A.K.A. Fixed Sized Array Type)” thread 
> (http://article.gmane.org/gmane.comp.lang.swift.evolution/6363)
> 
>> Types aren't just bags of operations, which means that taking the 
>> intersection of arbitrary types isn't meaningful. Similarly, generics aren't 
>> templates to be instantiated, meaning that there has to be a run-time 
>> representation of a "value of intersection type".
>> 
>> The constructs that carries the right meaning in Swift are protocols, and in 
>> theory you could intersect the protocols of the various types. In practice, 
>> though, the current model doesn't have a good way to actually do this, since 
>> not all protocols can be used as types of values, and finding the 
>> protocol-intersection of N types is a needless amount of extra work for the 
>> compiler anyway.

Thanks for digging this up.  It's interesting to note that the use cases I have 
run into don't rely on exposing intersecting operations, only the ability to 
store a value of one of n types and switch to uncover the underlying value.  I 
wonder if the rationale for avoiding unions is strictly related to discovering 
and exposing the intersecting operations of the types.  Maybe a weaker kind of 
union that doesn't expose any operations other than casting and pattern 
matching would be more acceptable.

I agree with the statement that protocols should be used when the goal is to 
abstract over common operations.

> 
> Which, at least to me, isn’t very convincing. In the author’s defense, I 
> don’t think the post was intended to be a rigorous rebuttal of the idea.
> 
> - Dave Sweeris
> 
>> On Jul 1, 2016, at 12:47 PM, L. Mihalkovic via swift-evolution 
>> <[email protected]> wrote:
>> 
>> @core team: should the be added to the list of common rejections for now or 
>> does it stand a chance in the next 2 or 3 versions?
>> 
>> Regards
>> LM
>> (From mobile)
>> 
>>> On Jul 1, 2016, at 11:06 AM, Cao Jiannan via swift-evolution 
>>> <[email protected]> wrote:
>>> 
>>> https://github.com/frogcjn/swift-evolution/blob/master/proposals/xxxx-union-type.md
>>> 
>>> Hi,
>>> 
>>> I'm now officially proposal the union type feature for Swift. Please see:
>>> 
>>> 
>>> https://github.com/apple/swift/commit/eb7311de065df7ea332cdde8782cb44f9f4a5121
>>> Introduction
>>> 
>>> Add union type grammar, represents the type which is one of other types.
>>> 
>>> var stringOrURL: String | URL = "https://www.apple.com";
>>> 
>>> 
>>> I would be thankful if someone support this idea and give some advice. 
>>> Thanks!
>>> 
>>> 
>>> --
>>> Jiannan
>>> 
>>> 
>>> _______________________________________________
>>> 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
> 
> _______________________________________________
> 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