Язык F# позволяет определять псевдонимы для типов. Для применяется оператор type. Он имеет следующий формальный синтаксис:
type название_псевдонима = определение_псевдонима
После ключевого слова type идет название псевдонима. А после знака равно собственно определение нового псевдонима.
Вначале рассмотрим ситуацию, где мы могли бы это применить:
let action x y (func: float ->float-> float) = func x y let result1 = action 10.0 6.0 (fun x y -> x+y) // 16 printfn $"result1 = {result1}" // result1 = 16
В данном случае функция action
в качестве третьего параметра принимает функцию, которая выполняет некоторые действия над первым и вторым параметром.
И данном случае мы явно устанавливаем тип этой функции: float ->float-> float
- то есть функция принимает два параметра типа float и возращает значение float.
Определение типа функции выглядит несколько громоздко. Но ситуация усложнится, если мы хотим задейтвовать этот тип многократно. Например, определим еще значение этого типа:
let sum : (float ->float-> float) = fun x y -> x + y let action x y (func: float ->float-> float) = func x y let result1 = action 10.0 6.0 sum // 16 printfn $"result1 = {result1}" // result1 = 16
Теперь изменим этот код, применим определение псевдонима с помощью оператора type:
type operation = float ->float-> float let sum: operation = fun x y -> x + y let action x y (func: operation) = func x y let result1 = action 10.0 6.0 sum // 16 printfn $"result1 = {result1}" // result1 = 16
Здесь определяется псевдоним operation
, который по факту представляет тип float ->float-> float
. То есть фактически мы определяем псевдоним (хотя type
также может применяться для
определения новых псевдонимов, что будет рассмотрено далее). Далее через идентификатор operation
мы можем ссылаться на тип float ->float-> float
.