Static Type Checking in Common Lisp
Of course you can invoke a type checker inside a language with compile time macros. Did anyone ever doubt that?The interesting question is: what does that type checker actually check? How does it deal with normal lisp functions? How is non-trivial data represented? And what happens when it stumbles upon a runtime macro?And, on a more practical side, how does it access the environment?