Seiring pemikiran yang sama seperti pernyataan Andrej Bauer dalam jawaban ini
Komunitas Haskell telah mengembangkan sejumlah teknik yang diilhami oleh teori kategori, yang mana monad paling terkenal tetapi tidak boleh dikacaukan dengan monad .
Apa hubungan antara functors di SML dan functors dalam teori Kategori?
Karena saya tidak tahu tentang rincian functors dalam bahasa lain seperti Haskell atau OCaml, jika ada info nilai maka silakan juga menambahkan bagian untuk bahasa lain.
Jawaban:
Kategori membentuk kategori (besar) yang objeknya adalah kategori (kecil) dan yang morfismenya adalah fungsi antara kategori kecil. Dalam pengertian ini, functors dalam teori kategori adalah "morfisme ukuran lebih tinggi".
Functors ML bukan functors dalam arti kata kategoris. Tapi mereka "fungsi ukuran lebih tinggi" dalam arti tipe-teoretis.
Pikirkan tipe data konkret dalam bahasa pemrograman yang khas sebagai "kecil". Dengan demikian
int
,bool
,int -> int
, dll kecil, kelas-kelas dalam java kecil, seperti struct baik di C. Kami dapat mengumpulkan semua tipe data menjadi koleksi besar yang disebutType
. Tipe konstruktor, sepertilist
atauarray
merupakan fungsi dariType
hinggaType
. Jadi itu adalah fungsi "besar". Functor ML hanyalah fungsi besar yang sedikit lebih rumit: ia menerima sebagai argumen beberapa hal kecil dan mengembalikan beberapa hal kecil. "Beberapa hal kecil disatukan" dikenal sebagai struktur dalam ML. Dalam hal teori tipe Martin-Lof kami memiliki semestaType
tipe kecil. Jenis besar biasanya disebut jenis . Jadi kita punya:42 : int
:)Type
(contohint : Type
:)OrderedType
:)list : Type -> Type
:)String : OrderedType
:)Map.Make : Map.OrderedType -> Make.S
)Sekarang kita bisa menggambar analogi antara ML dan kategori, di mana functors berhubungan dengan functors. Tapi kami juga melihat bahwa tipe data dalam ML seperti "kategori kecil tanpa morfisme", dengan kata lain mereka lebih suka set daripada kategori seperti. Kita dapat menggunakan analogi antara ML dan teori himpunan kemudian:
sumber
Struktur ML standar mirip dengan aljabar . Tanda tangannya menggambarkan seluruh kelas aljabar dengan bentuk yang serupa.
Sebagian besar gagasan ini dikerjakan dalam serangkaian makalah oleh Burstall dan Goguen dalam merancang bahasa spesifikasi yang disebut CLEAR (Referensi c5 dan c6 pada halaman DBLP .) David MacQueen bekerja bersama dengan Burstall dan Sannella pada waktu itu, dan sangat akrab dengan masalah. Sistem modul ML Standar didasarkan pada ide-ide ini.
Apa yang kebanyakan orang akan pikirkan adalah, bagaimana dengan morfisme? Kategori fungsi teoritis memiliki bagian objek dan bagian morfisme. Apakah fungsi standar ML memiliki hal yang sama? Jawabannya adalah YA dan TIDAK.
Apakah ini berarti bahwa Standar ML menyimpang dari teori kategori? Saya kira tidak. Saya lebih suka berpikir bahwa Standar ML melakukan hal yang benar, dan teori kategori belum menyusul. Teori kategori belum tahu bagaimana menangani fungsi tingkat tinggi. Suatu hari, itu akan terjadi.
sumber
Sejauh pengetahuan saya, tidak ada hubungan formal antara functors dalam teori kategori dan functors dalam ML (SML atau OCaml, mereka cukup dekat untuk tujuan kita di sini).
Dalam teori kategori, functors adalah fungsi yang beroperasi pada objek. Mereka adalah satu tingkat di atas morfisme, yang sering berfungsi yang beroperasi pada elemen (banyak kategori memiliki objek yang ditetapkan dengan beberapa struktur aljabar dan panah yang merupakan homomorfisme di antara struktur ini). Functor ML adalah fungsi yang beroperasi pada modul, satu tingkat di atas fungsi yang beroperasi pada nilai-nilai bahasa inti. Saya pikir kemiripannya berhenti di sini.
Fungsional ML dibaptis oleh Dave McQueen dalam revisi 1985 tentang Modul untuk Standar ML (citeseerx) yang muncul dalam Polymorphism Newsletter (makalah aslinya menggunakan ungkapan "modul parametrik" - publikasi kemudian cenderung menggunakan kata sifat "parametrized"). Sayangnya, saya tidak dapat menemukan salinan makalah itu. Dalam makalahnya tahun 1986, Menggunakan Jenis Ketergantungan untuk Mengekspresikan Struktur Modular (citeseerx) ia memberikan nama sebagaimana mapan.
sumber