I think the second (using where clauses to provide a more specific constraint) is probably more consistent with the rest of the language.
switch self {
case .Int:
...
case .Fun(let outer_p, let r) where case .Fun(let inner_p,_) = outer_p, case .Int = inner_p:
...
case .Fun(let p, let r) where case .Fun(_,_) = p:
...
case .Fun(let p, let r):
...
}
Looks pretty good IMO, although I do wonder if we couldn’t drop the second “case”.
- Karl
···
On 23 Apr 2017, at 15:55, Ionuț G. Stan via swift-evolution <swift-evolution@swift.org> wrote:
Hi all,
I'm unsure if this is the appropriate venue to discuss this, so apologies if it's not.
I was wondering if the issue of supporting as-patterns in switch statements has been brought up before or not, and what was the outcome of that.
switch self {
case .Int: return "int"
case .Fun(.Fun(let p), let r): return "(\(p)) -> \(r)"
case .Fun(let p, let r): return "(\(p) -> \(r))"
}
I didn't know you can do that and it seems consistent with other features of the language. However, it doesn't do what I was aiming for. In your example `p` will be bound to a `(Type, Type)`, not a `Type`. So the string result, instead of being `(int -> int) -> int` is actually `((int, int)) -> int`.
Anyway, I've learned something new, so thanks!
···
On 24/04/2017 10:42, Jonathan Hull wrote:
On Apr 23, 2017, at 6:55 AM, Ionuț G. Stan via swift-evolution <swift-evolution@swift.org> wrote:
Hi all,
I'm unsure if this is the appropriate venue to discuss this, so apologies if it's not.
I was wondering if the issue of supporting as-patterns in switch statements has been brought up before or not, and what was the outcome of that.