Prelude>
realToFrac (1::Float) + (1::Double)2.0
Отметим, что этой функцией можно пользоваться не только для типов Float
и Double, в Haskell возможнысамые экзотические числа.
Если преобразования между Float
и Double происходят очень-очень часто, возможно имеет смысл вос-пользоваться специальными для GHC
функциями: Они определены в модуле GHC.Float:Prelude> :
m +GHC.FloatPrelude GHC.Float> :
t float2Doublefloat2Double :: Float -> Double
Prelude GHC.Float> :
t double2floatdouble2Float :: Double -> Float
2.7 Документация
К этой главе мы уже рассмотрели основные конструкции языка и базовые типы. Если у вас есть какая-то
задача, вы уже можете начать её решать. Для этого сначала нужно будет описать в типах проблему, затем
выразить с помощью функций её решение.
Но не стоит писать все функции самостоятельно, если функция достаточно общая её наверняка кто-
нибудь уже написал. Самые полезные функции и классы определены в модуле Prelude
и основных стан-дартных библиотечных модулях. Было бы излишним описывать каждую функцию, книга превратилась бы
в справочник. Вместо этого давайте научимся искать функции в документации. Нам понадобится умение
составлять типы функций и небольшое знание английского языка.
Для начала о том, где находится документация к стандартным модулям. Если вы установили ghc вме-
сте с Haskell Platform
под Windows скорее всего во вкладке Пуск, там где иконка ghc там же находитсяи документация. В Linux необходимо найти директорию с документацией, скорее всего она в директории
/
usr/local/share/doc/ghc/libraries. Также документацию можно найти в интернете, наберите в поиско-вике Haskell Hierarchical Libraries. На главной странице документации вы найдёте огромное количество мо-
дулей. Нас пока интересуют разделы Data
и Prelude. Разделы расположены по алфавиту. То что вы видитеэто стандартный вид документации в Haskell. Документация делается с помощью специального приложе-
ния Haddock
, мы тоже научимся такие делать, но позже, пока мы попробуем разобраться с тем как искать вдокументации функции.
Предположим нам нужно вычислить длину списка. Нам нужна функция, которая принимает список и
возвращает целое число, скорее всего её тип [a] -> Int
, обычно во всех библиотечных функциях для це-лых чисел используется тип Int
, также на месте параметра используются буквы a, b, c. Мы можем открытьдокументацию к Prelude
набрать в строке поиска тип [a] -> Int. Или поискать такую функцию в разде-ле функций для списков List Operations
. Тогда мы увидим единственную функцию с таким типом, подговорящим именем length. Так мы нашли то, что искали.
Или мы ищем функцию, которая переворачивает список, нам нужна функция с типом [a] ->
[a]. Такихфункций в Prelude
несколько, но имя reverse одной из них может намекнуть на её смысл.Но одной Prelude
мир стандартных функций Haskell не ограничивается, если вы не нашли необходимуювам функцию в Prelude
её стоит поискать в других библиотечных модулях. Обычно функции разделяютсяпо тому на каких типах они определены. Так например функция sort :: Ord
a => [a] -> [a] определенане в Prelude
, а в отдельном библиотечном модуле для списков он называется Data.List. Так же есть многодругих модулей для разных типов, таких как Data.Bool
, Data.Char, Data.Function, Data.Maybe и многиедругие. Не пугайтесь изобилия модулей постепенно они станут вашей опорой.
Для поиска в стандартных библиотеках есть замечательный интернет-сервис Hoogle (http://www.
haskell.org/hoogle/). Hoogle может искать значения не только по имени, но и по типам. Например мы
хотим узнать целочисленный код символа. Поиск по типу Char -> Int
выдаёт искомую функцию digitToInt.2.8 Краткое содержание
В этой главе мы познакомились с интерпретатором ghci и основными типами. Рассмотрели много при-
меров.
Документация | 37
Типы
Bool
– Основные операции: &&, ||, not, if
c then t else eChar
– Значения пишутся в ординарных кавычках, как в ’H’, ’+’
String
– Значения пишутся в двойных кавычках, как в ”Hello World”
Int
– Эффективные целые числа, но ограниченные
Integer
– Не ограниченные целые числа, но не эффективные
Double
– Числа с двойной точностью
Float
– Числа с ординарной точностью
Rational
– Дробные числа
Нам впервые встретились кортежи (на функции properFraction). Кортежи используются для возвраще-
ния из функции нескольких значений. Элементы кортежа могут иметь разные типы. Для извлечения элемен-
тов из кортежей-пар используются функции fst и snd. Кортежи пишутся в скобках, и элементы разделены
запятыми:
(a, b)
(a, b, c)
(a, b, c, d)
...
Классы
Show
Печать
Eq
Сравнение на равенство
Num
Сложение и умножение
Fractional
Деление
Особенности синтаксиса
Запись применения функции:
Префиксная