Является ли Scala mapValues ​​ленивым?

Когда я звоню

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()

сfn имея отладочный оператор печати внутри, я получаю этот вывод:

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

Я не понимаю, почему операторы debug print вызываются после того, как напечатано «After», и я не понимаю, почему я получаю его дважды - если толькоmapValues создает ленивую карту?

Ответы на вопрос(2)

Ваш ответ на вопрос