Scala の Either についての考察

3
Kenji Yoshida @xuwei_k

Either にするべきか Option にするべきかそれとも・・・(´・ω・`)

2011-09-22 13:20:21
Kenji Yoshida @xuwei_k

Eihter じゃなくて Validation を使うべきじゃなイカ疑惑(´・ω・`)

2011-09-26 13:28:19
Kenji Yoshida @xuwei_k

NonEmptyList (*´Д`)ハァハァ

2011-09-26 14:05:20
Kenji Yoshida @xuwei_k

scalaz 力が足りないので、あきらめてprintデバックでもするか・・・(´・ω・`)

2011-09-26 15:28:34
Kenji Yoshida @xuwei_k

誰か、Scala標準の Either と scalaz の Validation の違いをわかりやすく説明してくれないかな・・・

2011-09-26 18:15:56
Kenji Yoshida @xuwei_k

Either を チェーンしていくときに、毎回 Either に対して right メソッド呼ぶことになってあばばばばばばばばって考えると、 scalaz の validation のほうが使いやすい気がっ

2011-09-26 18:41:29
Kenji Yoshida @xuwei_k

といいつつまだよくわかってないので、 Either を大量に書いてるなう(´・ω・`)

2011-09-26 18:48:20
Kenji Yoshida @xuwei_k

Either は、Right と Left が対象的(condとかfoldの引数の順序くらいを除いて) けど Scalaz の Validation は違う

2011-09-27 20:52:08
Kenji Yoshida @xuwei_k

そもそも、 Either と Validation を比べること自体の意味がどーなのかっていう(´・ω・`)?

2011-09-27 20:52:55
Kenji Yoshida @xuwei_k

Either に対して right 呼んで RightProjection にして map して、そのあとまた e メソッド呼んで Either 型で取り出して、今度は left 呼んで LeftProjection 型にして、それに対して map してとかそれほどやらないよな?

2011-09-27 20:56:33
Kenji Yoshida @xuwei_k

基本的にLeftをエラー値として扱うのならば、 ①成功の場合の処理のみをRightProjectionに対してmapもしくはflatMapのchainで記述。 ②どこかのタイミングでエラー処理をして、その時点でEitherのchainが終了。 ってなるような

2011-09-27 21:01:10
Kenji Yoshida @xuwei_k

そう考えるとEither自体を「LeftをエラーRightを成功として扱ってchain」という使い方をする場合そもそも微妙に使いにくい => そういう用途ならそもそもScalazのValidationのほうがいいんじゃね?じゃあEitherはどういう使い方するものなの?(イマココ

2011-09-27 21:05:18
Kenji Yoshida @xuwei_k

まぁ考えてもわからなくもないかもしれないけど、これ以上は他の(関数型)言語の例を探すか、海外のblogで、EitherとかValidationについて書かれているのを探すほうが手っ取り早いという

2011-09-27 21:07:54
Kenji Yoshida @xuwei_k

メソッドの戻り値を(例外の代わりに)Eitherに包んで返しても、そのあとすぐパターンマッチしてとりだして、Leftの場合とRightの場合とそれぞれの処理書いてたら、例外をcatchするのと変わらないわけで、mapとかflatMap使って綺麗にchainすることに意味あるわけで

2011-09-27 21:11:15
Kenji Yoshida @xuwei_k

ところで、 LeftProjection と RightProjection ってほとんど同じこと書いてて DRY じゃない気がするんだけど、もうちょっと頑張って共通の親Class定義とかして共通化できなかったのかな?それやっちゃうと不都合生じるのかな?とか微妙な疑問が

2011-09-27 21:16:21