I think it would be great if throws -> Foo
were a syntactic sugar of -> Result<Foo>
. Without affecting existing codes, it makes it possible to go back and forth between Manual Propagation and Automatic Propagation seamlessly.
// I wish if the first `makeFoo` were
// a syntactic sugar of the second one
func makeFoo(x: Int) throws -> Foo {
guard ... else {
throw FooError()