Another commenter already said that Common Lisp indeed does have a type system. It&#x27;s possible to circumvent, but that&#x27;s Lisp for you.<p>You can very easily write an assembler in Haskell that doesn&#x27;t verify any of that stuff statically. Learning to do advanced kinds of static verification with Haskell&#x27;s type system is actually rather difficult, and usually requires language extensions.<p>Using a macro that checks those things seems like it could be a very pragmatic way to provide safety. It might also let you verify properties that would be hard to figure out how to verify using only Haskell-style type checking.<p>Indeed, Haskell programmers often use QuickCheck to do ad-hoc verification of type class laws, for example, since they can&#x27;t be proven in the type system.