Clojure にはどのような種類の安全な言語構成要素があるのでしょうか?
Luke VanderHart と Stuart Sierra による「Practical Clojure」を数回読んだことがありますが、Clojure は (他の Lisp と同様に) コンパイル時の検証チェックを真剣に受け止めていないという明確な印象を今でも持っています。型安全性は、正しいセマンティクスのコンパイル時のチェックを行うための (非常に一般的な) 戦略の 1 つにすぎません
私がこの質問をしているのは、私が間違っていることを証明したくてたまらないからです。文字列を期待する関数が整数のリストなどで呼び出されないことを (実行時ではなくコンパイル時に) 検証するために、clojure で利用できる設計パターンにはどのようなものがありますか?
また、Paul Graham のような非常に賢明な人々が Lisp を公然と提唱し、その上に低レベル言語からすべてを実装できるようにすることを読んだことがあります (ほとんどの人は、言語自体がその上に再実装されていると言うでしょう)。本当なら、型チェックのようなものは簡単にできるはずです。clojure や他の Lisp に型システム (またはそのような型システムを実装する機能) が存在すると思いますか?それによって、プログラマーは検証チェックを実行時からコンパイル時、さらには設計時までオフセットすることができます。時間?