The purpose of this issue is to setup a trait-solving structure that can change between the current trait solver and the type checker, allowing for us to easily switch to the chalk-style solving when a command line flag is given.
Currently, the interface between the two is the FulfillmentContext, so we have a relationship like this:
[ type checker ] --> [ fulfillment context ] --> [ existing trait solver ]
The first phase then is to introduce another layer in between, let's call it the TraitEngine:
[ type checker ] --> [ TraitEngine ] --> [ fulfillment context ] --> [ existing trait solver ]
When we're done with this phase, everything should work exactly the same, but that the type checker never interacts directly with the fulfillment context.
The purpose of this issue is to setup a trait-solving structure that can change between the current trait solver and the type checker, allowing for us to easily switch to the chalk-style solving when a command line flag is given.
Currently, the interface between the two is the
FulfillmentContext, so we have a relationship like this:The first phase then is to introduce another layer in between, let's call it the
TraitEngine:When we're done with this phase, everything should work exactly the same, but that the type checker never interacts directly with the fulfillment context.