Skip to content

Instantly share code, notes, and snippets.

@bkase
Last active June 4, 2016 05:41
Show Gist options
  • Save bkase/7234db281bb097b569f43249ce0bfe84 to your computer and use it in GitHub Desktop.
Save bkase/7234db281bb097b569f43249ce0bfe84 to your computer and use it in GitHub Desktop.
Get function arity statically (up to 24 parameters)
func arity<A,R>(f: A -> R) -> Int {
return 1
}
func arity<A,B,R>(f: (A, B) -> R) -> Int {
return 2
}
func arity<A,B,C,R>(f: (A, B, C) -> R) -> Int {
return 3
}
func arity<A,B,C,D,R>(f: (A, B, C, D) -> R) -> Int {
return 4
}
func arity<A,B,C,D,E,R>(f: (A, B, C, D, E) -> R) -> Int {
return 5
}
func arity<A,B,C,D,E,F,R>(f: (A, B, C, D, E, F) -> R) -> Int {
return 6
}
func arity<A,B,C,D,E,F,G,R>(f: (A, B, C, D, E, F, G) -> R) -> Int {
return 7
}
func arity<A,B,C,D,E,F,G,H,R>(f: (A, B, C, D, E, F, G, H) -> R) -> Int {
return 8
}
func arity<A,B,C,D,E,F,G,H,I,R>(f: (A, B, C, D, E, F, G, H, I) -> R) -> Int {
return 9
}
func arity<A,B,C,D,E,F,G,H,I,J,R>(f: (A, B, C, D, E, F, G, H, I, J) -> R) -> Int {
return 10
}
func arity<A,B,C,D,E,F,G,H,I,J,K,R>(f: (A, B, C, D, E, F, G, H, I, J, K) -> R) -> Int {
return 11
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L) -> R) -> Int {
return 12
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M) -> R) -> Int {
return 13
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N) -> R) -> Int {
return 14
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O) -> R) -> Int {
return 15
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P) -> R) -> Int {
return 16
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q) -> R) -> Int {
return 17
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,Z,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Z) -> R) -> Int {
return 18
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,Z,Y,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Z, Y) -> R) -> Int {
return 19
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,Z,Y,X,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Z, Y, X) -> R) -> Int {
return 20
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,Z,Y,X,W,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Z, Y, X, W) -> R) -> Int {
return 20
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,Z,Y,X,W,V,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Z, Y, X, W, V) -> R) -> Int {
return 21
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,Z,Y,X,W,V,U,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Z, Y, X, W, V, U) -> R) -> Int {
return 22
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,Z,Y,X,W,V,U,T,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Z, Y, X, W, V, U, T) -> R) -> Int {
return 23
}
func arity<A,B,C,D,E,F,G,H,I,J,K,L,M,N,O,P,Q,Z,Y,X,W,V,U,T,S,R>(f: (A, B, C, D, E, F, G, H, I, J, K, L, M, N, O, P, Q, Z, Y, X, W, V, U, T, S) -> R) -> Int {
return 24
}
@aweis
Copy link

aweis commented Jun 4, 2016

BUG: I just tried this with a 25-arity function. It did not work.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment