This is a pure Haskell implementation of Datalog, as a library
Datalog is a logic language that allows for recursive database queries. This implementation is distinguished from many others in that it is embeddable as a library in other (Haskell) programs. A driver program that operates on textual input is also planned.
It is currently just a semi-naive evaluator, but it is reasonably efficient. The implementation is currently in its early stages but it seems to produce reasonably correct results. See the test suite for some details.
- Magic sets transformation
- Optional BDD backend for a subset of queries
- Rewrite literals like f(X,X) into f(X,Y), X=Y. A few internals assume that the same variable doesn't appear twice in a literal.