Scalazで文字列を数値型に変換してみる

最近はScalaのライブラリを試しているのですが、メジャーどころということでScala IOやScalazで遊んでいます。Scala IOは目的がはっきりしているのですが、Scalazはどんな機能があるのかを探るところから。Scalazの概要についてはid:kmizushimaさんの以下のスライドが参考になります。

まずは上記のスライドにもある、インポートするだけで基本的な型に勝手に追加される便利メソッドのうち、用途がイメージしやすいものということで文字列を数値型に変換するメソッドを使ってみました。

// インポートするだけで使える
import scalaz._
import Scalaz._

val str = "xxx"

// 文字列をIntに変換
val result: Int = str.parseInt match {
  case Success(i) => i
  case Failure(e) => 0
}

parseIntメソッドの戻り値はValidation[NumberFormatException, Int]です。これはEitherみたいなもののようで、上記のコードではパターンマッチを使用して変換に成功した場合はその値、失敗した場合はデフォルト値として0を返すようにしています。
ちなみにparseIntメソッド(StringWトレイトで定義されている)の実装は以下のようになってました。普通のtry〜catchで成功した場合はSuccess、失敗した場合はFailureのインスタンスを生成して返しているだけで特に難しいことはありません。

def parseInt: Validation[NumberFormatException, Int] = try {
  success(java.lang.Integer.parseInt(s))
} catch {
  case e: NumberFormatException => failure(e)
}

Scalazには様々な機能があるので少しずつ見ていこうと思います。