By ‘calling once’ I meant, calling once at a single permutation chain. If the
chain is escaped or followed by a non-permuting member that returns the same
protocol, you’d have the ability to use all members at the starting point of
the new chain.
permuting protocol T {
func a()
func b()
func c()
func d()
}
var foo: T = …
func boo(_ val: T) -> U {
// Here val escapes the chain and creates a new one
// That means that you can create a local permutation chain here again
val.a() // we can use `a` here
return …
}
boo(foo.a()) // a is immediately invoked here
I imagine this keyword to follow value semantics, so that any possible mutation
is handled locally with a nice extra ability of permutation member chaining.
Did I understood your point correctly here?
Sure the idea needs to be more fleshed out, but I’m curious if that’s something
that we might see in Swift one day. :)
--
Adrian Zubarev
Sent with Airmail
Am 26. Dezember 2016 um 11:50:50, Xiaodi Wu ([email protected]) schrieb:
Given `foo: T` and methods a(), b(), c(), d(), each of which can only be called
once, how can the return value of these methods be represented in the type
system?
That is, if `foo.a()` can be passed as an argument to an arbitrary function of
type `(T) -> U`, either the function cannot immediately invoke a(), in which
case foo is not of type T, or it can immediately invoke a(), in which case your
keyword does not work.
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution