I think a natural place of the :post condition shold be after the argument brackets (and that should be possible to implement I think):
(defn user-name [user :core/user] :user/name (-> user :user/name)) On Friday, September 16, 2016 at 1:34:47 PM UTC+2, joakim.t...@nova.com wrote: > > (ns spec-test.core > (:require [clojure.spec :as s])) > > (s/def :user/name string?) > (s/def :core/user (s/keys :req [:user/name])) > > ; A helper method to get better error messages. > ; Also imagine that clojure.spec has a similar s/check > ; function that looks similar to this one > ; (used in our user-name function): > (defn check [type data] > (if (s/valid? type data) > true > (throw (AssertionError. (s/explain type data))))) > > > ; ...how about if we could write our :pre and :post conditions like this: > (defn user-name [user :core/user] > (-> user :user/name)) :user/name > > ; ...so that they expands into this: > (defn user-name [user] > {:pre [(s/check :core/user user)]} > {:post [(s/check :user/name user)]} > (-> user :user/name)) > > > > ; And if you have other :pre or :post conditions, > ; then extend the existing ones: > (defn user-name [user :core/user number] > {:pre [pos? number]} > (-> user :user/name)) > > ; ...becomes: > (defn user-name [user number] > {:pre [pos? number > (s/valid? :core/user user)]} > (-> user :user/name)) > > ; a call to the function > (user-name {:user/name "Bill"} 3) > > > ; Maybe it will be hard to find a nice syntax that works for the post > condition, > ; but the :pre condition should be doable I think! > > -- 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.