Scalaz 验证 NEL mkString
Scalaz validation NEL mkString
我正在尝试学习 scalaz 验证,并给出了这段代码:
AuthorValidator.validate(author) match {
case scalaz.Success(authorValidated) => onSuccess(authorService.addAuthor(authorValidated)) { extract: Int =>
complete(StatusCodes.OK -> extract+"")
}
case scalaz.Failure(failure) => complete(StatusCodes.Accepted, failure mkString "/") // this piece won't work
}
}
我想从 failure : NonEmptyList[String]
获取格式化字符串。基本上,我不能使用 mkString。你知道 scalaz 是否提供了一些格式化 NEL 的方法吗?
A NonEmptyList
只是一个带有额外保证(非空)的列表,所以你总是可以安全地将一个转换为普通的 Scala List
以便使用像 [=14 这样的方法=]:
import scalaz.NonEmptyList, scalaz.syntax.foldable._
def formatNel(nel: NonEmptyList[String]): String = nel.toList.mkString("/")
foldable
语法导入通过 NonEmptyList
的 Foldable
实例提供 toList
方法。您也可以使用 nel.list.toList
首先转换为 scalaz.IList
,但这有点冗长,并且对于大型列表来说效率可能较低(我不确定)。
还有许多其他方法可以直接编写此代码,而无需转换为 Scala 列表。一种是转换为 IList
然后使用 intersperse
和 suml
:
import scalaz.NonEmptyList, scalaz.std.string._, scalaz.syntax.foldable._
def formatNel(nel: NonEmptyList[String]): String = nel.list.intersperse("/").suml
不过,对于格式化为字符串之类的东西,我可能会坚持使用 toList.mkString
,因为它清晰、熟悉,而且可能效率更高,因为它不如 suml
通用(尽管在大多数情况下这不太重要)。
我正在尝试学习 scalaz 验证,并给出了这段代码:
AuthorValidator.validate(author) match {
case scalaz.Success(authorValidated) => onSuccess(authorService.addAuthor(authorValidated)) { extract: Int =>
complete(StatusCodes.OK -> extract+"")
}
case scalaz.Failure(failure) => complete(StatusCodes.Accepted, failure mkString "/") // this piece won't work
}
}
我想从 failure : NonEmptyList[String]
获取格式化字符串。基本上,我不能使用 mkString。你知道 scalaz 是否提供了一些格式化 NEL 的方法吗?
A NonEmptyList
只是一个带有额外保证(非空)的列表,所以你总是可以安全地将一个转换为普通的 Scala List
以便使用像 [=14 这样的方法=]:
import scalaz.NonEmptyList, scalaz.syntax.foldable._
def formatNel(nel: NonEmptyList[String]): String = nel.toList.mkString("/")
foldable
语法导入通过 NonEmptyList
的 Foldable
实例提供 toList
方法。您也可以使用 nel.list.toList
首先转换为 scalaz.IList
,但这有点冗长,并且对于大型列表来说效率可能较低(我不确定)。
还有许多其他方法可以直接编写此代码,而无需转换为 Scala 列表。一种是转换为 IList
然后使用 intersperse
和 suml
:
import scalaz.NonEmptyList, scalaz.std.string._, scalaz.syntax.foldable._
def formatNel(nel: NonEmptyList[String]): String = nel.list.intersperse("/").suml
不过,对于格式化为字符串之类的东西,我可能会坚持使用 toList.mkString
,因为它清晰、熟悉,而且可能效率更高,因为它不如 suml
通用(尽管在大多数情况下这不太重要)。