diff options
author | Louis Pilfold <louis@lpil.uk> | 2021-08-29 15:28:05 +0100 |
---|---|---|
committer | Louis Pilfold <louis@lpil.uk> | 2021-08-29 15:28:05 +0100 |
commit | d7cf6c9a27487b182c1e6d832a58e01d022b97fa (patch) | |
tree | a97b848a5ac4b98ca844ba9f58492bd71603204b | |
parent | efc54b447788d325ec38222d3cb1ec5e98c1c030 (diff) | |
download | javascript-d7cf6c9a27487b182c1e6d832a58e01d022b97fa.tar.gz javascript-d7cf6c9a27487b182c1e6d832a58e01d022b97fa.zip |
Array index
-rw-r--r-- | CHANGELOG.md | 2 | ||||
-rw-r--r-- | src/ffi.js | 6 | ||||
-rw-r--r-- | src/gleam/javascript/array.gleam | 5 | ||||
-rw-r--r-- | test/gleam/javascript/array_test.gleam | 22 |
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. @@ -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) +} |