Обычные типы в языке Haskell
А вот обзор некоторых часто используемых типов.
• Тип Int обозначает целое число. Число 7 может быть типа Int, но 7.2 – нет. Тип Int ограничен: у него есть минимальное и максимальное значения. Обычно на 32-битных машинах максимально возможное значение типа Int – это 2 147 483 647, а минимально возможное – соответственно, –2 147 483 648.
ПРИМЕЧАНИЕ. Мы используем компилятор GHC, в котором множество возможных значений типа Int определено размером машинного слова на используемом компьютере. Так что если у вас 64-битный процессор, вполне вероятно, что наименьшим значением типа Int будет –263, а наибольшим 263–1.
• Тип Integer обозначает… э-э-э… тоже целое число. Основная разница в том, что он не имеет ограничения, поэтому может представлять большие числа. Я имею в виду – очень большие. Между тем тип Int более эффективен. В качестве примера сохраните следующую функцию в файл:
factorial :: Integer –> Integer
factorial n = product [1..n]
Затем загрузите этот файл в GHCi с помощью команды :l и проверьте её:
ghci> factorial 50
30414093201713378043612608166064768844377641568960512000000000000
• Тип Float – это действительное число с плавающей точкой одинарной точности. Добавьте в файл ещё одну функцию:
circumference :: Float –> Float
circumference r = 2 * pi * r
Загрузите дополненный файл и запустите новую функцию:
ghci> circumference 4.0
25.132742
• Тип Double – это действительное число с плавающей точкой двойной точности. Двойная точность означает, что для представления чисел используется вдвое больше битов, поэтому дополнительная точность требует большего расхода памяти. Добавим в файл ещё одну функцию:
circumference' :: Double –> Double
circumference' r = 2 * pi * r
Загрузите дополненный файл и запустите новую функцию
ghci> circumference' 4.0
25.132741228718345
• Тип Bool – булевский. Он может принимать только два значения: True и False.
• Тип Char представляет символ Unicode. Его значения записываются в одинарных кавычках. Список символов является строкой.
• Кортежи – это типы, но тип кортежа зависит от его длины и от типа его компонентов. Так что теоретически количество типов кортежей бесконечно – а стало быть, перечислить их все в этой книге нет возможности. Заметьте, что пустой кортеж () – это тоже тип, который может содержать единственное значение: ().