Шаг 19.
Основы языка Haskell. Основные типы данных, операции, способы определения функций. Описание типа функции (сигнатура функции)

    На этом шаге мы рассмотрим особенности описания типа функции.

    В функциональном языке используется статическая проверка типов, т.е. любое значение, любое выражение, любая функция должны иметь определённый тип до начала процесса выполнения.

    Таким образом, функции "ожидают" на вход только аргументы, тип которых соответствует описанному в определении функции типу аргументов, иначе на этапе выполнения программы возникнет ошибка, которая называется ошибкой несоответствия типов.

    Для указания типа в синтаксисе языка имеется специальный символ

   "::" (читается: "имеет тип").

    Описание типа функции выглядит так же, как и в математической нотации, за исключением того, что символ "→" кодируется лексемой "->", которая обозначает операцию аппликации для типа функции.

    Операция аппликации для типа функции является правоассоциативной операцией.


Пример сигнатуры функции. Опишем эквивалентными способами тип функции, имеющей два целочисленных аргумента и возвращающей число типа Double:
   (1) someFn:: Int -> Int -> Double
   (2) someFn:: Int -> (Int -> Double)
   (3) someFn:: (->) Int ((->) Int Double)
Определение.
Полиморфным типом называется тип, в описании которого используются переменные типов, обозначаемые строчными буквами латинского алфавита. При этом тип, к которому относится переменная, определяется неявно из контекста, в котором она появилась.

    Переменные типов приобретают значения в зависимости от типов данных, поступающих на вход функции; они детерминированы и не могут иметь разные значения в разных местах записи функции.


Пример. Опишем тип функции f, принимающей на вход два аргумента и возвращающей булево значение (True или False):
   f:: b -> b -> Bool

    Если на вход функции f поступят два целых числа, то переменная типов b получит значение Integer; если на вход поступят два вещественных числа, то переменная типов b получит значение Double.

    На следующем шаге мы рассмотрим постоянные функции.




Предыдущий шаг Содержание Следующий шаг