Тип (>> =)
-
(>>=) :: Monad m => m a -> (a -> m b) -> m b
Мне нужна функция с типом:
(Monad m, Monad n) => m a -> (a -> n b) -> n b
Эту функцию можно использовать для объединения различных монад в цепочку.
Я столкнулся с этой проблемой, когда пытался получить 3000
из аргументов командной строки -p 3000
:
main = getArgs >>= (\args -> (elemIndex "-p" args) >>= (\id -> warpDebug (fromIntegral.read (args !! (id+1))) Ilm))
Это явно не компилируется, потому что getArgs
возвращает IO [String]
, а elemIndex
возвращает Maybe Int
. Для элегантного решения этой проблемы можно использовать функцию вышеупомянутого типа. Мой вопрос: