Mengapa komite Haskell memilih monad untuk mewakili I / O?

36

Bahasa Bersih menggunakan tipe keunikan untuk menangani I / O dalam pengaturan yang berfungsi murni. Mengapa komite Haskell pergi dengan monad sebagai gantinya? Apakah ada proposal lain untuk menangani keadaan yang diselidiki komite tetapi diputuskan menentang?

Catatan : Saya tidak mencari perang suci antara monad dan bentuk komputasi lainnya. Mari kita bahas topik ini hanya untuk pilihan komite tentang I / O.

chrisaycock
sumber

Jawaban:

16

Menurut A History of Haskell: Being Lazy With Class (lihat bagian 7) tiga model yang berbeda dipertimbangkan pada awalnya: stream , continuations , dan "passing dunia" (Saya tidak tahu banyak tentang Clean, tapi sepertinya ini adalah cara Clean) ?).

Paragraf terakhir dari bagian 7.2 menunjukkan bahwa konsep tipe keunikan tidak dikembangkan saat ini:

Model “pelintas dunia” ini tidak pernah menjadi pesaing serius bagi Haskell, karena kami tidak melihat cara mudah untuk memastikan akses “single-threaded” ke negara dunia. (Desainer Bersih akhirnya memecahkan masalah ini melalui penggunaan "tipe keunikan")

Konsep monads tampaknya telah diperkenalkan (digunakan kembali dari karya lain) dalam revisi Haskell kemudian karena menghasilkan kode yang lebih bersih (dibandingkan dengan kelanjutan / aliran):

Pendekatan monadik dengan cepat mendominasi model sebelumnya. Jenisnya lebih kompak, dan lebih informatif.

johlo
sumber
10

Penjelasan terbaik yang pernah saya lihat adalah Simon Peyton-Jones '" Menangani Pasukan Awkward ."

Dari apa yang saya ingat dari koran, masalah-masalah seputar kemalasan memainkan peran besar dalam keputusan itu. (Saya tidak yakin apakah Clean malas secara default dengan cara yang sama seperti Haskell.)

rtperson
sumber
5
Bersih juga malas.
chrisaycock