Вы уверены, что это можно назвать зависимыми типами? Ведь тип не зависит от значения, а просто содержит некие константы. Вот если бы можно было, скажем, изменить верхний лимит в процессе выполнения меняя значение, тогда да.
Вы ведь слышали о dependent types, правда? Они предоставляют большую гарантию: программа с неправильный диапазоном не скомпилируется.
Классический пример — функция head. В Haskell она неполная — если передать пустой список, получим runtime exception. В Idris же (который как Haskell, но с dependent types), тип этой функции можно прочитать как «список, у которого по крайней мере один элемент».
Надеюсь, автор меня простит за то, что я отвечу за него. Bounded arithmetic — идея достаточно общего назначения. К сожалению, в этом решении все константы должны быть известны на этапе компиляции, что сужает область применения. Но все же количество месяцев никогда не должно быть больше, чем 12, HTTP статус должен быть между 100 и 799, а количество пользователей в бесплатной версии вашего чата должно быть до десяти.
Не уверен зачем нам Num'. У меня работает и ab 14 + 7, ведь у нас есть fromInteger для RgVld.
И еще, вы пишете, что для newtype runtime overhead меньше. Разве он не отсутствует совсем?
Мне кажется, это очень оптимистично рассчитывать на то, что можно сделать набор gem'ов достаточно гибким, чтобы удовлетворить нужны хоть сколько либо значимого количества пользователей. Возможно, лучше было бы посмотреть в сторону генерации конфигурации на основе существующего проекта, как в Maven Archetypes? maven.apache.org/guides/introduction/introduction-to-archetypes.html
Если я правильно понимаю, идея в том, чтобы сворачивать коллекции проходясь по ним только один раз. Для производительности. Я честно пытался прочитать все примеры, но до конца так и не осилил.
Ваш пример на Haskell смотрится немного странно, учитывая, что эту простыню можно заменить на обычное
то есть, чтобы комбинировать некомбинируемые средствами языка «трансдюсеры»?
Если да, то я даже не знаю, это не будет быстрее, зато будет намного непонятнее. Кстати, в конкретном случае с map-t можно комбинировать с помощью function composition — точки. Правда, с предикатамы filter-t так не сработает, но они комбинируются как моноиды или с помощью list comprehension.
На мой взляд, это скрытая тактика. Он явно недоговаривает, причем делает это в своих интересах. Но у согласен, что вопрос неоднозначный, и у вас может быть иное виденье.
Классический пример — функция head. В Haskell она неполная — если передать пустой список, получим runtime exception. В Idris же (который как Haskell, но с dependent types), тип этой функции можно прочитать как «список, у которого по крайней мере один элемент».
И еще, вы пишете, что для newtype runtime overhead меньше. Разве он не отсутствует совсем?
С этим кодом все хорошо, но он не очень элегантный. Используя Object#tap можно превратить его в
Если вам нужен приватный метод класса, используйте privat_class_method или singleton class (class << self).
Ваш пример на Haskell смотрится немного странно, учитывая, что эту простыню можно заменить на обычное
Правда ли, что мы хотим добиться чего-то типа
но в форме
то есть, чтобы комбинировать некомбинируемые средствами языка «трансдюсеры»?
Если да, то я даже не знаю, это не будет быстрее, зато будет намного непонятнее. Кстати, в конкретном случае с map-t можно комбинировать с помощью function composition — точки. Правда, с предикатамы filter-t так не сработает, но они комбинируются как моноиды или с помощью list comprehension.