I am trying to convert a regular function into curry function but getting Execution was interrupted
Below is the code where I am currying a function and doing an unsafeBitCast to call a function with one parameter and call it later with the second parameter.
func curry<T>(f: (T, T) -> T) -> T -> T -> T {
return { a in
typealias Function = (T) -> (T -> T)
let fn = unsafeBitCast(f, Function.self)
return curry(fn(a))
}
}
func curry<T>(f: T -> T) -> T -> T {
return { f($0) } // Throws Runtime Exception
}
func adder(x: Int, y: Int) -> Int {
return x + y
}
let adderCurry = curry(adder)
let add1 = adderCurry(1)
add1(2)
Does anyone know how I can convert a regular function with two or more parameters into a curry function as such
func add(x: Int)(y: Int) -> Int {
return x + y
}
EDIT: This example also does not work
func curry<T>(f: (T, T) -> T) -> T -> T -> T {
typealias Function = T -> T -> T
return unsafeBitCast(f, Function.self)
}
func adder(x: Int, y: Int) -> Int {
return x + y
}
let adderCurry = curry(adder)
let add1 = adderCurry(1)
add1(2)