diff options
-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) +} |