According to the documentation :kind
can be a “spec”:
:kind
- a predicate or spec that the incoming collection must satisfy, such as vector?
The following works as expected:
(s/valid? (s/coll-of string? :kind vector?) ["one" "two" "three"])
However, given the following:
(s/def ::vector vector?)
this returns false
(s/valid? (s/coll-of string? :kind ::vector) ["one" "two" "three"]).
BTW, this works too:
(s/valid? (s/coll-of string? :kind #(s/valid? ::vector %)) ["one" "two" "three"])