On Thursday, February 22, 2018 at 12:58:00 AM UTC+1, Sean Corfield wrote:
> Looking around I see lots of cases where people do use conformers for 
> coercion. 
> That doesn’t make them right 😊

Oh, I agree, I'm just being realistic. The cat is out of the bag. I just 
googled for 's/conformer' and found an entire library of conformers that do 
various data conversions.

> At a first glance it seems very natural, and warnings not to do it are not 
> easily found.
> Every single time coercion comes up anywhere in the context of spec, 
> someone says “don’t do that”, and they’ve been saying it since the earliest 
> alpha versions of spec. You would be correct to point out that nothing in 
> the spec overview or spec guide on clojure.org carries this caution, 
> however (and I think it’s a reasonable “ask” for the guide to be updated to 
> include such a caution).
> My recommendation is to have a strictly non-coercive spec for the target 
> data “type” / shape you want, and to have a second spec that combines the 
> coercion you want with that spec. That way you have a way to tell if your 
> uncoerced data conforms to the spec, as well as a way to do coercion in 
> s/conform. They are – and should be – two separate specs and two separate 
> operations. They represent different layers of abstraction inside your 
> application (so “of course” they should be two separate specs, one built on 
> top of the other).

Also agree. I think coercion and conformance verification are two separate 
concepts and should not be conflated. I like the idea with two specs, as 
this lets me get some reuse.

> Given that the overview and the guide don’t even mention s/conformer, I’m 
> not sure where that recommendation should live. Alex, any thoughts on this, 
> since you seem to be the one most often making the recommendation?

As a spec user, I would expect to learn about this from the spec guide.

Also, I still believe that in the short term a function that validates a 
spec without calling conformers would be useful.

best regards,

You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
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 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.

Reply via email to