Loại (>>=)
làMột chức năng tương tự như (>> =) nhưng mà trả về một đơn nguyên khác nhau
(>>=) :: Monad m => m a -> (a -> m b) -> m b
Tôi muốn có một hàm có kiểu:
(Monad m, Monad n) => m a -> (a -> n b) -> n b
Chức năng này có thể là được sử dụng để chuỗi các monads khác nhau với nhau.
tôi phải đối mặt với vấn đề này khi tôi đã cố gắng để có được 3000
từ các đối số dòng lệnh -p 3000
:
main = getArgs >>= (\args -> (elemIndex "-p" args) >>= (\id -> warpDebug (fromIntegral.read (args !! (id+1))) Ilm))
Đây rõ ràng sẽ không biên dịch vì getArgs
trả về một IO [String]
và elemIndex
trả về một Maybe Int
. Một chức năng của loại trên có thể được sử dụng để thanh lịch giải quyết vấn đề này. Câu hỏi của tôi là:
- Chức năng này đã được xác định chưa? (Hoogle không tìm thấy bất kỳ)
- Nếu không có, có thể do một số lý do. Vậy lý do là gì? Đây có phải là hành vi không tốt? Tôi nghĩ rằng đó là một cách tốt hơn so với việc phải sử dụng một biểu thức trường hợp.