some lisp dialects like common lisp or clojure do support various forms of type declarations and some compilers (cmucl and related) use these declarations together with type inference to enable various optimizations and also limited forms of compile time type checks