added a comment - - edited
> Note that not every value can carry metadata (number, strings, etc) but it’s an interesting idea.
It's not that big of a deal since the metadata will be directly useful mostly with recursive/nested specs for spec tooling devs. And a person that wants to use it for this can work around the limitation by wrapping primitives.
For the end-user API something similar to spec/explain(s/explain-data, s/explain-str..) would be great.
I'll call it s/complexity, the function takes a spec and returns (in the case of s/complexity-data) structure of the same shape as the original spec filled with generation complexity data (average time, attempts, mb the spec form...) It should handle too complex specs in a reasonable way i.e. Instead of throwing (as with generators) it preferably reports which part of the spec is too complex and what is individual complexity of its elements.