The resolver is immutable, making it simpler to reason about. Only the cache can change inside the resolver.
A method registry is created. Functions can be added to it, but can never be removed, making it simpler to reason about.
Thus we simplify the whole logic of list swapping, cache invalidation and such. The resolver is fully in charge of doing whatever it sees fit with the inputs, without having other concepts getting in the way.
If one is brave enough, by changing only the Signature class + the resolver, it should be enough to support keyword arguments.
Thus we simplify the whole logic of list swapping, cache invalidation and such. The resolver is fully in charge of doing whatever it sees fit with the inputs, without having other concepts getting in the way.
If one is brave enough, by changing only the Signature class + the resolver, it should be enough to support keyword arguments.
Closes #92