Tôi nghĩ rằng cách tốt để hiểu chúng trong F # là xem xét ý nghĩa của chúng bằng cách sử dụng cú pháp biểu thức tính toán. Tôi sẽ viết m
cho một số nhà xây dựng tính toán, nhưng bạn có thể tưởng tượng rằng đây là async
hoặc bất kỳ loại tính toán nào khác.
sắc Left
m { let! x' = m { return x } = m { let x' = x
return! f x' } return! f x' }
sắc Ngay
m { let! x = comp = m { return! comp }
return x }
Associativity
m { let! x = comp = m { let! y = m { let! x = comp
let! y = f x return! f x }
return! g y } return! g y }
Các pháp luật về cơ bản cho bạn biết rằng bạn sẽ có thể cấu trúc lại một phiên bản của chương trình này sang chương trình khác mà không thay đổi ý nghĩa - giống như bạn có thể cấu trúc lại các chương trình F # thông thường.
Nguồn
2013-09-02 20:43:00
Tại sao điều này yêu cầu giải thích? Đâu là phần khó khăn? –
'ràng buộc (M, trả về)' không chính xác 'M', hãy nhớ rằng F # là không tinh khiết để ràng buộc có thể gây ra tác dụng phụ và đột biến. –
Những quyền này có đúng không? – dagelee