Exception raised by the evaluator for runtime and syntactic failures.
The :reason field is a structured term — atom or tagged tuple — meant
to be matched on. The :message is derived from the reason, so
assertions can pin behaviour on :reason without coupling to wording.