Реализован ли аппликативный ввод-вывод на основе функций из Monad IO?

В «Изучите Haskell для большого блага!» Автор утверждает, что экземпляр Applicative IO реализован следующим образом:

instance Applicative IO where
    pure = return
    a <*> b = do
        f <- a
        x <- b
        return (f x)

Я могу ошибаться, но кажется, что оба возвращают и do -специфичные конструкции ( некоторые засахаренные связывания (>> =) ) происходят от Monad IO . Предполагая, что это правильно, мой настоящий вопрос:

Почему реализация аппликативного ввода-вывода зависит от функций / комбинаторов монадного ввода-вывода ? более мощная концепция, чем Monad ?


Править (некоторые пояснения):

Эта реализация противоречит моей интуиции, потому что согласно статье Typeclassopedia требуется, чтобы данный тип был Аппликатив до может быть сделан Монадой (или должен быть теоретически).

10
задан gorsky 3 July 2011 в 19:09
поделиться