Apparently, the pre and post conditions are intended to be used in cases where reporting on proposals provides the developer with sufficient information, that is, it does not require explanation. If you want to give more explanation, then it is idiomatic to use assert .
But you can abuse the fact that the entire condition is always reported, for example. eg:
{:pre [(do "It can't be empty because of..." (seq x))]}
And he will report something like
AssertionError Assert failed: (do "Cannot be empty due to ..." (seq x)) ...
source share