誰か、Scala標準の Either と scalaz の Validation の違いをわかりやすく説明してくれないかな・・・
2011-09-26 18:15:56Either を チェーンしていくときに、毎回 Either に対して right メソッド呼ぶことになってあばばばばばばばばって考えると、 scalaz の validation のほうが使いやすい気がっ
2011-09-26 18:41:29Either は、Right と Left が対象的(condとかfoldの引数の順序くらいを除いて) けど Scalaz の Validation は違う
2011-09-27 20:52:08Either に対して right 呼んで RightProjection にして map して、そのあとまた e メソッド呼んで Either 型で取り出して、今度は left 呼んで LeftProjection 型にして、それに対して map してとかそれほどやらないよな?
2011-09-27 20:56:33基本的にLeftをエラー値として扱うのならば、 ①成功の場合の処理のみをRightProjectionに対してmapもしくはflatMapのchainで記述。 ②どこかのタイミングでエラー処理をして、その時点でEitherのchainが終了。 ってなるような
2011-09-27 21:01:10そう考えるとEither自体を「LeftをエラーRightを成功として扱ってchain」という使い方をする場合そもそも微妙に使いにくい => そういう用途ならそもそもScalazのValidationのほうがいいんじゃね?じゃあEitherはどういう使い方するものなの?(イマココ
2011-09-27 21:05:18まぁ考えてもわからなくもないかもしれないけど、これ以上は他の(関数型)言語の例を探すか、海外のblogで、EitherとかValidationについて書かれているのを探すほうが手っ取り早いという
2011-09-27 21:07:54メソッドの戻り値を(例外の代わりに)Eitherに包んで返しても、そのあとすぐパターンマッチしてとりだして、Leftの場合とRightの場合とそれぞれの処理書いてたら、例外をcatchするのと変わらないわけで、mapとかflatMap使って綺麗にchainすることに意味あるわけで
2011-09-27 21:11:15ところで、 LeftProjection と RightProjection ってほとんど同じこと書いてて DRY じゃない気がするんだけど、もうちょっと頑張って共通の親Class定義とかして共通化できなかったのかな?それやっちゃうと不都合生じるのかな?とか微妙な疑問が
2011-09-27 21:16:21