aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-08-29 15:23:52 +0100
committerLouis Pilfold <louis@lpil.uk>2021-08-29 15:23:52 +0100
commitefc54b447788d325ec38222d3cb1ec5e98c1c030 (patch)
treef06bd42ae63ab8a44e0e71637c1169ad4497e03b
parentc67d4fa20c0f479238241076a6ac1e458c65f874 (diff)
downloadjavascript-efc54b447788d325ec38222d3cb1ec5e98c1c030.tar.gz
javascript-efc54b447788d325ec38222d3cb1ec5e98c1c030.zip
Array fold_right
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/ffi.js4
-rw-r--r--src/gleam/javascript/array.gleam3
-rw-r--r--test/gleam/javascript/array_test.gleam21
4 files changed, 29 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 07d70c7..2b4892c 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -3,4 +3,4 @@
## Unreleased
- The `array` module was created with the `Array(element)` type and `to_list`,
- `from_list`, `map`, `fold`, and `length` functions.
+ `from_list`, `map`, `fold`, `fold_right`, and `length` functions.
diff --git a/src/ffi.js b/src/ffi.js
index 91a2f73..81362bb 100644
--- a/src/ffi.js
+++ b/src/ffi.js
@@ -13,3 +13,7 @@ export function length(thing) {
export function reduce(thing, acc, fn) {
return thing.reduce(fn, acc);
}
+
+export function reduceRight(thing, acc, fn) {
+ return thing.reduceRight(fn, acc);
+}
diff --git a/src/gleam/javascript/array.gleam b/src/gleam/javascript/array.gleam
index 20d12d1..0895ff1 100644
--- a/src/gleam/javascript/array.gleam
+++ b/src/gleam/javascript/array.gleam
@@ -14,3 +14,6 @@ pub external fn map(Array(a), fn(a) -> b) -> Array(b) =
pub external fn fold(Array(e), a, fn(a, e) -> a) -> a =
"../../ffi.js" "reduce"
+
+pub external fn fold_right(Array(e), a, fn(a, e) -> a) -> a =
+ "../../ffi.js" "reduceRight"
diff --git a/test/gleam/javascript/array_test.gleam b/test/gleam/javascript/array_test.gleam
index 5bf52db..ccebcc7 100644
--- a/test/gleam/javascript/array_test.gleam
+++ b/test/gleam/javascript/array_test.gleam
@@ -16,6 +16,10 @@ pub fn length_test() {
assert 0 =
array.from_list([])
|> array.length
+
+ assert 2 =
+ array.from_list([1, 2])
+ |> array.length
}
pub fn map_test() {
@@ -48,3 +52,20 @@ pub fn fold_test() {
|> array.from_list
|> array.fold([], fn(a, e) { [e, ..a] })
}
+
+pub fn fold_right_test() {
+ assert [] =
+ []
+ |> array.from_list
+ |> array.fold_right([], fn(a, e) { [e, ..a] })
+
+ assert [1, 2, 3, 4] =
+ [1, 2, 3, 4]
+ |> array.from_list
+ |> array.fold_right([], fn(a, e) { [e, ..a] })
+
+ assert [4, 3, 2, 1] =
+ [4, 3, 2, 1]
+ |> array.from_list
+ |> array.fold_right([], fn(a, e) { [e, ..a] })
+}