да, почему бы не сделать def pure[M[_]: Monad, A](a: A): M[A] = Monad[M].pure(a)
ну прямо так сделать будет не очень хорошо. основная причина - вывод типов
у скалы почти никогда не получается вывести здесь тип
поэтому приходится писать x.pure[F]
в случае функции пришлось бы писать
pure[F, XType](x), т.к. частичной передачи нет
но можно воспользоваться паттерном для частичной передачи