Currying
Applying curried to a function of n parameters, for example, (A, B) -> R
, transforms it into a chain of the n
function calls, (A) -> (B) -> R
:
import arrow.syntax.function.curried import arrow.syntax.function.pipe import arrow.syntax.function.reverse import arrow.syntax.function.uncurried fun main(args: Array<String>) { val strong: (String, String, String) -> String = { body, id, style -> "<strong id=\"$id\" style=\"$style\">$body</strong>" } val curriedStrong: (style: String) -> (id: String) -> (body: String) -> String = strong.reverse().curried() val greenStrong: (id: String) -> (body: String) -> String = curriedStrong("color:green") val uncurriedGreenStrong: (id: String, body: String) -> String = greenStrong.uncurried() println(greenStrong("movie5")("Green Inferno")) println(uncurriedGreenStrong("movie6", "Green Hornet")) "Fried Green Tomatoes" pipe ("movie7" pipe greenStrong) pipe ::println }
Functions...