Skip to content

Instantly share code, notes, and snippets.

@hisui
Created September 27, 2014 02:40
Show Gist options
  • Save hisui/19adc4533edff581a9dc to your computer and use it in GitHub Desktop.
Save hisui/19adc4533edff581a9dc to your computer and use it in GitHub Desktop.
[Swift] currying
('A' to 'F').foldLeft(Seq(Seq[Char]())) { (a, c) => a :+ (a.last :+ c)}.tail.foreach { a =>
val `A,` = a.mkString(", ")
val `->` = a.mkString(" -> ")
println(s"""
func curried<${`A,`}, Z>(fn: (${`A,`}) -> Z) -> (${`->`} -> Z) {
return ${ a.foldRight(s"fn(${`A,`})") { (c, a) => s"{ $c in $a }" }.toLowerCase }
}
""")
}
func curried<A, Z>(fn: (A) -> Z) -> (A -> Z) {
return { a in fn(a) }
}
func curried<A, B, Z>(fn: (A, B) -> Z) -> (A -> B -> Z) {
return { a in { b in fn(a, b) } }
}
func curried<A, B, C, Z>(fn: (A, B, C) -> Z) -> (A -> B -> C -> Z) {
return { a in { b in { c in fn(a, b, c) } } }
}
func curried<A, B, C, D, Z>(fn: (A, B, C, D) -> Z) -> (A -> B -> C -> D -> Z) {
return { a in { b in { c in { d in fn(a, b, c, d) } } } }
}
func curried<A, B, C, D, E, Z>(fn: (A, B, C, D, E) -> Z) -> (A -> B -> C -> D -> E -> Z) {
return { a in { b in { c in { d in { e in fn(a, b, c, d, e) } } } } }
}
func curried<A, B, C, D, E, F, Z>(fn: (A, B, C, D, E, F) -> Z) -> (A -> B -> C -> D -> E -> F -> Z) {
return { a in { b in { c in { d in { e in { f in fn(a, b, c, d, e, f) } } } } } }
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment