Tôi đang tìm hiểu về các monads và có một vài câu hỏi.Một số câu hỏi về các monads trong Haskell
Đây là nơi tôi đang ở ngay bây giờ. Xin vui lòng sửa tôi, nơi tôi sai.
Biểu tượng
>>=
là một toán tử kết hợp. Các toán tử Infix là các hàm lấy hai đối số (bên trái và bên phải) và trả về một giá trị.Biểu tượng
>>=
được gọi là toán tử liên kết và có chữ kýMonad m => m t -> (t -> m u) -> m u
. Tuy nhiên, các loại dường như không xếp hàng ở đây. Chúng tôi nhận được một giá trị loạim t
và đối số thứ hai là một hàm mấtt
. (Tôi không thấy làm thế nào để kết nối các dấu chấm.)này phải có nghĩa là chức năng ràng buộc là bằng cách nào đó có khả năng loại bỏ các
m
từm t
để có đượct
và vượt qua nó để hàm.
Dưới đây là những câu hỏi của tôi:
là khả năng loại bỏ các
m
từm t
cái gì mà chỉ có thể bên trong một nhà điều hành ràng buộc như vậy. Nhà điều hành liên kết này có một số đặc quyền riêng hay gì đó không?Nó phải làm gì với các thay đổi trạng thái? Tôi hiểu (tôi nghĩ) rằng mục đích của các monads là 'quấn' các tác dụng phụ để chúng được phân lập khỏi phần còn lại của chương trình. Nhưng vai trò của nhà điều hành liên kết trong điều này là gì?
Câu trả lời này có một số tuyên bố sai có thể sai về 'IO'. Trong GHC, ít nhất, cá thể 'Monad' cho' IO' * được định nghĩa trong một mô-đun, cụ thể là 'GHC.Base', sử dụng các chi tiết bên trong" bán riêng "của kiểu' IO'. Tất nhiên, các triển khai khác là miễn phí để làm một cái gì đó khác nhau. – dfeuer