我正在尝试验证无效方法的参数,但我找不到解决方案......
谁能告诉我该怎么办?
我正在尝试这样的事情:
def buildNormalCategory(user: User, parent: Category, name: String, description: String): Either[Error,Category] = {
val errors: Option[String] = for {
_ <- Option(user).toRight("User is mandatory for a normal category").right
_ <- Option(parent).toRight("Parent category is mandatory for a normal category").right
_ <- Option(name).toRight("Name is mandatory for a normal category").right
errors : Option[String] <- Option(description).toRight("Description is mandatory for a normal category").left.toOption
} yield errors
errors match {
case Some(errorString) => Left( Error(Error.FORBIDDEN,errorString) )
case None => Right( buildTrashCategory(user) )
}
}
Run Code Online (Sandbox Code Playgroud) 我在寻找它利用单子(和类群可能)更广泛的解决方案,实现同
if( xs.contains(None) ) None else Some(xs.flatten)做的xs类型Seq[Option[A]].
我怎么能用Scalaz做到这一点?我觉得我错过了一些明显的东西.
我是函数式编程工作的初学者,我有一系列ValidationNEL [A,B],我想将错误累积到新的ValidationNEL [A,B]中.这取决于B是来自遗留代码的可变数据结构这一事实,因此持有Seq [B]会过度.
我从其他帖子中了解到,通过序列方法可以累积错误和成功:处理Scalaz6验证列表
根据我的理解,一切都来写一个正确的Applicative,也许是一个正确的Traverse.
trait MA[M[_], A] extends PimpedType[M[A]] with MASugar[M, A] {
def sequence[N[_], B](implicit a: A <:< N[B], t: Traverse[M], n: Applicative[N]): N[M[B]] =
traverse((z: A) => (z: N[B]))
def traverse[F[_],B](f: A => F[B])(implicit a: Applicative[F], t: Traverse[M]): F[M[B]] =
t.traverse(f, value)
}
Run Code Online (Sandbox Code Playgroud)
我该如何开始?当我试图查看Scalaz源代码以了解如何实现我的Applicative时,我非常困惑.我甚至无法找出哪个应用程序允许在验证中累积失败和成功.