The reason I switched from Scheme to Common Lisp was because I wanted type checking more than I wanted hygienic macros or case-sensitive (by default) symbols.
Being able to do something like:
(deftype Digit ()
'(Integer 0 9)
(deftype Digit-Vector (&optional (length '*))
`(Vector Digit ,length))
(defun integer->digit-vector (integer)
(declare (type Integer integer))
(coerce (loop :for character :across (format nil "~D" integer)
:for digit := (char-digit-p character)
:when digit
:collect digit)
'Digit-Vector))
And then have SBCL warn me if I try to use the resulting Digit-Vector in a function which wants a String (for example) is useful.