Tôi đang làm việc thông qua việc Viết cho chính bạn một Đề án trong 48 giờ (tôi lên đến khoảng 85 giờ) và tôi đã bắt đầu phần Thêm biến và Bài tập . Có một bước nhảy lớn về mặt khái niệm trong chương này, và tôi ước nó được thực hiện theo hai bước với một cấu trúc lại tốt ở giữa thay vì chuyển thẳng đến giải pháp cuối cùng. Dù sao…
Tôi đã nhận được mất với một số lớp khác nhau mà dường như để phục vụ cùng một mục đích: State
, ST
, IORef
, và MVar
. Ba câu đầu tiên được đề cập trong văn bản, trong khi câu cuối cùng dường như là câu trả lời ưa thích cho rất nhiều câu hỏi của StackOverflow về ba câu đầu tiên. Tất cả chúng dường như mang một trạng thái giữa các lần gọi liên tiếp.
Mỗi cái này là gì và chúng khác nhau như thế nào?
Đặc biệt những câu này không có ý nghĩa:
Thay vào đó, chúng tôi sử dụng một tính năng gọi là tiểu trình trạng thái , cho phép Haskell quản lý trạng thái tổng hợp cho chúng tôi. Điều này cho phép chúng tôi xử lý các biến có thể thay đổi như chúng tôi làm trong bất kỳ ngôn ngữ lập trình nào khác, sử dụng các hàm để lấy hoặc đặt biến.
và
Mô-đun IORef cho phép bạn sử dụng các biến trạng thái trong đơn nguyên IO .
Tất cả điều này làm cho dòng type ENV = IORef [(String, IORef LispVal)]
khó hiểu - tại sao lại là thứ hai IORef
? Điều gì sẽ phá vỡ nếu tôi viết type ENV = State [(String, LispVal)]
thay thế?