I’m a pretty heavy user of spec including a lot of coercion. The way I’ve 
always done coercion is to enumerate all accepted shapes first and do coercion 
last. For your example this would be:

(s/def ::foo (s/and (s/or :string string?
                                     :kw keyword?)
                             (s/conformer (fn [[tag x]]
                                                    (case tag
                                                       :string (keyword x)
                                                       x)))))

Ps. also don’t forget s/conformer can return :s/invalid to signal failure.

-- 
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
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
--- 
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