Note we have just formed an expression which is the definition of the abstraction that we would like to compose. We can reuse it later and defer the execution of the composed abstraction. Like this ..

scala> res7.run(10)
res8: List[Int] = List(20, 40, 40, 80)

And the other advantages of using Kleisli is that you can get access to all the combinators that Kleisli offers. It's a very canonical way to compose effectful functions of the form A => M[B] where B is a monad.