Rápida diferencia sutil entre la función de orden superior y curry

NOTA: Esta pregunta se hizo mientras Swift 2.1 era la última.

Dado:

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

Y una función de orden superior

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

La aplicación como tal hace que el valor de la variable miembro nunca cambie:

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

Sin embargo, al cambiar la función a la forma curry

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

La aplicación da como resultado un cambio en el valor de la variable miembro:

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

Tengo curiosidad de por qué es esto. Siempre pensé que la sintaxis al curry era azúcar para la forma ordenada más alta de la función, pero aparentemente hay diferencias semánticas.

Adicionalmenteesta propuesta aceptada eliminar la sintaxis al curry de swift parece indicar que esto es simplemente azúcar, y me preocupa que estemos perdiendo más que la sintaxis al eliminar esto del lenguaje. ¿Hay alguna manera de obtener la misma funcionalidad de una función de orden superior?