2013-01-05 30 views
9

Lớp Monad định nghĩa một phương pháp >>, mà trình tự hai hành động monadic:Tại sao không có << trong thư viện chuẩn Haskell?

>> :: Monad m => m a -> m b -> m b 

Nhà điều hành ràng buộc >>= có lật đối số tương đương, =<<; cũng như các nhà điều hành thành phần chức năng đơn thuần ('cá') >=><=<. Có vẻ như không phải là một <<, mặc dù (sau một vài phút của Hoogling). Tại sao điều này?

Chỉnh sửa: Tôi biết đó không phải là vấn đề lớn. Tôi giống như cách một số dòng mã nhất định với các toán tử trỏ bên trái. x <- doSomething =<< doSomethingElse trông đẹp hơn, với các mũi tên đều giống nhau, hơn x <- doSomethingElse >>= doSomething.

+0

Không có trường hợp nào cho nó. –

+0

Họ không nghĩ về nó khi họ tạo ra '= <<' và '<= <'? Tôi không biết tại sao nó làm phiền tôi, nó chỉ có vẻ như một sự giám sát. –

+0

Uh, làm những ví dụ cả hai đều làm điều tương tự? – MathematicalOrchid

Trả lời

10

Theo hiểu biết tốt nhất của tôi, không có lý do chính đáng nào. Lưu ý rằng số Monad của bạn cũng phải là một phiên bản Applicative, do đó bạn có thể sử dụng <**> thay vì công cụ sắp xếp của mình.

+0

Ý tưởng hay! Cảm ơn. –

+10

Nhưng lưu ý rằng mặc dù '*>' tương đương với '>>', 'a <* b' KHÔNG tương đương với' b *> a'. – dave4420

+0

@ dave4420 đó là một điểm tốt. 'flip (*>)' và 'flip (>>)' luôn là một lựa chọn. –

Các vấn đề liên quan