Монада: Почему идентичность имеет значение, что произойдет, если в наборе нет такого специального члена?
Я пытаюсь изучить концепцию monad
Я смотрю это отличное видео, которое Брайан Бекенд пытается объяснить, что такое монада.
Когда он говорит о monoid
Это коллекция типов, у нее есть правило композиции, и эта композиция должна подчиняться 2 правилам:
- ассоциативно:
x @ (y @ z ) = (x @ y) @ z
- специальный член в коллекции:
x @ id = x and id @ x = x
я использую @
символ, представляющий композицию. id
означает специальный член.
Второй момент - это то, что я пытаюсь понять. почему это имеет значение? Что делать, если нет такого специального члена?
Когда я изучаю новую концепцию, я всегда пытаюсь связать эту абстрактную концепцию с некоторыми другими конкретными вещами, чтобы я мог полностью понять и выучить их наизусть.
Так что я пытаюсь рассказать monad
а также monoid
чтобы это lego
, Таким образом, все строительные блоки в наборе lego образуют коллекцию. и правило композиции объединяет их в новую форму строительных блоков. и очевидно, что композиция подчиняется первому правилу: ассоциативному. Но нет никакого специального строительного блока, который мог бы соединиться с другим строительным блоком и получить то же самое. Так что оно не подчиняется второму правилу.
Но лего все еще очень сложный. Чего не хватает или чего не хватает, когда lego не подчиняется второму правилу? Каковы последствия?
Или, если сравнивать с другими monoid
которые подчиняются всем этим правилам. Какую особенность делает другой monoid
есть но лего нет?
2 ответа
monoid
без элемента идентичности называется semigroup
и это все еще хорошая и полезная конструкция. Это просто дает нам что-то другое. Рассмотрим, например, fold
в списке. Мы можем сделать это, отобразив каждый элемент списка в моноид, а затем составив их все. Но если у вас есть только полугруппа, вы не можете fold
в возможно пустом списке.
Рассмотрим другой пример - целые числа больше нуля, а целые числа больше или равны нулю. В последнем случае у нас есть моноид, так как ноль буквально является нашим нулевым элементом. Так что я могу решить, например, уравнение "5 + х = 5". В первом случае с полугруппой я не могу решить это уравнение. Или я могу сказать: "У тебя нет яблок, я дам тебе пять яблок, сколько у тебя?" В мире без нуля мы должны предположить, что все начинают с яблок! Таким образом, по тем же причинам наличие нуля важно для чисел, удобно иметь "обобщенный ноль", висящий вокруг с более абстрактными алгебраическими структурами.
(Обратите внимание, что это не означает, что одно или другое "лучше" - просто они разные, и дополнительная структура, когда она доступна, может пригодиться. Также обратите внимание, что существует универсальный способ превратить полугруппу в monoid путем добавления нулевого элемента, так как все результаты полугруппы поднимаются в "завершенные" результаты на моноидах, как правило, более удобно, как правило, просто рассматривать вещи с точки зрения последнего.)
Пустое лего можно рассматривать как id
но тогда вам придется признать, что пустое пространство - это лего. Но да, если вы не хотите, чтобы id, как писал @sclv, это было бы semigroup
,