Racket allows use before definition, but I still like that constraint where possible. It looks like it's possible here.  When I got to C++-pointable-type I had to search for it.

My overall goal in commenting here is to ask can we reorganize these type defintions such that the code follows the define before use pattern.