gpt4 book ai didi

scala - 猫 : mapping over tuples with the same applicative

转载 作者:行者123 更新时间:2023-12-01 01:41:50 26 4
gpt4 key购买 nike

假设我有:

val x1: Either[String, Int] = Right(1)
val x2: Either[String, Float] = Left("Nope")
val x3: Either[String, Double] = Left("Not Today")

我想将这些组合在一起并获得 Either[NonEmptyList[String], (Int, Float, Double)] .为此,我目前正在执行以下操作:
import cats.syntax.all._
(
x1.toValidatedNel,
x2.toValidatedNel,
x3.toValidatedNel
).tupled
.toEither

哪个可以完成这项工作,但有点乏味。有没有办法通过调用 toValidatedNel只有一次?就像是:
(x1, x2, x3)
.fooMap(_.toValidatedNel)
.tupled
.toEither

有这样的 fooMap存在于猫的某个地方?或者我们需要 HLists为了那个原因?

最佳答案

使用 Shapeless,它是

import shapeless.syntax.std.tuple._
object toValidatedNel extends Poly1 {
implicit def cse[A, B, AA >: A]: Case.Aux[Either[A, B], ValidatedNel[AA, B]] = at(_.toValidatedNel[AA])
}

(x1, x2, x3)
.map(toValidatedNel)
.tupled
.toEither

关于scala - 猫 : mapping over tuples with the same applicative,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55601870/

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