Skip to content

Idea: Different return schemas per arity #446

@frenchy64

Description

@frenchy64

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

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions