gpt4 book ai didi

Scalaz 翻转嵌套的存在/验证 mono-whatevers-nads 围绕 pre-applicative-building

转载 作者:行者123 更新时间:2023-12-04 23:49:41 25 4
gpt4 key购买 nike

我有以下内容:

gt.map(_.singleVal) |@| lt.map(_.singleVal)

它们的类型是 Option(Validation(T))但他们应该是 Validation(Option(T))
不存在的东西是可以的,但是存在的东西是无效的就不可以了。换句话说,我想要 None被解释为 Success(None)
我觉得这是一件很常见的事情。 scalaz 中是否有任何糖可以做到这一点?

最佳答案

我将假设 Validation(T)你的意思是像 ValidationNel[Throwable, T] , 自 Validation[T]不是什么和Validation[E, T]除非 E,否则没有应用仿函数实例有一个半群实例。

您正在寻找的可能是 traverse (或者 traverseU 如果你想避免写出类型参数)。例如,您可以编写以下内容:

scala> case class Foo(singleVal: ValidationNel[Throwable, String])
defined class Foo

scala> val x = some(Foo("hey".success))
x: Option[Foo] = Some(Foo(Success(hey)))

scala> val y = none[Foo]
y: Option[Foo] = None

scala> println(x.traverseU(_.singleVal))
Success(Some(hey))

scala> println(y.traverseU(_.singleVal))
Success(None)

一般来说,如果 M有一个 Traverse实例和 N有一个 applicative functor 实例,你可以转换一个 M[A]N[M[B]]给定一个函数 A => N[B]traverse (有关其他讨论,请参阅 my answer here)。

关于Scalaz 翻转嵌套的存在/验证 mono-whatevers-nads 围绕 pre-applicative-building,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25351674/

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