I have to say I find this confusing:
"First the :args is a compound spec that describes the function arguments.
This spec is invoked with the args in a list, as if they were passed to (apply
fn (arg-list)). Because the args are sequential and the args are positional
fields, they are almost always described using a regex op, like cat, alt, or
The second :args predicate takes as input the conformed result of the first
predicate and verifies that start < end. The :ret spec indicates the return
is also an integer. Finally, the :fn spec checks that the return value is
>= start and < end."
It really didn't click for me that the second (and I presume subsequent?)
predicates of the (s/and) don't get the same argument that the first
predicate does. The text does say that, but it runs counter to what a
logical AND would mean (commutative property is lost). It also damages the
ability to reuse specs in and out of an (s/fdef). It seems to behave more
like a (comp) or (->) than a boolean operator now.
I can't think of different ways to do it, but I don't think any of them are
better. However I can think the example used above this paragraph in the
guide could be changed a little to make the behavior clearer... I have
never checked, but I assume the clojure docs are on github? If so are pull
requests welcomed for updating docs?
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to firstname.lastname@example.org
Note that posts from new members are moderated - please be patient with your
To unsubscribe from this group, send email to
For more options, visit this group at
You received this message because you are subscribed to the Google Groups
To unsubscribe from this group and stop receiving emails from it, send an email
For more options, visit https://groups.google.com/d/optout.