There&#x27;s Typed Racket [1] and for Clojure there&#x27;s core.typed [2]which do pretty much that. For Clojure there&#x27;s also Schema [3], which is a bit lighter weight (it&#x27;s not a full type system), but still gets you some of the benefits like validation and documentation.<p>[1] <a href="https:&#x2F;&#x2F;docs.racket-lang.org&#x2F;ts-guide&#x2F;" rel="nofollow">https:&#x2F;&#x2F;docs.racket-lang.org&#x2F;ts-guide&#x2F;</a>
[2] <a href="https:&#x2F;&#x2F;github.com&#x2F;clojure&#x2F;core.typed" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;clojure&#x2F;core.typed</a>
[3] <a href="https:&#x2F;&#x2F;github.com&#x2F;plumatic&#x2F;schema" rel="nofollow">https:&#x2F;&#x2F;github.com&#x2F;plumatic&#x2F;schema</a>