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