Skip to content
New issue

Have a question about this project? # for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “#”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? # to your account

Idea: Different return schemas per arity #446

Open
frenchy64 opened this issue Aug 13, 2022 · 0 comments
Open

Idea: Different return schemas per arity #446

frenchy64 opened this issue Aug 13, 2022 · 0 comments

Comments

@frenchy64
Copy link
Contributor

frenchy64 commented Aug 13, 2022

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))
# for free to join this conversation on GitHub. Already have an account? # to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

1 participant