Цитирую по официальному описанию языка:
КлассС одной стороны, система устроена очень логично: введение дополнительных операций расширяет множество чисел. Так, деление целых дополняет целые — рациональными. Логарифмы и экспоненты требуют действительных. Однако сразу представить и запомнить всю иерархию классов непросто. Лучше один раз увидеть! ПоэтомуNumчисловых типов является подклассом классаEq, так как все числа можно сравнить на равенство; его подклассRealтакже является подклассом классаOrd, так как остальные операции сравнения применимы ко всем числам, за исключением комплексных (определенных в библиотекеComplex). КлассIntegralсодержит целые числа ограниченного и неограниченного диапазона; классFractionalсодержит все нецелые типы; а классFloatingсодержит все числа с плавающей точкой, действительные и комплексные.

Исходник диаграммы
Оформил как «диаграмму классов», чтобы всем привыкшим к ООП было понятно, что от чего «наследуется» (линия со стрелкой к родителю). Почти все эти типы являются абстрактными («интерфейсами» в ОО-терминологии). Конкретные же числовые типы я обвёл серыми рамочками (можно было обвести и
Ratio). Полиморфные классы обозначил прямоугольниками со скруглёнными углами. Типы параметров таких полиморфных классов указал «аггрегацией» (линия с ромбиком на стороне полиморфного класса). При составлении ориентировался на первоисточник.Also in English.



А ты случайно не разобрался, как работать с числами в хаскель в русской локале, чтобы десятичная часть отделялась запятой, а не точкой при печати и разборе?
ОтветитьУдалитьКстати, интересный вопрос. Видимо, получая LConv из localeconv, как в Си, писать процедуру форматирования числа самому. Есть ещё setLocale, но что-то даже упоминания про что-то вроде пайтоновского locale.format не нашлось. Разберёшься, отпишись, пожалуйста.
ОтветитьУдалитьЗадал твой вопрос на stackoverflow. Самому любопытно.
ОтветитьУдалить