Idea: Different return schemas per arity
frenchy64 opened this issue · 0 comments
frenchy64 commented
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:
(s/defn foo
(:- Return1 [])
(:- Return2 [a]))
Transducer functions are a good motivation:
(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:
(->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?
(s/multiple-fn-schemas (s/=> Return1 Inputs1) (s/=> Return2 Inputs2))