Skip to content

Instantly share code, notes, and snippets.

@stephanecopin
Created September 15, 2018 12:45
Show Gist options
  • Save stephanecopin/373104772e8aaeabeff0bc98c199e370 to your computer and use it in GitHub Desktop.
Save stephanecopin/373104772e8aaeabeff0bc98c199e370 to your computer and use it in GitHub Desktop.
// The goal of this file is to allow easy uncurrying of member methods.
// For example, if you have:
// final class MyClass {
// func doSomething(_ arg1: Bool, _ arg2: String) -> Bool {
// // Something...
// return true
// }
// }
// And you want to be able to call `doSomething` as a regular function, you'd have to do `MyClass.doSomething(myClassInstance)(arg1, arg2)
// With this, you can do `uncurry(MyClass.doSomething)(myClassInstance, arg1, arg2)` which can be helpful and desirable.
// This file was autogenerated for usage of up to 24 arguments in methods.
func uncurry<A, R>(_ curried: @escaping (A) -> () -> R) -> (A) -> R {
return { a in
return curried(a)()
}
}
func uncurry<A, B, R>(_ curried: @escaping (A) -> (B) -> R) -> (A, B) -> R {
return { a, b in
return curried(a)(b)
}
}
func uncurry<A, B, C, R>(_ curried: @escaping (A) -> (B, C) -> R) -> (A, B, C) -> R {
return { a, b, c in
return curried(a)(b, c)
}
}
func uncurry<A, B, C, D, R>(_ curried: @escaping (A) -> (B, C, D) -> R) -> (A, B, C, D) -> R {
return { a, b, c, d in
return curried(a)(b, c, d)
}
}
func uncurry<A, B, C, D, E, R>(_ curried: @escaping (A) -> (B, C, D, E) -> R) -> (A, B, C, D, E) -> R {
return { a, b, c, d, e in
return curried(a)(b, c, d, e)
}
}
func uncurry<A, B, C, D, E, F, R>(_ curried: @escaping (A) -> (B, C, D, E, F) -> R) -> (A, B, C, D, E, F) -> R {
return { a, b, c, d, e, f in
return curried(a)(b, c, d, e, f)
}
}
func uncurry<A, B, C, D, E, F, G, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G) -> R) -> (A, B, C, D, E, F, G) -> R {
return { a, b, c, d, e, f, g in
return curried(a)(b, c, d, e, f, g)
}
}
func uncurry<A, B, C, D, E, F, G, H, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H) -> R) -> (A, B, C, D, E, F, G, H) -> R {
return { a, b, c, d, e, f, g, h in
return curried(a)(b, c, d, e, f, g, h)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I) -> R) -> (A, B, C, D, E, F, G, H, I) -> R {
return { a, b, c, d, e, f, g, h, i in
return curried(a)(b, c, d, e, f, g, h, i)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J) -> R) -> (A, B, C, D, E, F, G, H, I, J) -> R {
return { a, b, c, d, e, f, g, h, i, j in
return curried(a)(b, c, d, e, f, g, h, i, j)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K) -> R) -> (A, B, C, D, E, F, G, H, I, J, K) -> R {
return { a, b, c, d, e, f, g, h, i, j, k in
return curried(a)(b, c, d, e, f, g, h, i, j, k)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u, v in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u, v)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u, v, w in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u, v, w)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W, X, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W, X) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W, X) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u, v, w, x in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u, v, w, x)
}
}
func uncurry<A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W, X, Z, R>(_ curried: @escaping (A) -> (B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W, X, Z) -> R) -> (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, T, S, U, V, W, X, Z) -> R {
return { a, b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u, v, w, x, z in
return curried(a)(b, c, d, e, f, g, h, i, j, k, l, m, n, o, p, q, t, s, u, v, w, x, z)
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment