Typed Clojure preserves Clojure's strengths, enhancing many of them with the safety of static type checking.
Protect your Clojure programs from Java by using Typed Clojure to help use external Java libraries correctly.Watch how Java interop works
Typed Clojure has great support for checking usages of keyword maps. Useful map operations are understood by the type checker, including keyword lookups, adding/removing keys and merging maps.Watch a hangout on Heterogeneous Maps
Typed Clojure uses simple yet inexpensive and effective inference techniques to reason about local program flow.Read about occurrence typing
Typed Clojure supports local type inference similar to Scala. Annotations are required for top-level vars, complicated macros, and loop/function parameters, while many other things can be inferred, like local let bindings, including nested destructuring and function return types.Read about inference in Typed Clojure
Type checking is never run implicitly as part of evaluation. Typed Clojure provides a simple interface of functions to run the type checker: use them at the REPL, in a unit test, at the command line, integrate it with your IDE ... the choice is yours!See the Typed Clojure Leiningen plugin