web-dev-qa-db-ja.com

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

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

新しい概念(例 forallキーワードSTモナド )とHaskellの型システム一般を学習しようとしている間、私は継続的に カテゴリ理論 からの概念に出くわします=および ラムダ計算 。だから、私は思う:

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

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

私は Types and Programming Languages をすぐに取り上げたいと思っていますが、適切と思われる代替の参考資料を提案してください。

9
Rob

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

私はHaskellを数年間使用していて、好奇心からいくつかのカテゴリー理論を採用しましたが、それは本当に必要ではありません。一方で、これらのすべての抽象化が「全体像」にどのように適合するかを見るのは素晴らしいことですが、私は行きませんでした。「まあ、これをMaybeカテゴリから[]sへのプロファンクターにするだけで保存できます王女!"。

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

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

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

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

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

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

11
Daniel Gratzer