plumatic/schema

Idea: Different return schemas per arity

frenchy64 opened this issue · 0 comments

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