Currying in Swift

class func carry<A, B, C>(f: (AB) -> C) -> A -> B -> C {
    return { a in { b in f(a, b) }}
}

let avg = { (a, b) in (a + b)/2 }
let n1 = avg(13)
//n1 is 2

let avg1 = carry(avg)(1)
//avg1 is avg func with first param = 1
let n2 = avg1(3)
//n2 is 2 = (1 + 3)/2