> It makes sense since parts of the pipeline just process individual values, they are not supposed to have context of the whole stream.
> I agree this is unconventional, but it what enables many of the advantages like pipeline structure of the program and conciseness
I'm not sure I agree with this. There are no operators that work on streams other than `select` since most other operators are ambiguous. This means streams are not first-class values (they are not at the same level as all other values).
It doesn't have to be designed this way, if we differentiate between stream and nonstream values you could have
'.someattr[] | smap(.otherattr) | sreduce(+)'
where `smap` is a stream equivalents to `map`
The language won't be as compact but it will gain significantly in readability and consistency, and its pipelining will continue to work just as well.
Its like designing a language where everything is an array and where every operation implicitly maps over the array. In those cases you can't have a "reduce" operation, because its ambiguous whether you want to run reduce on every individual element or you want to reduce the entire array of elements.
> I agree this is unconventional, but it what enables many of the advantages like pipeline structure of the program and conciseness
I'm not sure I agree with this. There are no operators that work on streams other than `select` since most other operators are ambiguous. This means streams are not first-class values (they are not at the same level as all other values).
It doesn't have to be designed this way, if we differentiate between stream and nonstream values you could have
'.someattr[] | smap(.otherattr) | sreduce(+)'
where `smap` is a stream equivalents to `map`
The language won't be as compact but it will gain significantly in readability and consistency, and its pipelining will continue to work just as well.
Its like designing a language where everything is an array and where every operation implicitly maps over the array. In those cases you can't have a "reduce" operation, because its ambiguous whether you want to run reduce on every individual element or you want to reduce the entire array of elements.