O Scala mapValues é preguiçoso?

Quando eu ligo

System.err.println("Before")
System.err.flush()
val foo: Map[Int, T] = t mapValues (fn(_))
System.err.println(foo.head) //prevent optimiser from delaying the construction of 'foo' 
System.err.println("After")
System.err.flush()

comfn tendo uma instrução de depuração dentro, recebo esta saída:

Before
...head item...
After
...debug print statement from fn...
...debug print statement from fn...

Não entendo por que as instruções debug print estão sendo chamadas após a impressão de "Depois" e não entendo por que estou recebendo duas vezes - a menos quemapValues cria um mapa preguiçoso?

questionAnswers(2)

yourAnswerToTheQuestion