Tôi nghĩ rằng tôi hiểu được danh sách đơn lẻ nhưng sau đó tôi thấy tôi không. Đây là câu chuyện.(>) có phải loại bỏ tất cả các đầu ra bên trái không?
Với danh sách m
và chức năng k
> let m = [1..10]
> :t m
m :: [Integer]
> let k = replicate 2
> :t k
k :: a -> [a]
Chơi với ràng buộc >>=
cho những gì tôi mong đợi
> :t (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b
> :t m >>= k
m >>= k :: [Integer]
> m >>= k
[1,1,2,2,3,3,4,4,5,5,6,6,7,7,8,8,9,9,10,10]
nhưng đối với >>
dự kiến (từ trải nghiệm với IO đơn nguyên, tất cả mọi thứ trên trái bên sẽ bị hủy)
m >> m
[1,2,3,4,5,6,7,8,9,10]
Got
> :t (>>)
(>>) :: Monad m => m a -> m b -> m b
:t m >> m
m >> m :: [Integer]
> m >> m
[1,2,3,4,5,6,7,8,9,10,1,2,3,4,5 ... 9,10] -- truncated, real output is 100 elements
Xin giải thích lý do tại sao >>
không cư xử như tôi mong đợi (tất nhiên tôi phải có sự hiểu lầm) và cách chính xác để giải thích >>
là gì?
Wow! câu trả lời rõ ràng (và rất nhanh). Cảm ơn – wizzup