Avatar
omochimetaru 2/22/2022 3:40 AM
I'm excited to see this, opening existentials is a major gap in Swift expressiveness. I'm a bit concerned about the need to repeat the protocol name in some P. It does not look that bad in proposal with single-letter names, but I'm afraid that in production code it may be pretty verbose: func authenticate(alternativeAuthenticationProviders: [...
3:41 AM
protocol P { static func make() -> Self {} } func f<T: P>(x: T?) { print(x ?? T.make()) } let x: (any P)? = nil f(x) // It is not valid to substitute [T = Never] here
3:42 AM
Neverは 全てのexistential には代入できるけど 全てのprotocolには代入できないという意見をもらった
3:42 AM
↑たしかに上記コードだと Never.make() -> Never を呼び出す事になって実行時エラーが生じる
3:43 AM
実行時エラーが生じる事と、Neverが bottom type であるかどうかはまた別な気もするけど fatalError 関数とか実在するし