So there's actually two different issues here. One is about generalizing functions and one is about the number of arguments. For instance, you could take the generalized version that I showed and still only use it for two arguments:

```coffee
module.exports = (streams...) ->
  throw new Error "Must provide a 'left' and a 'right' stream" unless streams.length is 2
  throw new Error 'Expected Readable streams' unless _(streams).all is_readable
  output = new PassThrough objectMode: _(streams).any (stream) -> stream._readableState.objectMode
  cb = _.after streams.length, -> output.end()
  _(streams).each (stream) ->
    stream.on 'end', cb
    stream.pipe output, end: false
  output
```

So taking out all considerations of number of arguments now, because this function also will only ever be used for two. This is what I meant about the generalized one being clearer:

```coffee
throw new Error 'Expected Readable streams' unless _(streams).all is_readable
```
vs
```coffee
throw new Error 'Expected Readable streams' unless is_readable(left) and is_readable(right)
```
and
```coffee
left.on 'end', cb
left.pipe output, end: false
right.on 'end', cb
right.pipe output, end: false
```
vs
```coffee
_(streams).each (stream) ->
  stream.on 'end', cb
  stream.pipe output, end: false
```