Matematika diperlukan untuk memahami teori di balik sistem tipe Haskell?

9

Baru-baru ini, saya menjadi sangat tertarik pada Haskell.

Ketika mencoba mempelajari konsep-konsep baru (misalnya kata kunci forall dan ST monad ) dan sistem tipe Haskell secara umum, saya terus mengalami konsep-konsep dari teori kategori dan kalkulus lambda . Jadi, saya bertanya-tanya:

  1. Cabang matematika apa lagi yang penting untuk pemahaman yang kuat tentang sistem tipe Haskell?

  2. Dapatkah saya melepaskan studi keras matematika ini dan sebaliknya fokus pada konsep-konsep terkait tertentu? (misalnya bilangan dalam lambda calculus.) Jika ya, konsep mana yang penting?

Saya berharap untuk mengambil Jenis dan Bahasa Pemrograman segera, namun, tolong sarankan sumber bacaan alternatif yang Anda rasa sesuai.

rampok
sumber
4
Hal-hal teori kategori tidak penting untuk mengetahui dan bekerja dengan Haskell, tetapi dapat membantu dengan beberapa konsep dasar. Satu-satunya cabang nyata matematika untuk memahami hal-hal ini adalah dari Kategori Teori, tidak hanya berakar di sana, tetapi di dalamnya Anda akan menemukan sedikit ketergantungan pada matematika lain, itu adalah daerah yang sangat terisolasi dengan cara itu. Ambil kalkulus Lambda dan pelajari berbagai jenis sistem yang terkait dengan varian lambda yang berbeda, dan selain itu baca jawaban SO ini dan baca tentang teori kategori.
Jimmy Hoffa
3
Saya tidak akan begitu terjebak dengan menguasai sistem tipe yang mendasarinya. Setidaknya jangan biarkan tidak tahu semuanya menghentikan Anda menyelesaikan beberapa proyek. Hanya menyelesaikan beberapa proyek sederhana di Haskell telah memungkinkan saya untuk melihat keindahan matematika di belakangnya dan telah mendorong saya untuk memahaminya.
ChaosPandion
2
@ChaosPandion Saya setuju dengan sudut pandang itu, tetapi saya telah mengerjakan proyek yang mungkin memerlukan penulisan kode di STmonad. Sulit untuk menulis kode yang akan dikompilasi ketika saya tidak mengerti semua tanda tangan jenis yang relevan, jadi saya merasa meningkatkan pemahaman saya tentang sistem tipe akan lebih bijaksana.
Rob
3
@robjb - Saya setuju dengan Anda bahwa pemahaman yang lebih dalam lebih bijaksana. Jujur komentar saya diarahkan lebih pada khalayak umum yang mungkin menemukan Haskell terlalu mengintimidasi untuk mencoba.
ChaosPandion

Jawaban:

11

Tidak, Anda tidak perlu mengambil buku tentang teori kategori untuk memahami Haskell.

Saya telah menggunakan Haskell selama beberapa tahun, dan mengambil beberapa teori kategori karena penasaran, itu benar-benar tidak perlu. Di satu sisi, itu keren untuk melihat bagaimana semua abstraksi ini cocok dengan "gambaran besar", tetapi saya tidak pergi "Ya ampun, saya hanya perlu membuat ini menjadi pencuri dari Maybekategori ke []s dan kemudian saya dapat menyimpan putri!".

Sekarang tergantung pada apa yang Anda lakukan dengan teori tipe Haskell di pagar.

Jika Anda baru belajar haskell, jangan mencoba memahami setiap nuansa dari sistem tipe . Tolong jangan, ini seperti mencoba mempelajari C ++ template meta-programming terlebih dahulu. Jenis mewah adalah alat yang sangat baik, tetapi memiliki pemahaman yang baik tentang pemrograman fungsional mengalahkan pemahaman polimorfisme impredikatif.

Sekarang katakanlah setelah satu atau dua tahun Haskell Anda mencari untuk memahami setiap bagian halus tentang bagaimana sistem tipe Haskell bekerja, maka ya, beberapa teori jenis mungkin membantu.

Ini akan membantu Anda memahami beberapa logika di balik bagaimana hal-hal bekerja, plus itu terus terang cabang ilmu komputer IMO yang sangat layak untuk dilihat. Anda dapat memilih bagian-bagian yang Anda minati dan masih belajar jumlah yang layak.

Untuk Haskell, melihat STLC, sistem tipe HM (Sistem F) dan mungkin lambda cube (Haskell adalah Sistem Fw iirc) dan tipe iso-rekursif. Jenis dan Bahasa pemrograman adalah sumber yang bagus untuk memulai dan mencakup semua ini dan banyak lagi.

Jika Anda benar-benar ingin meminum bantuan dingin dan mengetahui bahwa Anda adalah ahli teori tipe pemula, pergilah ke Agda atau Coq. Ini fitur "tipe tergantung", satu langkah lebih jauh di dalam kubus lambda daripada Haskell. Tipe tergantung membiarkan tipe tergantung pada persyaratan. Ini berarti jenisnya cukup kuat untuk benar-benar membuktikan teorema. Bagi yang penasaran, "kari isardisme kari" googling "harus memunculkan beberapa hasil menarik.

Daniel Gratzer
sumber
Penjelasan singkat tentang Agda dan Coq akan bermanfaat.
ChaosPandion
@ChaosPandion Diperbarui
Daniel Gratzer
Sepertinya bagus. Saya pikir hanya mengatakan nama tidak akan cukup untuk menarik minat banyak orang.
ChaosPandion