It seems like the main purpose of the exception-based validation function `check` is to provide an explanation for failures. Could this have also been achieved by returning an error object with the same information in it? This is what clojure.spec does: https://clojure.github.io/spec.alpha/clojure.spec.alpha-api....