iter8
iter8 copied to clipboard
Curried versions?
Neat little package. After a skim of the examples, I immediately thought that currying would be neat. Like:
BEFORE:
$iter = Iter::pipe(Gen::from(PEOPLE), [
Pipe::pluck('age'),
Pipe::reduce('max'),
Pipe::switch(function (int $maxAge) {
return Gen::range(1, $maxAge);
}),
]);
AFTER:
$iter = Iter::pipe(Gen::from(PEOPLE), [
Pipe::pluck('age'),
Pipe::reduce('max'),
Pipe::switch(Gen::range(1)),
]);
The only problem with this is that it's not possible to encode optional params. Perhaps explicitly have two methods, and take the step first?
Pipe::switch(Gen::rangeWithStep(3)(1))
Short closures would be nice here:
Pipe::switch(fn(int $maxAge) => Gen::range(1, $maxAge))
Maybe next year. :-)
I have a partial function application function that could work:
Pipe::switch(Func::apply([Gen::class, 'range'], 1))
Still not the smoothest, but no function definition.
Not sure how often currying would be needed with range()
though. It wasn't the most practical of examples.
Hmmm. I guess I was looking for a way to have the nicest possible syntax.
What about if the default was curried, and there was a mechanism to uncurry?