|
On Dec 18, 2008, at 3:19 AM, Paul Moore wrote:
2008/12/18 Mark Hamburg <mark@grubmah.com>:On the other hand, I think there is clarity to be gained from: producer() >> filter >> consumerYou can read the code left-to-right instead of inside-out and understandwhat it does.An immediate thought - you can do this with a driver function pipe(producer(), filter1, filter2, ..., consumer) which looks to me sufficiently straightforward that I doubt new syntax is worth it.
That won't work if the producer can generate multiple values and we need to pass those along. One of the key use cases I had been thinking about was iterators and iterators are represented by three values.
for k, v in pairs( t ) >> filter_key_type( "string" ) do -- operate only on key value pairs with keys of type string endOne could do this with pipe( consumer, filter, filter, ... ) ( producer() ) probably with the filters in the reverse order, but the nesting makes the logic harder to follow. Or in the simple case of the loop above:
for k, v in filter_key_type( "string" )( pairs( t ) ) do -- operate only on key value pairs with keys of type string endThere's also the potential matter of getting order of evaluation "correct" if the filter construction interacts with shared state.
Mark