Много языков функционального программирования имеют поддержку параметров с приправой карри. Для поддержки приправляющих карри функций, параметры к функции являются по существу кортежем, где последний параметр может быть опущен, делая новую функцию, требующую меньшего кортежа.
Я думаю о разработке языка, который всегда использует записи (иначе названный параметрами) для параметров функции.
Таким образом простые математические функции в моем делать полагают, что язык был бы:
add { left : num, right : num } = ...
minus { left : num, right : num } = ..
Можно передать в любой записи на те функции, пока у них есть те два именованных параметра (они могут иметь более справедливый "оставленный" и "право").
Если у них есть только один из именованного параметра, он создает новую функцию:
minus5 :: { left : num } -> num
minus5 = minus { right : 5 }
Я одалживаю часть нотации haskell для вышеупомянутого.
Кто-либо видел язык, который делает это?
OCaml имеет именованные параметры, и каррирование выполняется автоматически (хотя иногда требуется аннотация типа при работе с необязательными параметрами), но они не объединяются в кортеж:
Objective Caml version 3.11.2
# let f ~x ~y = x + y;;
val f : x:int -> y:int -> int = <fun>
# f ~y:5;;
- : x:int -> int = <fun>
# let g = f ~y:5;;
val g : x:int -> int = <fun>
# g ~x:3;;
- : int = 8