What I'm trying to explain is that reduce takes two arguments: the growing value and the current front. In your case, the current front is indeed a 2-tuple, but that's an unrelated issue.
You're trying to get: reduce!( (firstElemOfPair, secondElemOfPair) => ...) (range) to work, whereas reduce signature is: reduce!( (onGoingValue, elem) => ...) (range)