I wonder if it might be possible to feed predicates from clojure.spec to the inference engine/type checker from the Shen java port to gain static type checking. I wish I had more time to work on this kind of fundamental research, but alas I'm merely a working programmer schlepping data to and fro.
Unfortunately I can't help by now but I guess there are people willing to.
Maybe you should also reference this in other clojure channels?
It tries to do static analysis of your Clojure code based on your specs. My understanding of it is that it considers equal predicates to be a type. The challenge is knowing that two predicates are equal, or that one is a subtype of the other. I don't think its very dmart about that yet. But just cobsidering each spec as a type can catch a few bugs.