The problem in a lisplike is how to properly embed checks in destructuring binds. Since code represenetation == data representation, it's rather difficult to do:
(defpat foo
(x (isa x 'sym))
(list x isa))
As it is, I'm already forbidding one symbol from being used for variables: quote. This is so that I can support: