2013-06-02 10 views
11

私はクラスの階層のMonadを本当に深く理解しようとしています。それはもちろん、多くの例を見ていますが、私はこれらのクラスがどのように最初に発見されたか、その動機の歴史に特に興味があります。Functor型クラスの歴史は何ですか?

私はが当初、ハスケルのIO問題の解決策として出てきたことを理解しており、1989-92年のMoggiとWadlerの論文をよく知っています。

Conor McBrideとRoss Patersonの「Applicative Programming with Effects」でApplicativesが紹介された場所も見てきました。

私の質問では、普及したものはFunctorです。彼らはいつ来たのですか? Functorはスーパークラスではないので、の後になければならないと思いますが、LISPの初期から一般化されたマップ関数を使用している人はいませんか?

+2

Functorクラスは、Monadのスーパークラスの最初のバージョン(1.3がリリースされる前)でしたが、これは不必要なスーパークラスだと感じていたので、(悲しいことに)後退しました。 – augustss

+3

"LISPの初期から一般化されたマップ関数を使用していない人はいませんか?"ほとんどの場合、これらの「一般化されたマップ関数」はコレクションまたはシーケンスベースであるという点で、1つの違いがあります。今日でさえ、これはClojureなどで見られます。[map'関数はコレクションを取得し、遅延配列を返します](http://clojuredocs.org/clojure_core/1.2.0/clojure.core/map)。対照的に、 'Functor'クラスは等式法に基づいており、' IO'やFRP' Behavior'型のような非コレクション実装につながる実装については想定していません。 –

答えて

14

Functorは、モナドIOとそれより上位の種別の両方のクラスを標準化したHaskellレポートの1.3バージョンに含まれていました。だから、Functorのtypeclassは、モナドtypeclassと同じくらい古いものです。さらに、Functorは、ジョーンズの論文の「コンポーザークラス」の最初の動機付けの例です。ジョーンズの論文がこのアイデアを一般化したと言うかもしれませんが、あなたが指摘しているように、人々は一般化されたマップを永遠に望んでいました。

+5

確かに。ジョースは、彼らがHaskellで採用される前のある時点で、Goferでコンストラクタークラスを実装しました。 Haskell Users's Gofer Systemは、ghcが最先端である前の数日間、より高度なタイプのシステムにハスケルの人々がアクセスできるようにするために導入されました。 – AndrewC

+0

優秀!これはすばらしい紙のように見え、最初のセクションはまさに私が望んでいたものです。 –

+6

論文はhttp://www.cs.tufts.edu/comp/150GIT/archive/mark-jones/fpca93.pdfにあります。 – AndrewC