Другие численные классы типов

class (Num a, Ord a) => Real a where
  toRational :: a -> Rational

Класс, включающий действительные числа. Поскольку все числа кроме комплексных (тип Complex a, определённый в модуле Data.Complex) – действительные, практически все численные типы входят в этот класс. Единственный метод – преобразование числа в рациональное. Поскольку точность любого машинного представления конечная, такое преобразование возможно. В частности, число π, представленное как машинное число с плавающей запятой двойной точности, имеет вид 3.141592653589793 = 884279719003555/281474976710656.

class (Real a, Enum a) => Integral a where
  quot :: a -> a -> a
  rem :: a -> a -> a
  div :: a -> a -> a
  mod :: a -> a -> a
  quotRem :: a -> a -> (a, a)
  divMod :: a -> a -> (a, a)
  toInteger :: a -> Integer
  {-# MINIMAL quotRem, toInteger #-}

Целочисленные типы. Класс определяет два варианта целочисленного деления quot/rem с округлением в сторону 0 и div/mod с округлением в сторону отрицательной бесконечности. Кроме того, определяет преобразование любого целочисленного типа в тип Integer (имеющего произвольный размер)

class Num a => Fractional a where
  (/) :: a -> a -> a
  recip :: a -> a
  fromRational :: Rational -> a
  {-# MINIMAL fromRational, (recip | (/)) #-}

Класс для дробных чисел. Включает в себя числа с плавающей запятой, такие как Float и Double, а так же рациональные числа, такие как Rational. Вводит оператор деления (не целочисленного), функцию обратной дроби recip и преобразование из Rational.

class Fractional a => Floating a where
  pi :: a
  exp :: a -> a
  log :: a -> a
  sqrt :: a -> a
  (**) :: a -> a -> a
  logBase :: a -> a -> a
  sin :: a -> a
  cos :: a -> a
  tan :: a -> a
  asin :: a -> a
  acos :: a -> a
  atan :: a -> a
  sinh :: a -> a
  cosh :: a -> a
  tanh :: a -> a
  asinh :: a -> a
  acosh :: a -> a
  atanh :: a -> a

Числа с плавающей запятой. Включает в себя Float, Double и т.п. Определяет тригонометрические функции, логарифмы, экспоненту и возведение в степень (**). Помимо прочего, определяет константу числа pi для соотвтетсвующего типа.

class (Real a, Fractional a) => RealFrac a where
  properFraction :: Integral b => a -> (b, a)
  truncate :: Integral b => a -> b
  round :: Integral b => a -> b
  ceiling :: Integral b => a -> b
  floor :: Integral b => a -> b

Класс действительных дробных чисел. Определяет несколько методов округления (вниз, вверх, усечением и алгебраическим округлением к чётному). Функция properFraction выделяет из дробного числа целую часть.

class (RealFrac a, Floating a) => RealFloat a where
  floatRadix :: a -> Integer
  floatDigits :: a -> Int
  floatRange :: a -> (Int, Int)
  decodeFloat :: a -> (Integer, Int)
  encodeFloat :: Integer -> Int -> a
  exponent :: a -> Int
  significand :: a -> a
  scaleFloat :: Int -> a -> a
  isNaN :: a -> Bool
  isInfinite :: a -> Bool
  isDenormalized :: a -> Bool
  isNegativeZero :: a -> Bool
  isIEEE :: a -> Bool
  atan2 :: a -> a -> a

Класс действительных дробных чисел, выраженных в виде чисел с плавающей запятой.

floatRadix выводит основание системы счисления, используемой для хранения числа с плавающей запятой (почти всегда это 2)

floatDigits выводит число разрядов, используемых для хранения мантиссы числа.

floatRange выводит максимальное и минимальное значения экспоненты числа

decodeFloat выводит значения мантиссы и экспоненты числа в виде целых чисел. Экспонента числа выводится относительно floatRadix, т.е. выполняется следующее равенство:

x == m * b**e
where m = fst (decodeFloat x)
      b = floatRadix x
      e = snd (decodeFloat x)

encodeFloat – обратная операция.

exponent – выводит значение экспоненты числа

significand – выводит значение мантиссы числа (т.е. зануляет экспоненту)

scaleFloat – увеличивает/уменьшает экспоненту второго аргумента на число, переданное первым аргументом.

Функции is... проверяют, является ли число NaN, бесконечностью, отрицательным нулём, находится ли оно в денормализованном представлении (обычно используется для очень маленьких чисел). isIEEE возвращает Ture, если на низком уровне число представлено в одном из форматов, определяемых IEEE. True для типов Float и Double.

atan2 y x определяет расширенный арктангенс, т.е. знаковый угол вектора (x, y) относительно оси X.