Подтвердить что ты не робот

Каков текущий статус ограниченных монадов?

Возвращаясь, по крайней мере, к концу 1990-х годов, люди, желающие по-дружески объединить ограниченные монады в Haskell.

Например, без ограниченных монад вы не можете сделать эффективную монаду из Set, Map или вероятностных распределений. Здесь SO question из нескольких лет назад, когда кто-то другой столкнулся с этой проблемой.

Существуют различные способы обхода, которые люди придумали, в том числе:

Однако ни один из этих подходов не кажется "каноническим". Я нашел комментарий от Дона Стюарта на в этом сообщении в блоге в 2007 году, где он сообщил, что мы были "очень близки" к тому, чтобы ограничить монады с Индексированные типы.

Каков текущий статус? Есть ли теперь "канонический" способ делать ограниченные монады? Или мы все еще живем с обходными решениями?

4b9b3361

Ответ 1

В недавней работе Андерса Персона, Эмиля Аксельсона и Йозефа Свеннингсона, который показывает способ кодирования ограниченных монадов. Я забыл детали, но я помню, что это была хорошая бумага.

Persson, A.; Axelsson, E.; Svenningsson, J. (2011). Общие монадические конструкции для встроенных языков. IFL 2011, 23-й симпозиум по внедрению и применению функциональных языков.

Ответ 2

На самом деле можно получить эффективную Set monad как обычную монаду, без каких-либо ограничений. Двумя разными способами. Следующая статья объясняет оба:

http://okmij.org/ftp/Haskell/set-monad.html

В статье также указывается, что ограниченные монады на самом деле довольно ограничивать и исключать многие монадические идиомы. Я предполагаю, что методы реализации являются общими, и любая ограниченная монада может быть превратился в обычный, не теряя эффективности. Так может показаться что нам вообще не нужны ограниченные монады.