gpt4 book ai didi

Scalaz Kleisli 使用优势

转载 作者:行者123 更新时间:2023-12-04 11:04:43 24 4
gpt4 key购买 nike

scalaz Kleisli[M[_], A, B]A => M[B] 的包装器,这允许组合这些函数。例如,如果 M[_] monad 是我可以写的 Kleisli[M, A, B]Kleisli[M, B, C]>=>获取 Kleisli[M, A, C] .

简而言之,Kleisli提供花式andThens取决于 M .这是正确的吗 ?使用 Kleisli 还有其他好处吗? ?

最佳答案

这里有两个好处作为例子——我相信你可以想出其他的。

首先,抽象不同的箭头会很有用,例如 Kleisli[M, ?, ?]? => ? .例如,我可以编写一个泛型函数,该函数将应用一定次数的内同态。

def applyX10[Arr[_, _]: Category, A](f: Arr[A, A]) =
List.fill(10)(Endomorphic(f)).suml

现在我可以在例如使用它 Int => IntKleisli[Option, Int, Int] :
val f = (_: Int) + 1

val k = Kleisli.kleisli[Option, Int, Int] {
case i if i % 2 == 0 => Some(i * 3)
case _ => None
}

进而:
scala> applyX10(f).run(1)
res0: Int = 11

scala> applyX10[=?>, Int](k).run(2)
res1: Option[Int] = Some(118098)

(注意 A =?> B 只是 Kleisli[Option, A, B] 的别名。)

二、事实 Kleisli[F, ?, ?]如果 F 有一个 monad 实例确实也很有用。参见例如 my answer here演示如何通过 ReaderT 使用 monadic 组合,这只是 Kleisli 的别名.

关于Scalaz Kleisli 使用优势,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29049161/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com