This was suggested to me by @DeLaGuardo. It seems like there's an elegant extension of `s/defn`'s syntax to support different return schemas per arity: ```clojure (s/defn foo (:- Return1 []) (:- Return2 [a])) ``` Transducer functions are a good motivation: ```clojure (s/defn map (:- Transducer [f] ...etc) (:- [A] [f & xs] ...etc)) ``` There would need to be a restriction that disallows combining this syntax the original return syntax. The question is, how to support this in FnSchema? FnSchema is hardcoded with a single return schema. Idea: we could introduce a new container for a list of FnSchemas: ```clojure (->MultipleFnSchemas [(->FnSchema Return1 Inputs1), (->FnSchema Return2 Inputs2)]) ``` Not sure how to extend the syntax of `s/=>*` to support this. Perhaps repeat the same idea at the syntax level? ```clojure (s/multiple-fn-schemas (s/=> Return1 Inputs1) (s/=> Return2 Inputs2)) ```
Activity