История изменений
Исправление hateyoufeel, (текущая версия) :
Ты, кажется, не совсем понимаешь, что не так с твоим кодом в принципе. Код, работающий с Monad, ожидает, что законы этого класса выполняются. Из этого предположения следуют, например, оптимизации через rewrite rules и прочее.
Если ты хочешь написать какую-то специальную функцию для специального случая, который этим законам не удовлетворяет, тебе класс Monad нахрен не сдался. Всё, точка. Попытки его таким образом использовать приведут к куче разных лулз^Wбагов, которые ты наверняка не хочешь получить.
С таким же успехом можно придумать случай когда для работы некоторой реализации Monad X нужен квадратичный алгоритм от количества элементов типа a, запихнутых в X a, в то время как X Int можно реализовать за NlogN за счет хранения элементов в дереве по сравнению значений.
Для этого просто делают отдельный тип и используют его. IntMap, IntSet и подобные, например. То, что ты предлагаешь, это vector bool из C++, который до сих пор выпилить не могут, хотя им пользоваться просто невозможно.
Исходная версия hateyoufeel, :
Ты, кажется, не совсем понимаешь, что не так с твоим кодом в принципе. Код, работающий с Monad, ожидает, что законы этого класса выполняются. Из этого предположения следуют, например, оптимизации через rewrite rules и прочее.
Если ты хочешь написать какую-то специальную функцию для специального случая, который этим законам не удовлетворяет, тебе класс Monad нахрен не сдался. Всё, точка. Попытки его таким образом использовать приведут к куче разных лулз^Wбагов, которые ты наверняка не хочешь получить.