Nice! For constraint solving, I can also highly recommend to look into Prolog for some useful ideas.
For example, consider the use case of Rosetta that is shown on the page. In Prolog, we can express it as follows: First, let us define suitable operators, so that we do not need so many parentheses:
[0]: http://con.racket-lang.org/2016/#speakers
[1]: https://www.youtube.com/watch?v=KpDyuMIb_E0&index=25&list=PL...