相关疑难解决方法(0)

Scala中的方法参数验证,用于理解和monad

我正在尝试验证无效方法的参数,但我找不到解决方案......

谁能告诉我该怎么办?

我正在尝试这样的事情:

  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)

monads scala either for-comprehension

33
推荐指数
3
解决办法
7950
查看次数

如果A和B是单子,如何将A [B [C]]转换为B [A [C]]?

我在寻找它利用单子(和类群可能)更广泛的解决方案,实现同 if( xs.contains(None) ) None else Some(xs.flatten)做的xs类型Seq[Option[A]].

我怎么能用Scalaz做到这一点?我觉得我错过了一些明显的东西.

monads scala scalaz

12
推荐指数
1
解决办法
802
查看次数

仅累积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时,我非常困惑.我甚至无法找出哪个应用程序允许在验证中累积失败和成功.

scala scalaz

5
推荐指数
1
解决办法
948
查看次数

标签 统计

scala ×3

monads ×2

scalaz ×2

either ×1

for-comprehension ×1