gpt4 book ai didi

scala - Kleisli 列表到 Kleisli 列表

转载 作者:行者123 更新时间:2023-12-04 16:58:00 25 4
gpt4 key购买 nike

我想知道是否有办法转List[Kleisli[Option, Int, Int]]Kleisli[Option, Int, List[Int]] .

特别是我的 kleisli 列表是这样形成的:

def k(a: String) = Kleisli[Option, Int, Int](m => Some(a.length * m))
val kList = List("hi", "hello").map(k)

我做的是以下
Kleisli[Option, Int, List[Int]](m => kList.map(_.run(m)).sequence)

这是非常凌乱的,没有表现力,需要大量的手工工作。

有没有更好的办法?

最佳答案

是的,您可以使用 traverse这就是这样做的。如果您使用的是 cats <= 0.9.0 你可以使用以下代码:

import cats.data._
import cats.instances.list._
import cats.instances.option._
import cats.syntax.traverse._

// ...
def k(a: String) = Kleisli[Option, Int, Int](m => Some(a.length * m))
val result: Kleisli[Option, Int, List[Int] = List("hi", "hello").traverseU(k)

如果您使用的是 Scala 2.11.9+,请添加 scalacOptions += "-Ypartial-unification"给您的 build.sbt文件,你可以使用 traverse代替 traverseU .另外,从 1.0.0 版开始, traverseUsequenceU将不复存在。

请注意,如果您使用的是 Scala < 2.11.9 但 >= 2.10.6,您仍然可以通过添加 this plugin 来启用部分统一。到您的构建。

关于scala - Kleisli 列表到 Kleisli 列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46739449/

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