Возвращаясь, по крайней мере, к концу 1990-х годов, люди, желающие по-дружески объединить ограниченные монады в Haskell.
Например, без ограниченных монад вы не можете сделать эффективную монаду из Set
, Map
или вероятностных распределений. Здесь SO question из нескольких лет назад, когда кто-то другой столкнулся с этой проблемой.
Существуют различные способы обхода, которые люди придумали, в том числе:
-
Создание класса нового типа для каждого возможного ограничения.
-
Использование Шаблон Haskell.
-
Использование Ограничения > .
Однако ни один из этих подходов не кажется "каноническим". Я нашел комментарий от Дона Стюарта на в этом сообщении в блоге в 2007 году, где он сообщил, что мы были "очень близки" к тому, чтобы ограничить монады с Индексированные типы.
Каков текущий статус? Есть ли теперь "канонический" способ делать ограниченные монады? Или мы все еще живем с обходными решениями?