Именованные параметры Окамла

Попытка понять механизм Ocaml для именованных параметров. Я понимаю основы, но документ показывает подобный пример:

# let f ~x ~y = x - y;;
val f : x:int -> y:int -> int = 

# let x = 3 and y = 2 in f ~x ~y;;
- : int = 1

Что именно происходит, когда в приложении используется только тильда? Это просто сокращение от ~x:x, подобное определениям? Если да, то может ли кто-нибудь объяснить, почему это:

# ListLabels.fold_left;;
- : f:('a -> 'b -> 'a) -> init:'a -> 'b list -> 'a = 

# let add = (+) and i = 0 
in ListLabels.fold_left ~add ~i [1;2;3];;

производит

- : f:((add:(int -> int -> int) -> i:int -> 'a) ->
   int -> add:(int -> int -> int) -> i:int -> 'a) ->
init:(add:(int -> int -> int) -> i:int -> 'a) -> 'a = 

9
задан dkim 6 August 2012 в 00:29
поделиться