Avatar
omochimetaru 3/12/2019 2:28 AM
型推論に対する明示的な記法みたいに、 opaque typeに対する明示的な記法として、caller側で、 var a: some Foo (S.foo1) = s.foo1() let b: some Foo (S.foo2) = s.foo2() a = b // 納得できる代入エラー (edited)
2:28 AM
みたいに書けたらどうでしょう?
2:30 AM
protocolによるassociated typeでfoo1とfoo2が同じsome Fooとして拘束されている場合は var a: some Foo (P.FooType) = s.foo1() let b: some Foo (P.FooType) = s.foo2() a = b と書かないとだめ。 (edited)
2:31 AM
opaque type の真の型が難しいのは、func固有の型だったり、型固有の型(inner typeのような)だったりする場合があることですよね。
2:32 AM
とすると、caller側でそのコンテキストを明記しておいてそれをコンパイラが検証すれば
2:32 AM
わかってあってればあってることが確認できる。