Scalaz 上的地图验证失败

发布于 2024-12-06 00:29:05 字数 223 浏览 0 评论 0原文

import scalaz._
import Scalaz._

"abc".parseInt

这将返回一个 Validation[NumberFormatException, Int]。 有没有办法可以在失败端应用函数(例如 toString)来获取 Validation[String, Int]

import scalaz._
import Scalaz._

"abc".parseInt

This will return a Validation[NumberFormatException, Int].
Is there a way I can apply a function on the failure side (such as toString) to get a Validation[String, Int]?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

黯然 2024-12-13 00:29:05

MAB[M[_,_], A, B]<-: 和 :-> > 只要存在 Bifunctor[M],该映射就位于任何 M[A, B] 的左侧和右侧。 Validation 恰好是一个双函子,所以你可以这样做:

((_:NumberFormatException).toString) <-: "123".parseInt

Scala 的类型推断通常从左到右流动,所以这实际上更短:

"123".parseInt.<-:(_.toString)

并且需要更少的注释。

There is a pair of methods <-: and :-> defined on MAB[M[_,_], A, B] that map on the left and right side of any M[A, B] as long as there is a Bifunctor[M]. Validation happens to be a bifunctor, so you can do this:

((_:NumberFormatException).toString) <-: "123".parseInt

Scala's type inference generally flows from left to right, so this is actually shorter:

"123".parseInt.<-:(_.toString)

And requires less annotation.

肩上的翅膀 2024-12-13 00:29:05

FailProjection 上有一个函子。所以你可以这样做

v.fail.map(f).validation

(未能输入 FailProjection,验证以摆脱它)

或者

v.fold(f(_).failure, _.success)

两者都有点冗长。也许更熟悉 scalaz 的人可以想出更好的东西

There is a functor on FailProjection. So you could do

v.fail.map(f).validation

(fail to type as FailProjection, validation to get out of it)

Alternatively

v.fold(f(_).failure, _.success)

Both a bit verbose. Maybe someone more familiar with scalaz can come up with something better

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文