MonadはIOとdo記法のためにあると説明した方がわかりやすくね?
うーん、つまり「パターンマッチングの失敗」と「モナドが表す文脈における計算の失敗」が混同されてるのか……あんまり好きじゃないけどそっちのほうがだいぶ便利そうだ。
2012-11-27 22:04:50do{Just x <- …; ~}という書きかたが可能なのは、http://t.co/vjUzxpXU.Syntax中のStmt型を見れば BindS Pat Exp とあるので理解できる。
2012-11-27 22:08:13fail _ = mzero になってない MonadPlus は(ry RT @mr_konn: Just a <- って書いても fail がエラーだったりする場合が往々にしてあるので余り嬉しくない
2012-11-27 22:08:22mzero が [return] _|_ でないにも関わらず fail を実装してない Monad は使いにくい
2012-11-27 22:10:50@SubaruG うーん、もともと例外を投げられるような型だったりする場合は return ⊥ でやられるとその所で例外が起きないので嬉しくなかったりすると思いますが……
2012-11-27 22:11:11僕はモナドの本質は「便利さ」だと思ってるので. RT @koyama41: @SubaruG モナドは確かに失敗する可能性のある計算の抽象化なのでその意味では重要な構成要素なんですけど、「パターンマッチ」という概念がモナドの本質ではないからオマケ扱いされるんだと思います
2012-11-27 22:12:23Monadの使われ方とかdo記法のことを考えれば、fail関数はすべてのモナドに実装されているべき。「Monadとは何か」つきつめて考えると、failの存在は奇異に感じる。 「mがモナドのインスタンスなら、String -> m aという関数は必ず存在すべきか?」
2012-11-27 22:14:44@SubaruG do は便利だから使う、っていうのでいいのですが、 do が Monad である必要はないんですよ。例えば Monad は理論的に美しい姿のままにしておいて、そこに fail を付け加えた MonadFail を準備して、それの糖衣を do にするとか、でも。
2012-11-27 22:15:41手続き型言語の関数が数学における関数とは別物であるように, Haskell の Monad は数学の Monad とは別物であって,今更それを変えようとしても遅いと思う
2012-11-27 22:17:25