Monad クラスと Functor クラスや Applicative クラスの間に階層関係がないのは、本当に「歴史的理由」か?

Functor クラスと Applicative クラス、Monad クラスが Functor => Applicative => Monad という階層構造になっていない理由として、よく歴史的な理由という説明が使われます。ですが、本当に歴史的な経緯が主な理由でそうなっているのでしょうか? 歴史的な経緯が事実だとしても、他にも強い理由が存在するのに歴史的な理由という説明によって覆い隠されていないでしょうか?
11
ふみ (DJ Monad) @fumieval

同感。歴史の流れからApplicative => Monadになっていないのも不満

2012-11-20 19:17:38
shelarcy(しぇらーしぃ) @shelarcy

Applicative => Monad になっていないのは、本当に歴史的な理由でしょうか? 

2012-11-21 23:57:41
shelarcy(しぇらーしぃ) @shelarcy

多くの方が「歴史的経緯」とか「歴史的な理由」と説明するのは Typeclassopedia での記述を受けてのものだと思いますが……果たして「歴史的経緯」は現在でも強い理由の一つでしょうか?

2012-11-21 23:57:56
shelarcy(しぇらーしぃ) @shelarcy

あらゆる文書中の記述は古くなる可能性があります。「歴史的経緯」や「歴史的な理由」という記述でさえ、その例外ではありません。

2012-11-21 23:58:22
shelarcy(しぇらーしぃ) @shelarcy

Typeclassopedia が書かれた頃はまだ Applicative が使われ始めた時期で、Applicative が広く使われるようになれば、階層化されるに違いないという期待があったと思います。

2012-11-21 23:58:33
shelarcy(しぇらーしぃ) @shelarcy

(実際には別の理由もあり [http://t.co/RHqGZaub http://t.co/HS1dQA2n ] 、それを理由に階層化は未だ実行されていないわけですが。)

2012-11-21 23:58:45
shelarcy(しぇらーしぃ) @shelarcy

また、(メールを探すのが手間なのでリンクは張りませんが、)確か「Haskell' 始動 ー Haskell 2010 制定」まで辺りは、言語標準内の型クラスの定義を変更する場合、「Haskell 言語標準の方を改訂して、それからライブラリに手を入れるべきだ」という風潮がありました

2012-11-21 23:58:57
shelarcy(しぇらーしぃ) @shelarcy

Typeclassopedia がこの頃書かれたということを考えれば、この文書で「Monad クラスと Functor クラス、Applicative クラスの間に階層関係がない」理由の一つとして歴史的経緯を挙げるのも当然かもしれません。

2012-11-21 23:59:21
shelarcy(しぇらーしぃ) @shelarcy

ただ、GHC 7.4.1 の Num クラスに対する変更や 7.6.1 の Bits クラスに対する変更を見て分かるように、現在では Haskell 言語標準に縛られることなく言語標準内の型クラスの定義を変更できるようになっています。

2012-11-21 23:59:38
shelarcy(しぇらーしぃ) @shelarcy

従って、今となっては、歴史的経緯は理由としては弱く、別の理由によって階層化が妨げられていると考えた方が妥当性が高いと思います。

2012-11-22 00:00:03