Функционирует ли цепочка в underscore.js, создавая монаду?

В документации chain вы найдете:

Вызов chain на обернутом объекте вызовет все вызовы будущих методов для возврата обернутых объектов. Когда вы закончите вычисление, используйте value для получения окончательного значения.

Таким образом, функция chain создает монаду?

Ответ 1

Нет, не монада, а комонада! Он превращает функцию, которая берет обернутый объект и возвращает нормальное значение в функцию, которая принимает и возвращает обернутый объект. Как подпись типа Haskell, которая будет:

(Wrapped a -> b) -> (Wrapped a -> Wrapped b)

Типичная подпись value:

Wrapped a -> a

Это именно то, что вам нужно для comonad. Первая функция обычно называется extend, а вторая extract.

Вы можете думать о comonad как о значении с каким-то дополнительным контекстом. И это, конечно, именно то, что делает chain.

Смотрите fooobar.com/info/6796/... для получения дополнительной информации о comonads.