Составьте проверки Scalaz

Я бы хотел использовать Scalaz для проверки и хотел бы иметь возможность повторно использовать функции проверки в разных контекстах. Кстати, я совершенно новичок в Скалазе.

Допустим, у меня есть эти простые проверки:

def checkDefined(xs: Option[String]): Validation[String, String] =
  xs.map(_.success).getOrElse("empty".fail)

def nonEmpty(str: String): Validation[String, String] =
  if (str.nonEmpty) str.success else "empty".fail

def int(str: String): Validation[String, Int] = ...

Мне нравится иметь возможность составлять проверки, в которых вывод от одного передается в другой. Я мог бы легко сделать это с помощью flatMap или через для понимания, но мне кажется, что должен быть лучший способ, чем этот.

for {
  v1 <- checkDefined(map.get("foo"))
  v2 <- nonEmpty(v1)
  v3 <- int(v2)
  v4 <- ...
} yield SomeCaseClass(v3, v4)

или

val x1 = checkDefined(map get "foo").flatMap(nonEmpty).flatMap(int)
val x2 = check(...)

// How to combine x1 and x2?

Есть какие-нибудь мысли от экспертов Scalaz?

14
задан oxbow_lakes 24 February 2012 в 10:08
поделиться