Re: Prismatic Schema -- Type signature of reducing functions

2016-04-02 Thread Jason Wolfe
Simplest would be to do something like this:

(def Schema (s/cond-pre s/Int (s/constrained clojure.lang.Reduced 
#(integer? @%

although this doesn't allow you to use the schema in both places. The right 
way would be to make a new `Reduced` schema: 

(defrecord Reduced [schema]
  schema.core/Schema
  (spec [this]
(schema.spec.collection/collection-spec
 (schema.spec.core/precondition this #(instance? clojure.lang.Reduced 
%) #(list 'instance? clojure.lang.Reduced %))
 reduced 
 [(schema.spec.collection/one-element true schema (fn [item-fn r] 
(item-fn @r) nil))]
 (clojure.core/fn [_ xs _] (reduced (first xs)
  (explain [this] (list 'reduced-val (schema.core/explain schema

(defn reduced-val [schema] (Reduced. schema))

(defn possibly-reduced [schema] 
  (s/cond-pre (reduced-val schema) schema))

(s/validate [(possibly-reduced s/Int)] [1 (reduced 1)])

Best, 
Jason

On Friday, April 1, 2016 at 6:17:48 AM UTC+5:45, JvJ wrote:
>
>
> When using functions with schema type signatures for reduce, I run into 
> output schema errors whenever I try to short-circuit the reducing operation 
> by wrapping the return value in reduced.  How can I modify the type 
> signature so that it accepts output values of types A and (reduced A)?
>

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


Prismatic Schema -- Type signature of reducing functions

2016-03-31 Thread JvJ

When using functions with schema type signatures for reduce, I run into 
output schema errors whenever I try to short-circuit the reducing operation 
by wrapping the return value in reduced.  How can I modify the type 
signature so that it accepts output values of types A and (reduced A)?

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