Каков текущий статус ограниченных монадов?
Возвращаясь, по крайней мере, к концу 1990-х годов, люди, желающие по-дружески объединить ограниченные монады в Haskell.
Например, без ограниченных монад вы не можете сделать эффективную монаду из Set
, Map
или вероятностных распределений. Здесь SO question из нескольких лет назад, когда кто-то другой столкнулся с этой проблемой.
Существуют различные способы обхода, которые люди придумали, в том числе:
Однако ни один из этих подходов не кажется "каноническим". Я нашел комментарий от Дона Стюарта на в этом сообщении в блоге в 2007 году, где он сообщил, что мы были "очень близки" к тому, чтобы ограничить монады с Индексированные типы.
Каков текущий статус? Есть ли теперь "канонический" способ делать ограниченные монады? Или мы все еще живем с обходными решениями?
Ответы
Ответ 1
В недавней работе Андерса Персона, Эмиля Аксельсона и Йозефа Свеннингсона, который показывает способ кодирования ограниченных монадов. Я забыл детали, но я помню, что это была хорошая бумага.
Persson, A.; Axelsson, E.; Svenningsson, J. (2011). Общие монадические конструкции для встроенных языков. IFL 2011, 23-й симпозиум по внедрению и применению функциональных языков.
Ответ 2
На самом деле можно получить эффективную Set monad как обычную монаду,
без каких-либо ограничений. Двумя разными способами. Следующая статья
объясняет оба:
http://okmij.org/ftp/Haskell/set-monad.html
В статье также указывается, что ограниченные монады на самом деле довольно
ограничивать и исключать многие монадические идиомы. Я предполагаю, что
методы реализации являются общими, и любая ограниченная монада может быть
превратился в обычный, не теряя эффективности. Так может показаться
что нам вообще не нужны ограниченные монады.