Last active
September 26, 2019 09:13
-
-
Save aal89/674b6f2c10333898e8ec206621497387 to your computer and use it in GitHub Desktop.
Examples whereby we curry an arithmetic operator over a collection of natural numbers and curry a greetings functions over a collection of strings, in Swift.
This file contains hidden or 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
// ========================== Generic (limited) curry function: | |
func curry<A, B, C>(_ f: @escaping (A, B) -> C) -> (A) -> (B) -> C { | |
return { a in { b in f(a, b) }} | |
} | |
// ========================== Example 1: | |
let add = curry((+) as ((Int, Int) -> Int)) | |
let add2 = add(2) | |
let numbers = 1...100 | |
numbers.map(add2) // [3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, 62, 63, 64, 65, 66, 67, 68, 69, 70, 71, 72, 73, 74, 75, 76, 77, 78, 79, 80, 81, 82, 83, 84, 85, 86, 87, 88, 89, 90, 91, 92, 93, 94, 95, 96, 97, 98, 99, 100, 101, 102] | |
// ========================== Example 2: | |
let stringConcat = { (s1: String, s2: String) in | |
return "\(s1) \(s2)" | |
} | |
let curriedStringConcat = curry(stringConcat) | |
let sayHi = curriedStringConcat("Hello") | |
[ | |
"John", | |
"Jane" | |
].map(sayHi) // ["Hello John", "Hello Jane"] | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment