Re: clojure.spec explain and multi-arity functions with first optional argument

2017-04-23 Thread Leon Grapenthin
Please try whether my CLJ-2013 
 patch fixes the issue for 
you. From my observation it should.

On Saturday, April 22, 2017 at 7:31:48 PM UTC+2, Yegor Timoshenko wrote:
>
> (require '[clojure.spec :as s])
> (require '[clojure.spec.test :refer [instrument]])
>
> (defn request ([url]) ([params url]))
>
> (s/fdef request
>   :args (s/cat :params (s/? map?) :url string?))
>
> (instrument `request)
> (request [] "")
>
> ExceptionInfo Call to #'user/request did not conform to spec:
> In: [0] val: [] fails at: [:args :url] predicate: string?
> :clojure.spec/args  ([] "")
> :clojure.spec/failure  :instrument
> :clojure.spec.test/caller  {:file "form-init1226863901212006294.clj", 
> :line 1, :var-scope user/eval2193}
>   clojure.core/ex-info (core.clj:4725)
>
> I expected that it would fail at `map?` predicate rather than at `string?` 
> predicate.
> s/or produces better explanation, but at the same time is relatively more 
> verbose:
>
> (require '[clojure.spec :as s])
> (require '[clojure.spec.test :refer [instrument]])
>
> (defn request ([url]) ([params url]))
>
> (s/fdef request
>   :args (s/or :simple (s/cat :url string?)
>:advanced (s/cat :params map? :url string?)))
>
> (instrument `request)
> (request [] "")
>
> ExceptionInfo Call to #'user/request did not conform to spec:
> In: [0] val: [] fails at: [:args :simple :url] predicate: string?
> In: [0] val: [] fails at: [:args :advanced :params] predicate: map?
> :clojure.spec/args  ([] "")
> :clojure.spec/failure  :instrument
> :clojure.spec.test/caller  {:file "form-init1226863901212006294.clj", 
> :line 1, :var-scope user/eval2208}
>   clojure.core/ex-info (core.clj:4725)
>
> Is it subject to improvement? https://dev.clojure.org/jira/browse/CLJ-1982 
> might be the same issue.
>

-- 
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.


clojure.spec explain and multi-arity functions with first optional argument

2017-04-22 Thread Yegor Timoshenko
(require '[clojure.spec :as s])
(require '[clojure.spec.test :refer [instrument]])

(defn request ([url]) ([params url]))

(s/fdef request
  :args (s/cat :params (s/? map?) :url string?))

(instrument `request)
(request [] "")

ExceptionInfo Call to #'user/request did not conform to spec:
In: [0] val: [] fails at: [:args :url] predicate: string?
:clojure.spec/args  ([] "")
:clojure.spec/failure  :instrument
:clojure.spec.test/caller  {:file "form-init1226863901212006294.clj", :line 
1, :var-scope user/eval2193}
  clojure.core/ex-info (core.clj:4725)

I expected that it would fail at `map?` predicate rather than at `string?` 
predicate.
s/or produces better explanation, but at the same time is relatively more 
verbose:

(require '[clojure.spec :as s])
(require '[clojure.spec.test :refer [instrument]])

(defn request ([url]) ([params url]))

(s/fdef request
  :args (s/or :simple (s/cat :url string?)
   :advanced (s/cat :params map? :url string?)))

(instrument `request)
(request [] "")

ExceptionInfo Call to #'user/request did not conform to spec:
In: [0] val: [] fails at: [:args :simple :url] predicate: string?
In: [0] val: [] fails at: [:args :advanced :params] predicate: map?
:clojure.spec/args  ([] "")
:clojure.spec/failure  :instrument
:clojure.spec.test/caller  {:file "form-init1226863901212006294.clj", :line 
1, :var-scope user/eval2208}
  clojure.core/ex-info (core.clj:4725)

Is it subject to improvement? https://dev.clojure.org/jira/browse/CLJ-1982 
might be the same issue.

-- 
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.