Query Evaluator Architectural Abstractions
The architecture of all query evaluators can be described in the following fashion. The types in each case may be more or less precise, representations may vary and be more or less first-class, constraints may be statically or dynamically represented, but to a first-order, the architectures all look like this.
At the highest level, we can consider a query evaluator to be a function:
type Evaluator = Query => F[DataOut]