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

当初、@SubaruGさんの 「Haskell は言語組み込みで Monad を(正確には (>>=) や (>>) や fail を)特別扱いしている.」 という発言の意図がわからなかったので、流れを追っかけたついでにまとめました。
5
XENO @xenophobia__

二項演算子や関数を全部Num a => Maybe aみたいな型の間の演算にして、 runCalculus $ (a+b)*c/d で走らせて、計算がうまくいったかは最後で一度だけパターンマッチングで確認、駄目だった場合の例外処理も書く……か。さすがにめんどいな。

2012-11-27 20:55:10
XENO @xenophobia__

(/) :: Num a => a -> {x::a|x/=0} -> a みたいな依存型を…… #型ガチ勢

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

xの0乗は1とは限りません.(x=0で未定義

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

Monad にして 0 除算した場合は error しようぜ! >RT

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

MonadPlus 拘束にして mzero でもよかったけど, fail の方が汎用的だよね

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

fail x = mzero じゃない MonadPlus は爆発しろ.

2012-11-27 21:36:56
でちまるさん(実際かわいい) @decimalbloat

それMonadじゃなくてApplicativeで十分じゃね?

2012-11-27 21:38:24
でちまるさん(実際かわいい) @decimalbloat

と思ったがあれか,div by zeroを定義したかったのか.

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

fail は Applicative には存在しませんゆえ RT @decimalbloat: それMonadじゃなくてApplicativeで十分じゃね?

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

突っ込みどころとしては,むしろ「 m a -> m a -> m a ではなく a -> a -> m a の方が Haskell 的では?」の方だと思う

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

Alternative でいいじゃん,という意見は歓迎するです

2012-11-27 21:41:41
XENO @xenophobia__

モナディック(failure)さんすう。9/0は(failure DivideByZero) http://t.co/jMzZpSJZ #Haskell

2012-11-27 21:44:39
XENO @xenophobia__

このオーバーキル感よ。

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

fail は Monad の重要な構成要素なんだけど( do 式中の <- によるパターンマッチに失敗した場合に呼ばれる, Maybe とか [] モナドで特に有用),何故か影が薄い.

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

fail があるから do { Just a <- x; ~ } とか書けるのです.

2012-11-27 21:48:48
XENO @xenophobia__

すまぬ……あんまりfail好かんのだ……

2012-11-27 21:57:54
XENO @xenophobia__

あ、便利さは認めてますよ。

2012-11-27 21:58:23
XENO @xenophobia__

っていうか、do式のパターンマッチング失敗時ってfail呼ばれてるの知らなかった。

2012-11-27 22:01:08
XENO @xenophobia__

@henkma ふむふむ、そうなんですか……

2012-11-27 22:02:24
1 ・・ 6 次へ