T_T I’ve never said it will compile (the second time now), I’ve said couple of 
times its just future bikeshedding with variadic generics from the generics 
manifesto and variadic enum cases that I come up with.



-- 
Adrian Zubarev
Sent with Airmail

Am 1. Juli 2016 um 15:33:41, Cao Jiannan via swift-evolution 
([email protected]) schrieb:

I can't compile your code. I'm really not sure your code will pass the complex 
generic check 🙃

Union version more complex or generic version?
I think union version is more normal.
For example:

typealias ABC = A | B | C

typealias ABCD = ABC | D

we just use an existed type ABC to construct ABCD

But how about generic wrap?
Bikeshedding:

// we generate the boundary with `A | B` or directly OneOf<A, B>
enum OneOf<...T> {

    ...case $#(T)

    // Bikeshedding variadic enum casses:
    // we might need an index to set the value?
    init(index: Int, value: T) {

        self = .$index(value)
    }
}

/// Usage:
/// A | B | C == OneOf<A, B, C>
func |<T, U>(_: T.Type, _: U.Type) -> OneOf<T, U>.Type {

    // I believe the usage of `type` like this was prposed by Joe Groff
    // I also use the proposal to remove `.self` magic here
    return OneOf<T, U>
}

// Here is how to merge OneOf into a single dimension
func |<...T, U>(_: OneOf<...T>.Type, _: U.Type) -> OneOf<...T, U>.Type {

    // Copy and merge types into the new `OneOf` type
    return OneOf<...T, U>
}

func |<T, ...U>(_: T.Type, _: OneOf<...U>.Type) -> OneOf<T, ...U>.Type {

    // Copy and merge types into the new `OneOf` type
    return OneOf<T, ...U>
}

func |<...T, ...U>(_: OneOf<...T>.Type, _: OneOf<...U>.Type) -> OneOf<...T, 
...U>.Type {

    // Copy and merge types into the new `OneOf` type
    return OneOf<...T, ...U>
}
Your example will become:

typealias ABC = A | B | C // or OneOf<A, B, C>
typealias ABCD = ABC | D // merging lhs OneOf with D to OneOf<A, B, C, D>
Mission accomplished.


在 2016年7月1日,17:06,Cao Jiannan <[email protected]> 写道:

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

Reply via email to