An easily embeddable, futures-friendly logic engine.
If you want to understand more about this implementation, see How to replace failure by a list of successes by Philip Wadler. This code does not follow that paper exactly (since we can encounter errors during resolution), but the general approach is the same.
A single rule or fact.
An execution environment.
A literal value, e.g.
A collection of rules or facts (as clauses).
An error loading a file.
An error during resolution.
A term, e.g.