有2个local
方法定义为:
final case class Kleisli[F[_], A, B](run: A => F[B]) { self =>
...
def local[AA](f: AA => A): Kleisli[F, AA, B] =
Kleisli(f.andThen(run))
...
}
和作为:
sealed private[data] trait KleisliFunctions {
...
def local[M[_], A, R](f: R => R)(fa: Kleisli[M, R, A]): Kleisli[M, R, A] =
Kleisli(f.andThen(fa.run))
}
第二个应该用作工厂方法来构造Kleisli。
您能否提供用例来使用KleisliFunctions
中定义的第二种方法来创建Kleisli实例。举一个例子,如果可能的话。在此方法可能有用的地方无法获取。
例如
val k: Kleisli[Option, String, Char] = Kleisli(_.headOption)
k.local[Int](_.toString): Kleisli[Option, Int, Char] // Kleisli#local
Kleisli.local((_: String).toUpperCase)(k): Kleisli[Option, String, Char] // KleisliFunctions#local
[对象Kleisli
扩展特征KleisliFunctions
。