Abortar cedo em uma dobra

Qual é a melhor maneira de terminar uma dobra cedo? Como exemplo simplificado, imagine que eu queira resumir os números em umIterable, mas se eu encontrar algo que não estou esperando (digamos, um número ímpar), talvez queira finalizar. Esta é uma primeira aproximação

def sumEvenNumbers(nums: Iterable[Int]): Option[Int] = {
  nums.foldLeft (Some(0): Option[Int]) {
    case (Some(s), n) if n % 2 == 0 => Some(s + n)
    case _ => None
  }
}

No entanto, esta solução é muito feia (como em, se eu fiz um .foreach e um retorno - seria muito mais limpo e claro) e pior de tudo, ele percorre todo o iterável mesmo se ele encontrar um número não-par .

Então, qual seria a melhor maneira de escrever uma dobra como essa, que termina cedo? Devo ir e escrever isso de forma recursiva, ou há uma maneira mais aceita?

questionAnswers(10)

yourAnswerToTheQuestion