These are chat archives for scalajp/functional

13th
Oct 2014
Shuya Tsukamoto
@tsukaby
Oct 13 2014 03:53
すみません、scalaアプリで関数の引数の検証をどう実装したもんか・・・と思いscalazのValidationを試している最中なのですが、こんな感じで使い方あっていますでしょうか。
import scalaz.Scalaz._
import scalaz._

object Main extends App {
  sampleValidation

  def sampleValidation {
    val name = ""
    val age = 17

    // failure = NonEmptyList(空の名前は許可されていません, 未成年は許可されていません)
    validatePerson(name, age) match {
      case Success(a) => println(s"success = $a")
      case Failure(e) => println(s"failure = $e")
    }
  }

  def validatePerson(name: String, age: Int): ValidationNel[String, Person] = {
    val validatedName: ValidationNel[String, String] =
      if (name.isEmpty) "空の名前は許可されていません".failureNel[String] else name.successNel[String]
    val validatedAge: ValidationNel[String, Int] =
      if (age < 18) "未成年は許可されていません".failureNel[Int] else age.successNel[String]

    (validatedName |@| validatedAge)(Person)
  }

}

case class Person(name: String, age: Int)
宜しければつっこみください!
kenji yoshida
@xuwei-k
Oct 13 2014 04:37
特に言うこと無い(使い方あってる)と思います
Shuya Tsukamoto
@tsukaby
Oct 13 2014 04:46
ありがとうございます!