How the `HasFailed` protocol works
masterHasFailed is the core protocol that describes a failed result. Failjure implements this protocol for Object (representing a successful value), Exception, and the built-in Failure record. This allows functions like failed? and message to work polymorphically across different types of failures.
You can implement HasFailed for your own custom error types:
(defrecord AnnotatedFailure [message data]
f/HasFailed
(failed? [self] true)
(message [self] (:message self)))(defrecord AnnotatedFailure [message data]
f/HasFailed
(failed? [self] true)
(message [self] (:message self)))