aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorLouis Pilfold <louis@lpil.uk>2021-08-29 15:28:05 +0100
committerLouis Pilfold <louis@lpil.uk>2021-08-29 15:28:05 +0100
commitd7cf6c9a27487b182c1e6d832a58e01d022b97fa (patch)
treea97b848a5ac4b98ca844ba9f58492bd71603204b
parentefc54b447788d325ec38222d3cb1ec5e98c1c030 (diff)
downloadjavascript-d7cf6c9a27487b182c1e6d832a58e01d022b97fa.tar.gz
javascript-d7cf6c9a27487b182c1e6d832a58e01d022b97fa.zip
Array index
-rw-r--r--CHANGELOG.md2
-rw-r--r--src/ffi.js6
-rw-r--r--src/gleam/javascript/array.gleam5
-rw-r--r--test/gleam/javascript/array_test.gleam22
4 files changed, 34 insertions, 1 deletions
diff --git a/CHANGELOG.md b/CHANGELOG.md
index 2b4892c..1c049cb 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`, `fold_right`, and `length` functions.
+ `from_list`, `map`, `fold`, `fold_right`, `get`, and `length` functions.
diff --git a/src/ffi.js b/src/ffi.js
index 81362bb..c0b2076 100644
--- a/src/ffi.js
+++ b/src/ffi.js
@@ -1,3 +1,5 @@
+import { Ok, Error } from "./gleam.js";
+
export function toArray(list) {
return list.toArray();
}
@@ -17,3 +19,7 @@ export function reduce(thing, acc, fn) {
export function reduceRight(thing, acc, fn) {
return thing.reduceRight(fn, acc);
}
+
+export function index(thing, index) {
+ return index in thing ? new Ok(thing[index]) : new Error(undefined);
+}
diff --git a/src/gleam/javascript/array.gleam b/src/gleam/javascript/array.gleam
index 0895ff1..4b59b85 100644
--- a/src/gleam/javascript/array.gleam
+++ b/src/gleam/javascript/array.gleam
@@ -1,3 +1,5 @@
+// TODO: docs
+// TODO: labels
pub external type Array(element)
pub external fn to_list(Array(element)) -> List(element) =
@@ -17,3 +19,6 @@ pub external fn fold(Array(e), a, fn(a, e) -> a) -> a =
pub external fn fold_right(Array(e), a, fn(a, e) -> a) -> a =
"../../ffi.js" "reduceRight"
+
+pub external fn get(Array(e), Int) -> Result(e, Nil) =
+ "../../ffi.js" "index"
diff --git a/test/gleam/javascript/array_test.gleam b/test/gleam/javascript/array_test.gleam
index ccebcc7..6e8599c 100644
--- a/test/gleam/javascript/array_test.gleam
+++ b/test/gleam/javascript/array_test.gleam
@@ -69,3 +69,25 @@ pub fn fold_right_test() {
|> array.from_list
|> array.fold_right([], fn(a, e) { [e, ..a] })
}
+
+pub fn index_test() {
+ assert Ok(1) =
+ [1, 2]
+ |> array.from_list
+ |> array.get(0)
+
+ assert Ok(2) =
+ [1, 2]
+ |> array.from_list
+ |> array.get(1)
+
+ assert Error(Nil) =
+ [1, 2]
+ |> array.from_list
+ |> array.get(2)
+
+ assert Error(Nil) =
+ [1, 2]
+ |> array.from_list
+ |> array.get(-1)
+}