Right, schema's gonna throw what a schema's gonna throw.

The code above is actually called by a wrapping function.  There could be a try/catch around the call to the above code so that we could add a more meaning error message.  It looks like they're using ex-info to put the exception metadata: https://github.com/Prismatic/schema/blob/master/src/clj/schema/macros.clj#L228. We could pull out the useful bits and wrap it in an exception that indicates user error or something.  Another option would be to make a validate call inside of the function, rather than the declaration.