型推論に対する明示的な記法みたいに、 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のような)だったりする場合があることですよね。