Как справиться с побочным эффектом с Applicative?

Я вижу везде, чтоApplicative может справиться с побочными эффектами, но все простые примеры, которые я видел, просто объединяют такие вещи, как:

> (,,) <
> (,,) <$> [1,2] <*> ["a", "b", "c"] <*> ["foo", "bar"]
[(1,"a","foo"),(1,"a","bar"),(1,"b","foo"),(1,"b","bar"),
 (1,"c","foo"),(1,"c","bar"),(2,"a","foo"),(2,"a","bar"),
 (2,"b","foo"),(2,"b","bar"),(2,"c","foo"),(2,"c","bar")]
gt; [1,2] <*> ["a", "b", "c"] <*> ["foo", "bar"] [(1,"a","foo"),(1,"a","bar"),(1,"b","foo"),(1,"b","bar"), (1,"c","foo"),(1,"c","bar"),(2,"a","foo"),(2,"a","bar"), (2,"b","foo"),(2,"b","bar"),(2,"c","foo"),(2,"c","bar")]

Что круто, но я не вижу, как это связано с побочными эффектами. Я понимаю, чтоApplicative это слабая монада, и поэтому вы можете обрабатывать побочные эффекты (как вы бы делали с монадой состояния), но вы не можете повторно использовать результат предыдущего побочного эффекта.

Означает ли это, что>> может быть написано дляApplicative и тому подобное

do
  print' "hello"
  print' "world"

будет иметь смысл (сprint' :: a -> Applicative something) (с соответствующим до-аппликативным расширением).

В другом мире есть разница междуMonad а такжеApplicative в том, чтоMonad позволяетx <- ... ноApplicative не делает.

Тогда, монада писателя, просто аппликатив?

Ответы на вопрос(3)

Ваш ответ на вопрос