Исправление korvin_, (текущая версия) :
Так их бесконечность. Потому что для каждого значения существует тип из одного элемента, а значений у Real счётная бесконечность (если предположить, что оперативная память не ограничена).
По-моему, плохая идея.
Это в Racket есть типы из одного значения и прочее такое, а в остальных языках --- нет.
Кроме того, мономорфизация применяется только для реально задействованных типов в программе, а не для вообще всех существующих, во время компиляции.
Если у тебя объявлена такая функция, и фактически в коде применяется только к каким-нибудь double и rational, то и сгенерированы специализации будут только для double и rational.
Ну и для типов из одного значения можно генерировать код соответствующего типа-множества, например, для unit double генерировать как для double. А то и вообще свёртывать, раз значение известно из типа.
Исходная версия korvin_, :
Так их бесконечность. Потому что для каждого значения существует тип из одного элемента, а значений у Real счётная бесконечность (если предположить, что оперативная память не ограничена).
По-моему, плохая идея.
Это в Racket есть типы из одного значения и прочее такое, а в остальных языках --- нет.
Кроме того, мономорфизация применяется только для реально задействованных типов в программе, а не для вообще всех существующих, во время компиляции.
Если у тебя объявлена такая функция, и фактически в коде применяется только к каким-нибудь double и rational, то и сгенерированы специализации будут только для double и rational.
Ну и для типов из одного значения можно генерировать код соответствующего типа-множества, например.