Swiftの勉強がてらカリー化を考えてみました。こんな感じかと。
curry.swift
func curry<T1,T2,T3>(_ f:@escaping (T1,T2) -> T3) -> (T1) -> (T2) -> T3 {
func F(x:T1) -> (T2) -> T3 { return {(y:T2) in f(x,y)}}
return F
}
let curryadd = curry((+) as (Int,Int) -> Int)
let add3 = curryadd(3)
add3(10)