使用 andThen 验证的链接猫
Chaining Cats Validated with andThen
我正在阅读这篇文章
http://typelevel.org/cats/datatypes/validated.html
它说 Validated 可用于使用 "andThen" 方法进行顺序验证。这意味着我们在第一个错误处停止,而不是收集所有错误。
我尝试了以下代码
@ val x = 123.valid[String]
x: Validated[String, Int] = Valid(123)
@ val y = "foo".invalid[Int]
y: Validated[String, Int] = Invalid("foo")
@ x andThen y
cmd4.sc:1: type mismatch;
found : cats.data.Validated[String,Int]
required: Int => cats.data.Validated[?,?]
val res4 = x andThen y
^
购买类型不匹配的原因。如您所见,x 和 y 具有相同的形状。
编辑:请注意,我不想收集所有错误。我可以用 x |@| y
轻松完成。我已验证,我想按顺序处理它们。
好的。我想我通过查看 here 找到了答案。使用 andthen 方法链接验证单子。您需要一个函数,它接受第一个验证的右侧,然后创建另一个验证。
所以正确的代码是
@ val x = 123.valid[String]
val y = x: Validated[String, Int] = Valid(123)
@ val y = 234.valid[String]
y: Validated[String, Int] = Valid(234)
@ val foo = (i: Int) => y
foo: Int => Validated[String, Int] = $sess.cmd4$$$Lambda59/7469297@25f7739c
@ x andThen foo
res5: Validated[String, Int] = Valid(234)
我正在阅读这篇文章
http://typelevel.org/cats/datatypes/validated.html
它说 Validated 可用于使用 "andThen" 方法进行顺序验证。这意味着我们在第一个错误处停止,而不是收集所有错误。
我尝试了以下代码
@ val x = 123.valid[String]
x: Validated[String, Int] = Valid(123)
@ val y = "foo".invalid[Int]
y: Validated[String, Int] = Invalid("foo")
@ x andThen y
cmd4.sc:1: type mismatch;
found : cats.data.Validated[String,Int]
required: Int => cats.data.Validated[?,?]
val res4 = x andThen y
^
购买类型不匹配的原因。如您所见,x 和 y 具有相同的形状。
编辑:请注意,我不想收集所有错误。我可以用 x |@| y
轻松完成。我已验证,我想按顺序处理它们。
好的。我想我通过查看 here 找到了答案。使用 andthen 方法链接验证单子。您需要一个函数,它接受第一个验证的右侧,然后创建另一个验证。
所以正确的代码是
@ val x = 123.valid[String]
val y = x: Validated[String, Int] = Valid(123)
@ val y = 234.valid[String]
y: Validated[String, Int] = Valid(234)
@ val foo = (i: Int) => y
foo: Int => Validated[String, Int] = $sess.cmd4$$$Lambda59/7469297@25f7739c
@ x andThen foo
res5: Validated[String, Int] = Valid(234)