Вообще, классы чисел в Haskell - это беспорядок.Они определены таким образом, чтобы было удобно и легко использовать базовые типы чисел, такие как Int
, Integer
, Double
и т. Д. Но когда вы начинаете хотеть более сложные виды чисел ... они неЭто всегда имеет большой смысл.
Относительно Num
: Это интересно.И Haskell '98, и Haskell 2010 Report требуют, чтобы
class (Eq a, Show a) => Num a
Если вы посмотрите документацию для base-4.0.0.0
, вы обнаружите, что это так:
http://hackage.haskell.org/package/base-4.0.0.0/docs/Prelude.html#7
Однако в какой-то момент пакет base
был изменен так, что Num
теперь не имеет суперклассов (что противоречит Отчету).Так что ваши слайды не ошибаются; использовал , чтобы быть определенным таким образом, но в какой-то момент он изменился.Если вы копаете достаточно далеко, вероятно, есть билет или вики-страница об этом.
Относительно Real
... да, название довольно вводит в заблуждение.Я также не совсем уверен, почему он отличается от RealFrac
, который также о преобразованиях из числа в различные соотношения или целые числа.
Если интересует этот вид вещейу вас есть различные "альтернативные" библиотеки Prelude (например, "классная Prelude", "числовая Prelude"), которые заменяют стандартную Prelude чем-то, что, возможно, будет более разумным.Оказывается, на удивление сложно сделать это действительно хорошо - вот почему официальная спецификация не сильно изменилась.Никто не предложил что-либо окончательно лучше.