В «Изучите Haskell для большого блага!» Автор утверждает, что экземпляр Applicative IO
реализован следующим образом:
instance Applicative IO where
pure = return
a <*> b = do
f <- a
x <- b
return (f x)
Я могу ошибаться, но кажется, что оба возвращают
и do
-специфичные конструкции ( некоторые засахаренные связывания (>> =)
) происходят от Monad IO
. Предполагая, что это правильно, мой настоящий вопрос:
Почему реализация аппликативного ввода-вывода
зависит от функций / комбинаторов монадного ввода-вывода
? более мощная концепция, чем Monad
?
Править (некоторые пояснения):
Эта реализация противоречит моей интуиции, потому что согласно статье Typeclassopedia требуется, чтобы данный тип был Аппликатив
до может быть сделан Монадой
(или должен быть теоретически).