Возможно, ни одно из этих утверждений не является категорически точным, но монада часто определяется как "моноид в категории эндофенторов"; Alternative
Хаскелла определяется как "моноид на аппликативных функторах", где аппликативный функтор является "сильным слабым моноидальным функтором". Теперь эти два определения звучат довольно похоже на невежественные (меня), но работают по-разному. Нейтральный элемент для альтернативы имеет тип fa
и, таким образом, "пуст", а для монады имеет тип a → ma
и, следовательно, имеет смысл "непустой"; операция для альтернативы имеет тип fa → fa → fa
, а операция для монады имеет тип (a → fb) → (b → fc) → (a → fc)
. Мне кажется, что настоящая важная деталь относится к категории эндофенторов по сравнению с эндофунторами, хотя, возможно, важна "сильная слабость" в альтернативе; но что там, где я запутался, потому что, по крайней мере, в Haskell, монады становятся альтернативами: и я вижу, что я еще не получил точного категорического понимания всех деталей здесь.
Как можно точно выразить, какова разница между альтернативой и монадой, так что они оба являются моноидами, относящимися к эндофенторам, и тем не менее у одного есть "пустая" нейтраль, а у другого есть "непустой" нейтральный элемент?