Сегодня выступление Хеннинга Керстана («Семантика трассировки для вероятностных систем переходов») впервые поставило меня перед теорией категорий. Он построил теоретическую основу для описания вероятностных систем переходов и их поведения в общем виде, то есть с бесчисленно бесконечными наборами состояний и различными понятиями следов. С этой целью он проходит через несколько уровней абстракции, чтобы в конце концов получить представление о монадах, которые он объединяет с теорией меры, чтобы построить модель, в которой он нуждается.
В конце концов, ему понадобилось 45 минут (примерно), чтобы построить структуру, описывающую концепцию, которую он первоначально объяснил за 5 минут. Я ценю красоту подхода (он делает обобщения красиво более разные понятия о следах) , но это кажется мне странным балансом все же.
Я изо всех сил пытаюсь понять, что на самом деле представляет собой монада и насколько такая общая концепция может быть полезна в приложениях (как в теории, так и на практике). Это действительно стоит усилий, с точки зрения результата?
Поэтому этот вопрос:
Существуют ли естественные проблемы (в смысле CS), к которым может быть применено абстрактное понятие монад, и которые помогают (или даже помогают) получить желаемые результаты (вообще или лучше, чем без)?
источник
Ответы:
Спрашивать, является ли возникновение монады естественным , похоже на вопрос, является ли группа (в смысле теории групп) естественной. Как только вы что-то формализуете, в данном случае как эндофунктор, оно удовлетворяет аксиомам монады или нет. Если он удовлетворяет аксиомам, то можно получить много технических средств бесплатно.
Бумага Могги Понятия вычислений и монад в значительной степени заключают сделку: монады невероятно естественны и полезны для унифицированного описания вычислительных эффектов. Wadlerи другие перевели эти понятия, чтобы иметь дело с вычислительными эффектами в функциональных языках программирования, используя связь, что функтор является конструктором типа данных. Это добавляет глазурь на торт. FP-монады позволяют обрабатывать вычислительные эффекты, такие как IO, которые были бы крайне неестественными без них. Монады вдохновили связанные полезные понятия, такие как стрелки и идиомы, которые также очень полезны для структурирования функциональных программ. Смотрите ссылку Wadler для ссылок. FP-монады - это то же самое, что и монады теории категорий в том смысле, что для работы FP-монады должны соблюдаться одни и те же уравнения - компилятор полагается на них. Как правило, представление монады отличается (разные, но эквивалентные операции и уравнения), но это поверхностная разница.
Огромное количество работы Барта Джейкобса , если взять только один пример, использует монады. Много работы проистекает из коалгебры, которая является общей теорией систем. Одним из (многих) вкладов, сделанных Якобсом в эту область, является разработка общего понятия семантики трасс для систем (описываемых как коалгебры), основанных на монадах. Можно утверждать, что понятие семантики трассировки естественно: какова семантика системы? Список действий, которые можно наблюдать!
Один из способов понять монады - это сначала программировать на Хаскеле, используя монады. Тогда найдите один из многих хороших доступных учебников (через Google). Начните с угла программирования, затем перейдите к теоретической стороне, начиная с некоторой базовой теории категорий.
источник