diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/gleam/function.gleam | 34 |
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. /// |