We're updating the issue view to help you get more done. 

Create macro to variadically unroll a combinator function definition

Description

Clojure contains a set of combinators that are implemented in a similar, but slightly different way. That is, they are implemented as a complete set of variadic overloads on both the call-side and also on the functions that they return. Visually, they all tend to look something like:

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 (defn foo ([f] (fn ([] do stuff...) ([x] do stuff...) ([x y] do stuff...) ([x y z] do stuff...) ([x y z & args] do variadic stuff...))) ([f1 f2] (fn ([] do stuff...) ([x] do stuff...) ([x y] do stuff...) ([x y z] do stuff...) ([x y z & args] do variadic stuff...))) ([f1 f2 f3] (fn ([] do stuff...) ([x] do stuff...) ([x y] do stuff...) ([x y z] do stuff...) ([x y z & args] do variadic stuff...))) ([f1 f2 f3 & fs] (fn ([] do stuff...) ([x] do stuff...) ([x y] do stuff...) ([x y z] do stuff...) ([x y z & args] do variadic stuff...))))

To build this type of function for each combinator is tedious and error-prone.

There must be a way to implement a macro that takes a "specification" of a combinator including:

1. name
2. docstring
3. do stuff template
4. do variadic stuff template

And builds something like the function foo above. This macro should be able to implement the current batch of combinators (assuming that http://dev.clojure.org/jira/browse/CLJ-730 is completed first for the sake of verification).

Environment

None

Status

Assignee

Unassigned

Reporter

Fogus

Labels

None

Approval

Vetted

Patch

None

Fix versions

Priority

Minor