Diferença sutil rápida entre função de ordem com curry e de ordem superior

NOTA: Esta pergunta foi feita enquanto o Swift 2.1 era o mais recente.

Dado:

class IntWrapper {
    var i: Int = 1
}
func add(inout m: Int, i: Int) {
    m += i
}

E uma função de ordem superior

func apply() -> (inout i: Int) -> () -> () {
    return { (inout i: Int) -> () -> () in
        return {
            add(&i, i: 1)
        }
    }
}

A aplicação assim resulta no valor da variável do membro nunca mudando:

var intW = IntWrapper()
print(intW.i)                             // Prints '1'
apply()(i: &intW.i)()
print(intW.i)                             // Prints '1'

No entanto, ao alterar a função para o formato ao curry

func apply()(inout i: Int)() -> () {
    add(&i, i: 1)
}

O aplicativo resulta na alteração do valor da variável do membro:

var intW = IntWrapper()
print(intW.i)                             // Prints '1'
apply()(i: &intW.i)()
print(intW.i)                             // Prints '2'

Estou curioso para saber por que isso acontece. Eu sempre pensei que a sintaxe ao curry fosse açúcar para a forma mais alta da função, mas aparentemente existem diferenças semânticas.

Além dissoesta proposta aceita remover a sintaxe ao curry do swift parece indicar que isso é apenas açúcar, e estou preocupado que estamos perdendo mais do que sintaxe removendo isso do idioma. Existe uma maneira de obter a mesma funcionalidade de uma função de ordem superior?

questionAnswers(0)

yourAnswerToTheQuestion