Created
September 15, 2018 12:45
-
-
Save stephanecopin/373104772e8aaeabeff0bc98c199e370 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// 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