errors
空である可能性があり、List
タイプの値がないように制約しているため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)
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))