When the Scala compiler expects a type similar to M[B], and you give it something like WriterT[Id, String, Int], it is unfortunately not smart enough to realize that you want to fix the first two type parameters and use the monad for WriterT[Id, String, _].
There are several possible ways around this limitation. The first is to define an alias of type:
type StringWriter[A] = WriterT[Id, String, A]
Now you can provide explicit type parameters (in fact, you can do this without an alias, but the lambdas type will make the line twice as long and ten times unreadable):
scala> Kleisli[StringWriter, Int, Int](f) >=> Kleisli[StringWriter, Int, Int](f)
res0: scalaz.Kleisli[StringWriter,Int,Int] = Kleisli(<function1>)
Scalaz , Miles Sabin "unapply trick" :
val ff = Kleisli.kleisliU(f) >=> Kleisli.kleisliU(f)
kleisliU Kleisli.apply, ( Unapply) , , WriterT[Id, String, Int].