如何使用Kleisli.local创建Kleisli(不适用于转换)

问题描述 投票:0回答:1

有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实例。举一个例子,如果可能的话。在此方法可能有用的地方无法获取。

scala scala-cats kleisli
1个回答
0
投票

例如

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

© www.soinside.com 2019 - 2024. All rights reserved.