An array that always contains at least one element.
Additionaly, it can track a currently selected index, which is guaranteed to point to an existing element in the array.
These additional constraints enable two functions, namely getFirst and
getSelected to return a value directly instead of a Maybe.
Inspired by mgold/elm-nonempty-list.
import Array.NonEmpty as NEA exposing (NonEmptyArray)
oneElement : NonEmptyArray
oneElement = NEA.fromElement 13
twoElements : NonEmptyArray
twoElements = NEA.push 42 one
createdFromList : Maybe NonEmptyArray
createdFromList = NEA.fromList ["a", "b", "b"]All functions from core Array are available, with the exception of isEmpty (which would be an alias for False).
In addition, non-empty-array offers additional functions made possible due to the additional constraints:
getFirst: Returns the first element. Since it is known that this element exists, this function does not return a Maybe but the actual element type.getSelected: Returns the element at the currently selected index. Since it is known that this element exists, this function does not return a Maybe but the actual element type.updateSelected: Updates the element at the currently selected index.Finally, it offers update, removeAt and removeAtSafe, which are not in core Array but inspired by Array.Extra.
The easiest way to run the tests is to install the npm packages elm-test and elm-verify-examples globally:
npm i elm-test -g
npm i elm-verify-examples -gThen, from the project root directory, run
elm-verify-examples && elm-testThis will require downloading some packages on the first run.
This library uses the BSD3 License. See LICENSE for more information.