errors
が空の場合があり、A
の値を持たないように制限しているため、これを総機能として記述することはできません。この型シグネチャを書き込むには、空のリストの大文字小文字が存在しないかのようにして不正行為をする必要があります。
def reject[A](errors: List[String]): ValidationNEL[String, A] =
Failure(errors.toNel.get) // bad!
編集: Apocalispが指摘したように、あなたはもちろん、空のリストについては、エラーを導入することで、この合計機能することができます。 errors
に合格しないのはなぜ
def reject[A](errors: List[String]): ValidationNEL[String, A] =
Failure(errors.toNel getOrElse NonEmptyList("Error: There were no errors!"))
:しかし、私はそれのような愚かなエラーにつながるようerrors
場合は、実行時に計算された、と私は、これはあなたのユースケースではない疑いがされていることだろうNonEmptyList
- 代わりに、この関数はコンパイル時にエラーがある場合にのみ使用してください。
def reject[A](errors: NonEmptyList[String]): ValidationNEL[String, A] =
Failure(errors)
あなたはこのterserがNonEmptyList.apply
の署名をコピー(およびString
にそれを専門とする)して、使用することができます:
def reject[A](h: String, t: String*): ValidationNEL[String, A] =
Failure(NonEmptyList(h, t: _*))
はのは、それを試してみましょう:
scala> reject("foo", "bar", "baz")
res0: scalaz.package.ValidationNEL[String,Nothing] = Failure(NonEmptyList(foo, bar, baz))
あなただけ作ることができます空リストにもエラーがあります:) – Apocalisp
それは本当です、私はそれを考えていませんでした。実行時に 'errors'が計算されると便利ですが、コード内にリテラルを書くと仮定しました。私は "おっと、あなたはtehコードでエラーを書くのを忘れてしまった"と疑うのは、実行時に便利なエラーになります。 –
また、「エラー:エラーはありませんでした。 – Apocalisp