That looks great already. I'm also interested in what the official workflow 
for adding specs to core is going to be and whether contributions are 
desired.

The last example seems like it could be better because the user has to 
infer how identity was called within map.

So what we'd want is a codependent spec where we can say if you give N 
sequences you have to give a fnN. Is this possible with the current ops?


On Sunday, June 12, 2016 at 3:52:33 PM UTC+2, Ryan Fowler wrote:
>
> Is there an effort to write specs for Clojure's core namespaces? Apologies 
> if this has already been addressed.
>
> I've been tinkering with trivial (and probably wrong) fdefs on 
> clojure.core/map and clojure.core/identity. It seems that the spec 
> exception messages are way better than what we have now.
>
> Code is here: 
> https://gist.github.com/ryfow/69a64e966d48258dfa9dcb5aa74005eb
>
>
> =========================================================
> Before instrumenting clojure.core/map
> =========================================================
> Form:             (into [] (map nil [1 2 3] [1 2 3]))
> Exception Class:  java.lang.NullPointerException
> Message:          nil
>
> Form:             (into [] (map 1 [1 2 3] [1 2 3]))
> Exception Class:  java.lang.ClassCastException
> Message:          java.lang.Long cannot be cast to clojure.lang.IFn
>
> Form:             (into [] (map identity 4))
> Exception Class:  java.lang.IllegalArgumentException
> Message:          Don't know how to create ISeq from: java.lang.Long
>
> =========================================================
> After instrumenting clojure.core/map
> =========================================================
> Form:             (into [] (map nil [1 2 3] [1 2 3]))
> Exception Class:  clojure.lang.ExceptionInfo
> Message:          Call to #'clojure.core/map did not conform to spec:
> In: [0] val: nil fails at: [:args :fn] predicate: ifn?
> :clojure.spec/args  (nil [1 2 3] [1 2 3])
>
>
> Form:             (into [] (map 1 [1 2 3] [1 2 3]))
> Exception Class:  clojure.lang.ExceptionInfo
> Message:          Call to #'clojure.core/map did not conform to spec:
> In: [0] val: 1 fails at: [:args :fn] predicate: ifn?
> :clojure.spec/args  (1 [1 2 3] [1 2 3])
>
>
> Form:             (into [] (map identity 4))
> Exception Class:  clojure.lang.ExceptionInfo
> Message:          Call to #'clojure.core/map did not conform to spec:
> In: [1] val: 4 fails at: [:args :seq] predicate: sequential?
> :clojure.spec/args  (#object[clojure.core$identity 0x15a04efb 
> "clojure.core$identity@15a04efb"] 4)
>
>
> =========================================================
> Before instrumenting clojure.core/identity
> =========================================================
> Form:             (into [] (map identity [1 2 3] [1 2 3]))
> Exception Class:  clojure.lang.ArityException
> Message:          Wrong number of args (2) passed to: core/identity
>
> =========================================================
> After instrumenting clojure.core/identity
> =========================================================
> Form:             (into [] (map identity [1 2 3] [4 5 6]))
> Exception Class:  clojure.lang.ExceptionInfo
> Message:          Call to #'clojure.core/identity did not conform to spec:
> In: [1] val: (4) fails at: [:args] predicate: (cat :one-argument 
> identity),  Extra input
> :clojure.spec/args  (1 4)
>
>
>

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