There&#x27;s Typed Racket and Clojure&#x27;s Core.Typed. In Common Lisp you can `declaim`&#x2F;`declare` attributes to functions and values, and many implementations allow `declaim`-ing types. It&#x27;s also common for them to propagate and check type assertions at compile-time e.g.<p><pre><code>    (defun foo (bar)
      (if (numberp bar)
        (car bar)
      x))
</code></pre>
should error out in SBCL because BAR is a number but CAR takes values.