It's a function literal
scala> val f = () => 1
f: () => Int = <function0>
scala> f()
res0: Int = 1
map(_ => block)
would evaluate block
immediately; by keeping it as a function we keep it lazy, which matters if we pass a block
with side effects.
def foo2[T](block: => T) = List(1, 2, 3).map(_ => block)
scala> foo2(println("Hello"))
Hello
Hello
Hello
res1: List[Unit] = List((), (), ())
scala> foo(println("Hello"))
res2: List[() => Unit] = List(<function0>, <function0>, <function0>)
scala> res2.map(_())
Hello
Hello
Hello
res3: List[Unit] = List((), (), ())