MonadはIOとdo記法のためにあると説明した方がわかりやすくね?

当初、@SubaruGさんの 「Haskell は言語組み込みで Monad を(正確には (>>=) や (>>) や fail を)特別扱いしている.」 という発言の意図がわからなかったので、流れを追っかけたついでにまとめました。
5
前へ 1 2 ・・ 6 次へ
普通のC++使い、銀天すばる @SubaruG

そもそも do { Just a <- ~; } とか書けるのを知らない人って多いんかなー.

2012-11-27 22:04:27
普通のC++使い、銀天すばる @SubaruG

いちいち case 書くの面倒なのでよく使いますハイ

2012-11-27 22:05:05
XENO @xenophobia__

それは思うし、そこが不満だという話は2回ぐらいツイートした。

2012-11-27 22:06:14
XENO @xenophobia__

うーん、つまり「パターンマッチングの失敗」と「モナドが表す文脈における計算の失敗」が混同されてるのか……あんまり好きじゃないけどそっちのほうがだいぶ便利そうだ。

2012-11-27 22:04:50
スマートコン @mr_konn

fail の ad-hoc さに関しては、Typeclassopedia でも採り上げられてましたね。

2012-11-27 22:05:09
スマートコン @mr_konn

Just a <- って書いても fail がエラーだったりする場合が往々にしてあるので余り嬉しくない

2012-11-27 22:06:44
XENO @xenophobia__

do{Just x <- …; ~}という書きかたが可能なのは、http://t.co/vjUzxpXU.Syntax中のStmt型を見れば BindS Pat Exp とあるので理解できる。

2012-11-27 22:08:13
普通のC++使い、銀天すばる @SubaruG

fail _ = mzero になってない MonadPlus は(ry RT @mr_konn: Just a <- って書いても fail がエラーだったりする場合が往々にしてあるので余り嬉しくない

2012-11-27 22:08:22
スマートコン @mr_konn

@SubaruG そもそも MonadPlus じゃないものも多いですしねえ。

2012-11-27 22:08:53
普通のC++使い、銀天すばる @SubaruG

@mr_konn そういうもんに対しては return _|_ で問題無いと思います.

2012-11-27 22:09:42
XENO @xenophobia__

"fail関数はMonadクラスにいるべきではないひどいハックです。" http://t.co/CG5RLZd2

2012-11-27 22:10:48
普通のC++使い、銀天すばる @SubaruG

mzero が [return] _|_ でないにも関わらず fail を実装してない Monad は使いにくい

2012-11-27 22:10:50
スマートコン @mr_konn

@SubaruG うーん、もともと例外を投げられるような型だったりする場合は return ⊥ でやられるとその所で例外が起きないので嬉しくなかったりすると思いますが……

2012-11-27 22:11:11
普通のC++使い、銀天すばる @SubaruG

僕はモナドの本質は「便利さ」だと思ってるので. RT @koyama41: @SubaruG モナドは確かに失敗する可能性のある計算の抽象化なのでその意味では重要な構成要素なんですけど、「パターンマッチ」という概念がモナドの本質ではないからオマケ扱いされるんだと思います

2012-11-27 22:12:23
普通のC++使い、銀天すばる @SubaruG

理論的に美しいからじゃなくて便利だから使ってる.

2012-11-27 22:13:01
普通のC++使い、銀天すばる @SubaruG

@mr_konn アッハイそうですね.それは間違い無いです

2012-11-27 22:13:49
スマートコン @mr_konn

@SubaruG まあようは適材適所ですね…

2012-11-27 22:14:14
普通のC++使い、銀天すばる @SubaruG

理論的に美しいものが使いたければ OCaml でも使っとけです. 実績はそっちの方が多いですし?

2012-11-27 22:14:25
XENO @xenophobia__

Monadの使われ方とかdo記法のことを考えれば、fail関数はすべてのモナドに実装されているべき。「Monadとは何か」つきつめて考えると、failの存在は奇異に感じる。 「mがモナドのインスタンスなら、String -> m aという関数は必ず存在すべきか?」

2012-11-27 22:14:44
KOYAMA Youichi @koyama41

@SubaruG do は便利だから使う、っていうのでいいのですが、 do が Monad である必要はないんですよ。例えば Monad は理論的に美しい姿のままにしておいて、そこに fail を付け加えた MonadFail を準備して、それの糖衣を do にするとか、でも。

2012-11-27 22:15:41
XENO @xenophobia__

そもそもString -> m aのaって何、って思ってしまう。

2012-11-27 22:15:53
普通のC++使い、銀天すばる @SubaruG

手続き型言語の関数が数学における関数とは別物であるように, Haskell の Monad は数学の Monad とは別物であって,今更それを変えようとしても遅いと思う

2012-11-27 22:17:25
普通のC++使い、銀天すばる @SubaruG

Haskell が便利じゃなかったら今これほど使われてないです. や,今もあんまり使われてないけど

2012-11-27 22:18:37
XENO @xenophobia__

うーん、そりゃ別に数学との整合性なんて今更どうでもいいっちゃいいんだが、そういうことではない……

2012-11-27 22:19:04
前へ 1 2 ・・ 6 次へ