Skip to content

Instantly share code, notes, and snippets.

@kazk
Created February 15, 2015 18:49
Show Gist options
  • Save kazk/f7072ca845d32dc77d75 to your computer and use it in GitHub Desktop.
Save kazk/f7072ca845d32dc77d75 to your computer and use it in GitHub Desktop.
// MARK: - Compose
public func compose<T,A,B>(a:(B)->A, b:(T)->B) -> (T)->A {
return {(x) in a(b(x))}
}
public func compose<T,A,B,C>(a:(B)->A, b:(C)->B, c:(T)->C) -> (T)->A {
return {(x) in a(b(c(x)))}
}
public func compose<T,A,B,C,D>(a:(B)->A, b:(C)->B, c:(D)->C, d:(T)->D) -> (T)->A {
return {(x) in a(b(c(d(x))))}
}
public func compose<T,A,B,C,D,E>(a:(B)->A, b:(C)->B, c:(D)->C, d:(E)->D, e:(T)->E) -> (T)->A {
return {(x) in a(b(c(d(e(x)))))}
}
public func compose<T,A,B,C,D,E,F>(a:(B)->A, b:(C)->B, c:(D)->C, d:(E)->D, e:(F)->E, f:(T)->F) -> (T)->A {
return {(x) in a(b(c(d(e(f(x))))))}
}
public func compose<T,A,B,C,D,E,F,G>(a:(B)->A, b:(C)->B, c:(D)->C, d:(E)->D, e:(F)->E, f:(G)->F, g:(T)->G) -> (T)->A {
return {(x) in a(b(c(d(e(f(g(x)))))))}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment