Ответ 1
Нет, не монада, а комонада! Он превращает функцию, которая берет обернутый объект и возвращает нормальное значение в функцию, которая принимает и возвращает обернутый объект. Как подпись типа Haskell, которая будет:
(Wrapped a -> b) -> (Wrapped a -> Wrapped b)
Типичная подпись value
:
Wrapped a -> a
Это именно то, что вам нужно для comonad. Первая функция обычно называется extend
, а вторая extract
.
Вы можете думать о comonad как о значении с каким-то дополнительным контекстом. И это, конечно, именно то, что делает chain
.
Смотрите fooobar.com/info/6796/... для получения дополнительной информации о comonads.