Saya sedang mengerjakan Tulis Skema Sendiri dalam 48 Jam (saya memiliki waktu hingga sekitar 85 jam) dan saya telah sampai pada bagian tentang Menambahkan Variabel dan Tugas . Ada lompatan konseptual yang besar dalam bab ini, dan saya berharap hal itu dilakukan dalam dua langkah dengan refactoring yang baik di antaranya daripada langsung melompat ke solusi akhir. Bagaimanapun…
Aku sudah tersesat dengan sejumlah kelas yang berbeda yang tampaknya untuk melayani tujuan yang sama: State
, ST
, IORef
, dan MVar
. Tiga yang pertama disebutkan dalam teks, sedangkan yang terakhir tampaknya menjadi jawaban yang disukai untuk banyak pertanyaan StackOverflow tentang tiga yang pertama. Mereka semua tampaknya membawa keadaan antara doa yang berurutan.
Apa masing-masing ini dan bagaimana perbedaannya satu sama lain?
Secara khusus, kalimat berikut tidak masuk akal:
Sebagai gantinya, kami menggunakan fitur yang disebut utas status , membiarkan Haskell mengelola status agregat untuk kami. Ini memungkinkan kita memperlakukan variabel yang bisa berubah seperti yang kita lakukan dalam bahasa pemrograman lain, menggunakan fungsi untuk mendapatkan atau mengatur variabel.
dan
Modul IORef memungkinkan Anda menggunakan variabel stateful dalam monad IO .
Semua ini membuat garisnya type ENV = IORef [(String, IORef LispVal)]
membingungkan - mengapa yang kedua IORef
? Apa yang akan rusak jika saya type ENV = State [(String, LispVal)]
malah menulis ?