Технически Elm не имеет функций более одного аргумента. Тип Float -> Float -> Float
(который совпадает с Float -> (Float -> Float)
, поскольку ->
ассоциирован справа) представляет функцию, которая принимает Float
и возвращает другую функцию, которая принимает другое значение с плавающей запятой. Затем вызов типа (/) a b
(который совпадает с ((/) a) b
, поскольку приложение функции является левоассоциативным) сначала применяет функцию (/)
к a
, а затем применяет результирующую функцию к b
.
Обратите внимание, что вы также можете просто применить /
к одному аргументу, не применяя результат сразу ко второму аргументу: например, inv = (/) 1
определит функцию inv
, которая действует так же, как inv x = 1 / x
.
(Float, Float) -> Float
будет типом функции, которая принимает кортеж, содержащий два числа с плавающей точкой. Вы можете определить функцию с этим типом следующим образом:
f: (Float, Float) -> Float
f (x,y) = ...
И затем вы можете вызвать ее как f (arg1, arg2)
, где arg1
и arg2
являются числами с плавающей запятой или f tup
, где tup
являетсякортеж из двух поплавков.