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

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

だから x+y を多重定義するっていうアイデアが生まれる. 型クラスはそれとはまた別の話.

2012-11-27 23:42:40
でちまるさん(実際かわいい) @decimalbloat

あれか.「これは歴史的観点からしてこう教えるのが自然で理にかなっているんだ!」という話?

2012-11-27 23:44:47
XENO @xenophobia__

@koyama41 個人的には、型クラスは結局何かある性質を持った型すべてに対して抽象化された関数を使いたい/書きたいときにつかうものと捉えているので、だからdo記法を使えるもの全体としてのモナドがある……という理解ですね。

2012-11-27 23:45:22
XENO @xenophobia__

糖衣構文が云々の話なのか。うーむ……

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

人と共有できるものを「個人的に」と言ってしまうのには違和感があるし責任逃れしようとしてるようにしか思えん

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

人によって見方が違うのは当たり前だという前提があるからそう思うだけかもだけどねー.

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

「個人的な」という言葉の意味を「人と共有できない」と認識するのはあまり一般的ではないかもですね

2012-11-27 23:52:36
XENO @xenophobia__

そもそもC++に疎いので演算子多重定義が糖衣構文なのを知らなかった。Haskellの+がIntでもDoubleでも使えるとかいう話とはまた別なのな。

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

C++はHaskellみたいに演算子を自前で定義できません. RT @xenophobia__: そもそもC++に疎いので演算子多重定義が糖衣構文なのを知らなかった。Haskellの+がIntでもDoubleでも使えるとかいう話とはまた別なのな。

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

Haskell において (+) は言語組み込みでも何でもない演算子の一つだけど, C++ における + は言語組み込みの演算子です.

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

んで, do は Haskell において言語組み込みの機能です.

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

C++ における + と Haskell における do は,言語組み込みの機能であるという点で共通しています. 別に C++ の + 演算子が糖衣構文だと言ってるわけではないです(元々の意味があるので). ただし + 演算子を特別扱いせず関数にすることは可能です.

2012-11-27 23:59:30
XENO @xenophobia__

確かにそりゃそうだな。そこの違いは重要だ。

2012-11-28 00:00:34
普通のC++使い、銀天すばる @SubaruG

ただ,言語の機能を可能な限り削ろうとすれば, + 演算子を標準ライブラリの関数として実装することも可能ですが,それは面倒なので + 演算子は演算子として楽に表記できるようになってます. そういう意味では糖衣構文と言えなくも無いです.

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

Haskell は言語組み込みで Monad を(正確には (>=) や (>>) や fail を)特別扱いしている.

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

そういう例は他の言語にはたくさんあるけど,こと Haskell でそれをやってる,っていうのは,まぁ特別だと思うのが自然だろう. なにしろ Haskell さんは (+) とかの演算子すら言語組み込みじゃないし. (ただし - 演算子は特別扱い)

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

Haskell で (-) を特別扱いするのは式を自然に書くためで, Monad を特別扱いするのは命令を自然に書くためですにゃ.

2012-11-28 00:08:07
鯉江 @koie

@SubaruG 単項のほうですか?どうなってるんですか?

2012-11-28 00:10:18
普通のC++使い、銀天すばる @SubaruG

@koie 単純に Haskell 唯一の単項演算子であり,単項演算子はユーザ定義できないって時点で特別扱いですね. それに加えて二項演算子でもあるのでセクションに使えない( (- a) が \x -> x - a ではなく negate a と解釈される)のも特殊です.

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

@koie 特別扱いしないのであれば, -a という表記は止めて, not みたいに negate a みたいに書かせる筈なのです.

2012-11-28 00:14:50
XENO @xenophobia__

ひさしぶりにHaskellに長時間触れられたし、個人的にはいいツイッターだった。

2012-11-28 00:32:52

NaOHaq(苛性ソーダ) @NaOHaq

なんかList Comprehension(リスト内包表記)の話が出なかったな……。あれはListがMonadのインスタンスになってて嬉しいことの一つなんだけど

2012-11-28 12:12:52
前へ 1 ・・ 4 5 次へ