You start with a Resolver, call Resolver.Execute, and up with a Resolved (which happens to be the same object, but that's really an implementation detail). But the type system doesn't prevent you making further calls to Resolver -- that's one of the illegal uses we'd like to prevent, if I understand the example.
It might work in a language with linear types or some concept of ownership. Execute() would take ownership of the Resolver and prevent it being called again.
It might work in a language with linear types or some concept of ownership. Execute() would take ownership of the Resolver and prevent it being called again.