数学はHaskellの型システムの背後にある理論を理解する必要がありますか?


9

最近、私はハスケルに深く興味を持っています。

新しい概念(forallキーワードSTモナドなど)とHaskellの型システム全般を学習しようとしている間、私は絶えずカテゴリー理論ラムダ計算の概念に出くわしました。だから、私は思う:

  1. Haskellの型システムを十分に理解するには、数学の他のどの分野が重要ですか?

  2. これらの数学の厳密な研究を見逃して、代わりに特定の関連する概念に焦点を当てることはできますか?(例えば、ラムダ計算における数量詞。)もしそうなら、どの概念が不可欠ですか?

タイプとプログラミング言語をすぐに取り上げたいと思っていますが、適切と思われる代替の参考資料を提案してください。


4
カテゴリ理論は、Haskellを理解して操作するために必須ではありませんが、いくつかの基本的な概念に役立ちます。このことを理解するための数学の本当の分岐は、カテゴリー理論のものだけです。そこに根ざしているだけでなく、他の数学への依存がほとんど見られず、そのように非常に孤立した領域です。ラムダ計算を取り上げて、さまざまなラムダ変数に関連するさまざまな型システムを調べます。それ以外は、このSOの回答を読んで、カテゴリ理論について読んでください。
ジミーHoffa 2013年

3
基礎となる型システムを習得するのにそれほど夢中にならないでしょう。少なくとも、すべてが2つのプロジェクトの完了を妨げていることを知らないようにしてください。Haskellでいくつかの単純なプロジェクトを完了するだけで、その背後にある数学的美しさを見ることができ、理解するようになりました。
ChaosPandion 2013年

2
@ChaosPandion私はその観点に同意しますが、STモナドでコードを書く必要があるかもしれないプロジェクトに取り組んでいます。関連するすべての型シグネチャを理解していなくてもコンパイルされるコードを書くのは難しいので、型システムの理解を深めるのは賢明だと感じました。
Rob

3
@robjb-より深い理解が賢明であることは確かにあなたに同意します。正直に言って、私のコメントはHaskellがあまりにも威圧的に試してみるのが難しいと感じるかもしれない一般の聴衆に向けられていました。
ChaosPandion 2013年

回答:


11

いいえ、Haskellを理解するためにカテゴリー理論に関する本を手に取る必要はありません。

私はHaskellを数年間使用しており、好奇心からいくつかのカテゴリー理論を採用しましたが、それは実際には必要ありません。一方で、それのクールは、これらすべての抽象化は、「全体像」の中に収まるかを確認するために、私はおやっ私のああ、私はちょうどこのからprofunctorようにする必要があり、」行かなかったMaybeのカテゴリ[]秒、その後、私は保存することができます王女!"。

ここで、Haskell型理論を使って何をしているのかに依存します。

Haskellを学んでいるだけなら、型システムのあらゆるニュアンスを理解しようとしないでください。しないでください、それは最初にC ++テンプレートのメタプログラミングを学ぼうとするようなものです。ファンシータイプは優れたツールですが、関数型プログラミングを十分に理解することは、予測できない多態性を理解することに勝ります。

ここで、Haskellの1〜2年後に、Haskellの型システムがどのように機能するかを微妙に理解しようとしているとしましょう。そうであれば、いくつかの型理論が役立つかもしれません。

これは、物事がどのように機能するかの背後にあるロジックのいくつかを理解するのに役立ちます。また、率直に言って、注目に値するコンピュータサイエンスIMOの本当にクールなブランチです。あなたが興味のある部分をチェリーピックしても、それでもまともな量を学ぶことができます。

Haskellの場合、STLC、HMタイプシステム(システムF)、そしておそらくラムダキューブ(HaskellはシステムFw iirc)とiso-recursiveタイプを調べます。型とプログラミング言語は、開始するための優れたリソースであり、これらすべてをカバーしています。

あなたが本当に冷たい援助を飲みたくて、あなたが新進のタイプの理論家であることに気づいたら、AgdaかCoqで突いてください。これらは「依存型」を特徴としており、ラムダキューブではHaskellよりも一歩進んでいます。依存型は、型を用語に依存させます。これは、型が実際に定理を証明するのに十分強力であることを意味します。好奇心旺盛な人にとっては、グーグルの「カレーハワード同型」は興味深い結果をもたらすはずです。


AgdaとCoqの簡単な説明が役立つでしょう。
ChaosPandion 2013年

@ChaosPandion更新
Daniel

いいですね。名前だけでは多くの人の興味を引くには不十分だと私は考えました。
ChaosPandion 2013年
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.