diff --git a/CHANGELOG.md b/CHANGELOG.md index 438b8d0..4564096 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ Breaking changes: New features: - Add `prependArray` (#224 by @JordanMartinez) +- Add `Data.Array.ST.length` (#239 by @Blugatroff) Bugfixes: diff --git a/src/Data/Array/ST.js b/src/Data/Array/ST.js index 57709b7..7dfff14 100644 --- a/src/Data/Array/ST.js +++ b/src/Data/Array/ST.js @@ -27,6 +27,12 @@ export const poke = function (i) { }; }; +export const length = function (xs) { + return function () { + return xs.length; + }; +}; + export const popImpl = function (just) { return function (nothing) { return function (xs) { diff --git a/src/Data/Array/ST.purs b/src/Data/Array/ST.purs index 2817bee..b4e6a87 100644 --- a/src/Data/Array/ST.purs +++ b/src/Data/Array/ST.purs @@ -11,6 +11,7 @@ module Data.Array.ST , peek , poke , modify + , length , pop , push , pushAll @@ -149,6 +150,9 @@ foreign import peekImpl -- | Change the value at the specified index in a mutable array. foreign import poke :: forall h a. Int -> a -> STArray h a -> ST h Boolean +-- | Get the number of elements in a mutable array. +foreign import length :: forall h a. STArray h a -> ST h Int + -- | Remove the last element from an array and return that element. pop :: forall h a. STArray h a -> ST h (Maybe a) pop = popImpl Just Nothing diff --git a/test/Test/Data/Array/ST.purs b/test/Test/Data/Array/ST.purs index 8a83cd9..6e42fc2 100644 --- a/test/Test/Data/Array/ST.purs +++ b/test/Test/Data/Array/ST.purs @@ -49,6 +49,23 @@ testArrayST = do assert $ STA.run (STA.unsafeThaw [1, 2, 3]) == [1, 2, 3] + log "length should return the number of items in an STArray" + + assert $ ST.run (do + arr <- STA.thaw nil + length <- STA.length arr + pure $ length == 0) + + assert $ ST.run (do + arr <- STA.thaw [1] + length <- STA.length arr + pure $ length == 1) + + assert $ ST.run (do + arr <- STA.thaw [1, 2, 3, 4, 5] + length <- STA.length arr + pure $ length == 5) + log "pop should remove elements from an STArray" assert $ STA.run (do