- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试猫图书馆,但我很难在我应该导入和创建的东西之间导航。我的问题如下:
sealed trait Checks
case class CheckViolation(id: Long, msg: String) extends Checks
case class ChecksPassed(ids: Seq[Long]) extends Checks
object BusinessRuleSetValidation extends App {
type BRValidationResult = Validated[NonEmptyList[CheckViolation], ChecksPassed]
def run(): BRValidationResult = {
implicit val monoidChecksPassed = new Monoid[ChecksPassed] {
override def empty: ChecksPassed = ChecksPassed(Seq())
override def combine(x: ChecksPassed, y: ChecksPassed): ChecksPassed = ChecksPassed(x.ids ++ y.ids)
}
val check1: BRValidationResult = valid(ChecksPassed(2L))
val check2: BRValidationResult = invalidNel(CheckViolation(1, "This check was violated"))
val check3: BRValidationResult = invalidNel(CheckViolation(2, "This is a violation"))
val p = Foldable[NonEmptyList].fold(NonEmptyList(check1, check2, check3))
fold
导致编译错误。
BusinessRuleSetValidation.scala:48: could not find implicit value for parameter A: cats.Monoid[cats.data.Validated[cats.data.OneAnd[com.adform.br.server.model.validation.CheckViolation,[+A]List[A]],com.adform.br.server.model.validation.ChecksPassed]]
[error] val p = Foldable[NonEmptyList].fold(NonEmptyList(check1, check2, check3))
NonEmptyList
应该是折叠的首选候选人。验证的组合也应该在那里。至于我的课,
ChechViolation
在
NonEmptyList
所以它不需要幺半群实例。对于
ChecksPassed
我创建了一个 monoid 实例,所以我真的不明白这里缺少什么。
import cats._
import cats.data.Validated._
import cats.data.{NonEmptyList, Validated, Xor}
import cats.data.OneAnd.oneAndFoldable
import cats.std.all._
import cats.syntax.apply._
import cats.syntax.order._
import cats.syntax.xor._
import cats.syntax.semigroup._
最佳答案
好的,我想通了。
所以我留下一个答案,也许有人会觉得它有帮助。
NonEmptyList 不可能有 Monoid。为什么? Monoid 需要一个中性元素,并且列表为空,但我们的列表不允许这样做。
所以我改变了检查从 NEL 到 List 的分组方式。
事实证明,我还需要为验证创建一个 Monoid,它看起来像这样:
implicit val brValidationResutlMonoid = new Monoid[BRValidationResult] {
override def empty: BRValidationResult = valid(ChecksPassed(Seq.empty))
override def combine(x: BRValidationResult, y: BRValidationResult): BRValidationResult = (x,y) match {
case (Valid(a),Valid(b)) => valid(ChecksPassed(a.ids ++ b.ids))
case (Valid(_), k @ Invalid(_)) => k
case (f @ Invalid(_), Valid(_)) => f
case (Invalid(l1),Invalid(l2)) => Invalid(l1.combine(l2))
}
}
关于scala - 折叠 NonEmptyList,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32477292/
我正在使用 cats ,想知道如何用它来转数据: val data = NonEmptyList[Either[Error, User]] 到 val target: Either[Error, No
我正在尝试猫图书馆,但我很难在我应该导入和创建的东西之间导航。我的问题如下: sealed trait Checks case class CheckViolation(id: Long, msg:
标准库在List上提供了unzip方法: scala>val l = List((1, "one"), (2, "two"), (3, "three"), (4, "four"), (5, "five
在我看来,Scalaz' NonEmptyList有一个 monad 实例,所以它的 monad 转换器(有点类似于 ListT )应该是可能的。那是对的吗? 如果有,外面有吗? (我在 Scalaz
最近在研究cats库,遇到一个叫NonEmptyList的类. 读完api后,我不禁想知道是什么让cats作者创建了一个新类,而不是利用内置的东西( :: )并使用类型类来扩展它。连cats gith
我有一个 NonEmptyList实例,我想(按顺序)找到与谓词匹配的第一个元素。使用 Scalas List我可以做 myList.find(predicate) , 然而 Scalaz NonEm
我想将案例类与 scalaz 进行比较 NonEmptyList场。 ==或 euqls不起作用,我知道这是因为 NonEmptyList.equals检查比较对象是否与调用者相同的实例的方法。另一方
我是一名优秀的程序员,十分优秀!