Details
-
Type:
Enhancement
-
Status:
Open
-
Priority:
Minor
-
Resolution: Unresolved
-
Affects Version/s: None
-
Fix Version/s: Approved Backlog
-
Component/s: None
-
Labels:None
-
Approval:Vetted
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:
(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).
Activity
| Field | Original Value | New Value |
|---|---|---|
| Summary | Create function to variadically unroll a combinator function definition | Create macro to variadically unroll a combinator function definition |
| Waiting On | richhickey |
| Fix Version/s | Approved Backlog [ 10034 ] | |
| Approval | Vetted | |
| Waiting On | richhickey |