¿Cómo decirle al compilador de Scala que un bucle while devolverá un valor?

Algunos algoritmos ejecutan un bucle while con una condición verdadera y, por supuesto, terminarán en algún punto con una declaración de retorno dentro del cuerpo del bucle while. P.ej.:

def foo: Int = {
  while(true) {
    // At some time, the while loop will do a return statement inside its body
    if( ... )
      return 0
  }
}

Ejemplo simple (sin sentido semántico):

def foo: Int = {
  var i = 0
  while(true) {
    i += 1
    if(i == 10)
      return 0
  }
}

El compilador de Scala se queja de una falta de coincidencia de tipo, porque el bucle while tiene una unidad de tipo y el compilador no sabe que el bucle while devolverá un valor en algún punto. Podríamos arreglar esto con una solución como:

def foo: Int = {
  var i = 0
  while(true) {
    i += 1
    if(i == 10)
      return 0
  }
  0 // !
}

Pero esto se ve feo. ¿Hay una solución mejor? ¿O incluso una mejor solución para este tipo de problema?

Respuestas a la pregunta(4)

Su respuesta a la pregunta