aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorSebastian Porto <s@porto5.com>2020-10-18 12:38:27 +1100
committerLouis Pilfold <louis@lpil.uk>2020-10-18 15:56:20 +0100
commit5239830bc8bf6d8c1df566e7bfe995ff24d8514a (patch)
treebed6a42451e0f8fcccefa21a40dce9350ff62d00 /src
parent1489e38aaa076112fe580cd096e4c827304d2bd3 (diff)
downloadgleam_stdlib-5239830bc8bf6d8c1df566e7bfe995ff24d8514a.tar.gz
gleam_stdlib-5239830bc8bf6d8c1df566e7bfe995ff24d8514a.zip
Add function.curryN
Diffstat (limited to 'src')
-rw-r--r--src/gleam/function.gleam34
1 files changed, 34 insertions, 0 deletions
diff --git a/src/gleam/function.gleam b/src/gleam/function.gleam
index 70da466..08e7efd 100644
--- a/src/gleam/function.gleam
+++ b/src/gleam/function.gleam
@@ -7,6 +7,40 @@ pub fn compose(fun1: fn(a) -> b, fun2: fn(b) -> c) -> fn(a) -> c {
fn(a) { fun2(fun1(a)) }
}
+/// Takes a function with arity two
+/// and returns a curried equivalent.
+/// fn(a, b) -> c becomes fn(a) -> fn(b) -> c
+pub fn curry2(fun: fn(a, b) -> value) {
+ fn(a) { fn(b) { fun(a, b) } }
+}
+
+/// Takes a function with arity three
+/// and returns a curried equivalent.
+/// fn(a, b, c) -> d becomes fn(a) -> fn(b) -> fn(c) -> d
+pub fn curry3(fun: fn(a, b, c) -> value) {
+ fn(a) { fn(b) { fn(c) { fun(a, b, c) } } }
+}
+
+/// Takes a function with arity four
+/// and returns a curried equivalent.
+pub fn curry4(fun: fn(a, b, c, d) -> value) {
+ fn(a) { fn(b) { fn(c) { fn(d) { fun(a, b, c, d) } } } }
+}
+
+/// Takes a function with arity five
+/// and returns a curried equivalent.
+pub fn curry5(fun: fn(a, b, c, d, e) -> value) {
+ fn(a) { fn(b) { fn(c) { fn(d) { fn(e) { fun(a, b, c, d, e) } } } } }
+}
+
+/// Takes a function with arity six
+/// and returns a curried equivalent.
+pub fn curry6(fun: fn(a, b, c, d, e, f) -> value) {
+ fn(a) {
+ fn(b) { fn(c) { fn(d) { fn(e) { fn(f) { fun(a, b, c, d, e, f) } } } } }
+ }
+}
+
/// Takes a function that takes two arguments and returns a new function that
/// takes the same two arguments, but in reverse order.
///