Короткий ответ: да, это именно то, что он означает. Последний тип - это возвращаемое значение, все остальные - аргументы.
Это по очень простой причине, а именно: в Haskell нет такой функции, как функция multi-agrument. Все функции являются единственными аргументами в отношении вероятности, общий тип функции - a -> b
. Тогда у нас есть что-то похожее на многопараметрические функции благодаря currying.Все, что вам нужно, чтобы понять это в круглые скобки:
add :: Integer -> (Integer -> Integer)
который гласит: add
это функция, которая принимает Integer
и возвращает функцию Integer -> Integer
. Здесь все круглые скобки заключаются в правой части. Наоборот, когда вы подаете заявление, все круглые скобки сжать на левую руку размере, например, так:
(add 5) 6
который гласит: применять add
аргумента 5
. Взамен вы получите функцию - затем примените эту функцию к 6
(конечным результатом будет 11
). Мы могли бы одинаково хорошо определить его следующим образом:
add :: Integer -> (Integer -> Integer)
add x = \y -> x + y
Поэтому тот факт, что вы можете указать несколько аргументов для функции лишь синтаксический сахар, так что вам не придется возвращать все эти лямбды вниз по дороге.
Этот факт также, почему мы можем это сделать:
add5 :: Integer -> Integer
add5 = (+5)
Я думаю, ссылка на [карринг] (https://wiki.haskell.org/Currying) и [частичное применение] (HTTPS : //wiki.haskell.org/Partial_application) для деталей не повредит. – bereal