Avatar
ちゃんと言語化出来ていなかったと思うので、もう一度説明すると
  • Result<T, Never>とTを暗黙変換するのは流石にきついものがある
  • しかしResultを無理くり拡張するのは暗黙変換より筋が良いかと言うと…
  • 故に、Resultを返す側のIFとして、Failure==Neverのときは直接Tを返すインターフェイスのオーバーロードであったほうが末端の利用者にとっては嬉しい場面が多そうだ。
  • のでnot throwsのget()が存在しないんじゃないか
という推論です。でもCombineのextensionとか見てると、not throwsのget()はproposal書けば案外すんなり通るんじゃないかなとも思えてきました。
(edited)
7:48 AM
例えばこんな感じで、Resultを返す方にdisfavoredOverloadをつけておけば、NeverのときにResultでないTを優先出来たりするので。 struct MyClass<T, Failure: Error> { @_disfavoredOverload func getResponse() -> Result<T, Failure> { fatalError() } } extension MyClass where Failure == Never { func getResponse() -> T { fatalError() } } let t = MyClass<Int, Never>().getResponse()
7:48 AM
Resultが欲しい場面はクロージャの引数とかなんですが、同じ使い方で成り立つ (edited)