私のアプリケーションでScalaz 7検証を使用しようとしています。しかし、私は失敗を合体させるために|@|
応募者を得ることに問題があります。ここで私が持っているコードです:Scalazバリデーションと適用ファンクタ| @ |動作していません
type ValidationResult = ValidationNel[String, Unit]
def validate[A: ClassTag](instance: A, fieldNames: Option[Seq[String]] = None): ValidationResult = {
val fields = classTag[A].runtimeClass.getDeclaredFields
val fieldSubset = fieldNames match {
case Some(names) => fields.filter { field => names.contains(field.getName) }
case None => fields
}
fieldSubset.map {
field => field.getAnnotations.toSeq.map {
field.setAccessible(true)
val (name, value) = (field.getName, field.get(instance))
field.setAccessible(false)
annotation => annotation match {
case min: Min => minValidate(name, value, min.value())
case size: Size => sizeValidate(name, value, size.min(), size.max())
}
}
}.flatten[ValidationResult].foldLeft(().successNel[String])(_ |@| _)
}
minValidate
とsizeValidate
機能だけでValidationResults
を返します。
問題は、このコードはコンパイルされないことです。エラーメッセージは次のとおりです:
私はそれが何を意味するのか分かりません...私はスカラーにさらにタイプ情報を与える必要がありますか?
私が達成しようとしているのは、すべてのフィールドがsuccessNel
の場合はそれを返し、それ以外の場合はすべてfailureNel
の組み合わせを返します。
Scalazの前のバージョンから|@|
が変更されていますか?たとえ私が次のようなことをしたとしても:
().successNel |@|().successNel
私は同じエラーが発生します。
アップデートは私がScalazソースの周り突っつい開始し、私は私がやりたいように見える+++
を発見しました。
+++
と|@|
の違いは何ですか?