Haskellでのエラーの扱い方。あるいはApplicative, Monad等とliftが多くなることについての考え。
- gusmachine
- 5661
- 0
- 6
- 0
@tanakh エラーといえば、IOじゃないんですけどerror :: String->a でモナドじゃないとこからでもエラーを投げられるのがありますよね、あれは使っていいもんなんでしょうか?
2011-04-14 16:05:15Haskell的には、エラーを例外で投げるというのはやはり美しくない。エラーを投げるというコンテクストが型によって明示されているべきであって、IOが何でもありなのはともかく、purelyに投げられるのはほんと良くない。
2011-04-17 10:04:55errorは使いたくないです。どこでなに経由してエラーがでたかさっぱり分からなくなるし。じゃあ、型エラーでそもそもはじくか、エラーをきちんと分別回収できるようにしておくかだけど、どっちも荷が重そう。とくに型は限られた場合にしか使えなさそう。
2011-04-17 10:13:01@tanakh たとえばhead [] すら、errorつかわないで書けるのでしょうか?僕にはまだどうするのか想像できないですがなったらすばらしいと思います
2011-04-17 10:14:20その場合、ヘッダの型が [a] -> m a になって、mは何らかのエラーを含むことのできるコンテキストのモナドの型クラスになるでしょう。それが利便性に影響を与えないかという危惧もあると思いますけど、今や我々は数多くのモナドを操るための手段を持っているので、苦労はないと思っている
2011-04-17 10:17:38普通な値と普通な関数は、スペースというとても簡単なものでapplyできるので、とてもそれを使いたくなってしまうのだけど、リフトした値だってHaskellでは簡単にapplyできるのだから、好きなだけリフトすべきだと最近は思う。
2011-04-17 10:19:15一度不確定計算に入ったらずっとMaybeを書き続けるなんて悪夢のようだとおもっていたけど、よく考えたら一度不確定になったものはずっと不確定であるべきだし、きっとGreat Goodをこの先読んでいけば自然に使えるようになるはず
2011-04-17 10:21:23@nushio それとおなじで、IO使うと全体をIOにしないといけないから嫌という意見もあったりするけど、これもよく考えればずっとIOになるのはあたりまえだということがわかると思います
2011-04-17 10:27:04