Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/scala/18.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Scala 已验证和已验证NEL的Specs2匹配器_Scala_Matcher_Specs2_Scala Cats - Fatal编程技术网

Scala 已验证和已验证NEL的Specs2匹配器

Scala 已验证和已验证NEL的Specs2匹配器,scala,matcher,specs2,scala-cats,Scala,Matcher,Specs2,Scala Cats,我没有找到猫的ValidatedNel的specs2匹配器,因此我正在编写这样的匹配器: import cats.data._ import cats.implicits._ import org.specs2.matcher.Matcher type ValidationFailure = String type ValidationResult[A] = ValidatedNel[ValidationFailure, A] def beValid: Matcher[Validation

我没有找到猫的ValidatedNel的specs2匹配器,因此我正在编写这样的匹配器:

import cats.data._
import cats.implicits._
import org.specs2.matcher.Matcher

type ValidationFailure = String

type ValidationResult[A] = ValidatedNel[ValidationFailure, A]

def beValid: Matcher[ValidationResult[_]] =
  beTrue ^^ ((_: ValidationResult[_]).isValid)

def beInvalid(failure: ValidationFailure): Matcher[ValidationResult[_]] =
  beEqualTo(failure.invalidNel)

def beInvalid[A: Monoid](failures: ValidationFailure*): Matcher[ValidationResult[A]] =
  beEqualTo(failures.toList foldMap (_.invalidNel[A]))

这有意义吗?您建议如何改进它?

我认为从其他匹配者那里获得匹配者是很好的,因为它可以让您快速获胜。但是,失败消息可能不是很好。例如,beValid matcher会告诉您某个值不是true,从而失败。所以我建议写一些类似的东西:

def beValid: Matcher[ValidationResult[_]] = { actual: ValidationResult[_] =>
  (actual.isValid, s"$actual is not valid")  
}

另外,如果您有时间,请在本模块中填写PR:-。

谢谢您的回复。我可能会更换我的配对者。我也会看看specs2 cats模块。