O OCaml converterá a função de vários argumentos em curry ou o contrário?

Quando eu estava aprendendo os conceitos básicos do OCaml, me disseram que todas as funções no OCaml são na verdade uma função com apenas um parâmetro. Uma função de múltiplos argumentos é na verdade uma função que recebe um argumento e retorna uma função que recebe o próximo argumento e retorna ....

Isso é curry, eu entendi.

Então minha pergunta é:

caso 1

se eu fizer

let plus x y = x + y

Dentro do OCaml, quando compilar, o OCaml mudará paralet plus = fun x -> fun y -> x + y?

ou o contrário

caso 2

Se eu fizer

let plus = fun x -> fun y -> x + y

OCaml irá convertê-lo paralet plus x y = x + y?

Qual caso é verdadeiro? Qual é o benefício ou otimização que o compilador OCaml fez no caso correto?

Além disso, secaso 2 é verdade, então qual é o ponto a considerar OCaml está fazendo currying? Quero dizer, ele realmente faz o caminho oposto, certo?

Esta questão está realmente relacionada aEntenda o `Fn.const` do Core

questionAnswers(4)

yourAnswerToTheQuestion