Typed Clojure's type system is too rich to avoid top-level annotations. It's a similar situation to Scala.
I believe it has to do with features like subtyping and method overloading which cause havok for global type inference. Found a paper here: http://ropas.snu.ac.kr/lib/dock/HoMi1995.ps