You're correct that they're duals. I touched on this briefly in "future directions". It would be great to eventually support some Foo
as an argument type as well, which would let you write:
func useFoo(_ foo: some Foo) { /* ... */ }
func makeFoo() -> some Foo { /* ... */ }
making the duality more apparent.