ESC
No recent searches
Search by
Standard Library  /  Array

Array

Utilities for working with arrays.

Edit on GitHub

An immutable array implementation is available in the Immutable submodule.

Added in 0.2.0
versionchanges
0.1.0Originally named `arrays`
0.2.0Renamed to `array`
from "array" include Array
[> 1, 2, 3]

Values

Functions and constants included in the Array module.

Array.length

Added in 0.1.0 No other changes yet.
length : (array: Array<a>) => Number

Provides the length of the input array.

Parameters:

array: The array to inspect

Returns:

Number: The number of elements in the array

Examples:

Array.length([> 1, 2, 3, 4, 5]) == 5

Array.make

Added in 0.1.0 No other changes yet.
make : (length: Number, item: a) => Array<a>

Creates a new array of the specified length with each element being initialized with the given value.

Parameters:

length: The length of the new array
item: The value to store at each index

Returns:

Array<a>: The new array

Throws:

InvalidArgument(String)

  • When length is not an integer
  • When length is negative

Examples:

Array.make(5, "foo") == [> "foo", "foo", "foo", "foo", "foo"]

Array.init

Added in 0.1.0 No other changes yet.
init : (length: Number, fn: (Number => a)) => Array<a>

Creates a new array of the specified length where each element is initialized with the result of an initializer function. The initializer is called with the index of each array element.

Parameters:

length: The length of the new array
fn: The initializer function to call with each index, where the value returned will be used to initialize the element

Returns:

Array<a>: The new array

Throws:

InvalidArgument(String)

  • When length is not an integer
  • When length is negative

Examples:

Array.init(5, n => n + 3) == [> 3, 4, 5, 6, 7]

Array.get

Added in 0.1.0
versionchanges
0.2.0Argument order changed to data-last
get : (index: Number, array: Array<a>) => a

An alias for normal syntactic array access, i.e. array[n].

Retrieves the element from the array at the specified index. A negative index is treated as an offset from the end of the array.

Parameters:

index: The index to access
array: The array to access

Returns:

a: The element from the array

Throws:

IndexOutOfBounds

  • When index is not an integer
  • When index is out of bounds

Examples:

Array.get(1, [> 1, 2, 3, 4, 5]) == 2

Array.set

Added in 0.1.0
versionchanges
0.2.0Argument order changed to data-last
set : (index: Number, value: a, array: Array<a>) => Void

An alias for normal syntactic array set, i.e. array[n] = value.

Sets the element at the specified index in the array to the new value. A negative index is treated as an offset from the end of the array.

Parameters:

index: The index to update
value: The value to store
array: The array to update

Throws:

IndexOutOfBounds

  • When index is not an integer
  • When index is out of bounds

Examples:

let array = [> 1, 2, 3, 4, 5]
Array.set(1, 9, array)
assert array == [> 1, 9, 3, 4, 5]

Array.append

Added in 0.1.0 No other changes yet.
append : (array1: Array<a>, array2: Array<a>) => Array<a>

Creates a new array with the elements of the first array followed by the elements of the second array. This does not modify the arguments.

Parameters:

array1: The array containing elements to appear first
array2: The array containing elements to appear second

Returns:

Array<a>: The new array containing elements from array1 followed by elements from array2

Throws:

InvalidArgument(String)

  • When the combined length of the two arrays is not an integer

Examples:

Array.append([> 1, 2], [> 3, 4, 5]) == [> 1, 2, 3, 4, 5]

Array.concat

Added in 0.1.0 No other changes yet.
concat : (arrays: List<Array<a>>) => Array<a>

Creates a single array containing the elements of all arrays in the provided list. Does not modify any of the input arguments.

Parameters:

arrays: A list containing all arrays to combine

Returns:

Array<a>: The new array

Throws:

InvalidArgument(String)

  • When the combined length of all arrays is not an integer

Examples:

Array.concat([[> 1, 2], [> 3, 4], [> 5, 6]]) == [> 1, 2, 3, 4, 5, 6]

Array.copy

Added in 0.1.0 No other changes yet.
copy : (array: Array<a>) => Array<a>

Produces a shallow copy of the input array. The new array contains the same elements as the original.

Parameters:

array: The array to copy

Returns:

Array<a>: The new array containing the elements from the input

Examples:

Array.copy([> 1, 2, 3]) == [> 1, 2, 3]

Array.cycle

Added in 0.4.4 No other changes yet.
cycle : (fn: (a => Void), n: Number, array: Array<a>) => Void

Iterates an array a given number of times, calling an iterator function on each element.

Parameters:

fn: The iterator function to call with each element
n: The number of times to iterate the given array
array: The array to iterate

Examples:

let mut str = ""
Array.cycle(s => str = str ++ s, 2, [> "a", "b", "c"])
assert str == "abcabc"

Array.forEach

Added in 0.1.0
versionchanges
0.2.0Argument order changed to data-last
forEach : (fn: (a => Void), array: Array<a>) => Void

Iterates an array, calling an iterator function on each element.

Parameters:

fn: The iterator function to call with each element
array: The array to iterate

Examples:

let mut str = ""
Array.forEach(s => str = str ++ s, [> "a", "b", "c"])
assert str == "abc"

Array.forEachi

Added in 0.1.0
versionchanges
0.2.0Argument order changed to data-last
forEachi : (fn: ((a, Number) => Void), array: Array<a>) => Void

Iterates an array, calling an iterator function on each element. Also passes the index as the second argument to the function.

Parameters:

fn: The iterator function to call with each element
array: The array to iterate

Examples:

let mut str = ""
Array.forEachi((s, i) => str = str ++ s ++ toString(i), [> "a", "b", "c"])
assert str == "a0b1c2"

Array.map

Added in 0.1.0
versionchanges
0.2.0Argument order changed to data-last
map : (fn: (a => b), array: Array<a>) => Array<b>

Produces a new array initialized with the results of a mapper function called on each element of the input array.

Parameters:

fn: The mapper function to call on each element, where the value returned will be used to initialize the element in the new array
array: The array to iterate

Returns:

Array<b>: The new array with mapped values

Examples:

Array.map(x => x * 2, [> 1, 2, 3]) == [> 2, 4, 6]

Array.mapi

Added in 0.1.0 No other changes yet.
mapi : (fn: ((a, Number) => b), array: Array<a>) => Array<b>

Produces a new array initialized with the results of a mapper function called on each element of the input array and its index.

Parameters:

fn: The mapper function to call on each element, where the value returned will be used to initialize the element in the new array
array: The array to iterate

Returns:

Array<b>: The new array with mapped values

Examples:

Array.mapi((x, i) => (x * 2, i), [> 1, 2, 3]) == [> (2, 0), (4, 1), (6, 2)]

Array.reduce

Added in 0.3.0 No other changes yet.
reduce : (fn: ((a, b) => a), initial: a, array: Array<b>) => a

Combines all elements of an array using a reducer function, starting from the “head”, or left side, of the array.

In Array.reduce(fn, initial, array), fn is called with an accumulator and each element of the array, and returns a new accumulator. The final value is the last accumulator returned. The accumulator starts with value initial.

Parameters:

fn: The reducer function to call on each element, where the value returned will be the next accumulator value
initial: The initial value to use for the accumulator on the first iteration
array: The array to iterate

Returns:

a: The final accumulator returned from fn

Examples:

Array.reduce((acc, el) => acc + el, 0, [> 1, 2, 3]) == 6
Array.reduce((acc, el) => acc ++ el, "", [> "baz", "bar", "foo"]) == "bazbarfoo"

Array.reduceRight

Added in 0.5.3 No other changes yet.
reduceRight : (fn: ((a, b) => b), initial: b, array: Array<a>) => b

Combines all elements of an array using a reducer function, starting from the “end”, or right side, of the array.

In Array.reduceRight(fn, initial, array), fn is called with each element of the array and an accumulator, and returns a new accumulator. The final value is the last accumulator returned. The accumulator starts with value initial.

Parameters:

fn: The reducer function to call on each element, where the value returned will be the next accumulator value
initial: The initial value to use for the accumulator on the first iteration
array: The array to iterate

Returns:

b: The final accumulator returned from fn

Examples:

Array.reduceRight((el, acc) => acc ++ el, "", [> "baz", "bar", "foo"]) == "foobarbaz"

Array.reducei

Added in 0.3.0 No other changes yet.
reducei : (fn: ((a, b, Number) => a), initial: a, array: Array<b>) => a

Combines all elements of an array using a reducer function, starting from the “head”, or left side, of the array.

In Array.reducei(fn, initial, array), fn is called with an accumulator, each element of the array, and the index of that element, and returns a new accumulator. The final value is the last accumulator returned. The accumulator starts with value initial.

Parameters:

fn: The reducer function to call on each element, where the value returned will be the next accumulator value
initial: The initial value to use for the accumulator on the first iteration
array: The array to iterate

Returns:

a: The final accumulator returned from fn

Examples:

Array.reducei((acc, el, index) => acc + el + index, 0, [> 1, 2, 3]) == 9
let output = Array.reducei((acc, el, index) => {
  acc ++ el ++ toString(index)
}, "", [> "baz", "bar", "foo"])
assert output == "baz0bar1foo2"

Array.flatMap

Added in 0.3.0 No other changes yet.
flatMap : (fn: (b => Array<a>), array: Array<b>) => Array<a>

Produces a new array by calling a function on each element of the input array. Each iteration produces an intermediate array, which are all appended to produce a “flattened” array of all results.

Parameters:

fn: The function to be called on each element, where the value returned will be an array that gets appended to the new array
array: The array to iterate

Returns:

Array<a>: The new array

Throws:

InvalidArgument(String)

  • When the combined length of all arrays is not an integer

Examples:

Array.flatMap(e => [> 1, e], [> 1, 2, 3]) == [> 1, 1, 1, 2, 1, 3]

Array.every

Added in 0.3.0 No other changes yet.
every : (fn: (a => Bool), array: Array<a>) => Bool

Checks that the given condition is satisfied for all elements in the input array.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to check

Returns:

Bool: true if all elements satisfy the condition or false otherwise

Examples:

Array.every(e => e % 2 == 0, [> 2, 4, 6]) == true
Array.every(e => e % 2 == 0, [> 2, 4, 7]) == false

Array.some

Added in 0.3.0 No other changes yet.
some : (fn: (a => Bool), array: Array<a>) => Bool

Checks that the given condition is satisfied at least once by an element in the input array.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to iterate

Returns:

Bool: true if one or more elements satisfy the condition or false otherwise

Examples:

Array.some(e => e % 2 == 0, [> 2, 4, 6]) == true
Array.some(e => e % 2 == 0, [> 2, 4, 7]) == true
Array.some(e => e % 2 == 0, [> 3, 5, 7]) == false

Array.fill

Added in 0.2.0 No other changes yet.
fill : (value: a, array: Array<a>) => Void

Replaces all elements in an array with the new value provided.

Parameters:

value: The value replacing each element
array: The array to update

Examples:

let arr = [> 2, 4, 6]
Array.fill(0, arr)
assert arr == [> 0, 0, 0]

Array.fillRange

Added in 0.2.0 No other changes yet.
fillRange : (value: a, start: Number, stop: Number, array: Array<a>) => Void

Replaces all elements in the provided index range in the array with the new value provided. Fails if the index is out-of-bounds.

Parameters:

value: The value replacing each element between the indexes
start: The index to begin replacement
stop: The (exclusive) index to end replacement
array: The array to update

Throws:

IndexOutOfBounds

  • When the start index is out of bounds
  • When the start index is greater then the stop index

Examples:

let arr = [> 2, 4, 6, 8]
Array.fillRange(0, 1, 3, arr)
assert arr == [> 2, 0, 0, 8]

Array.reverse

Added in 0.4.0 No other changes yet.
reverse : (array: Array<a>) => Array<a>

Creates a new array with all elements in reverse order.

Parameters:

array: The array to reverse

Returns:

Array<a>: The new array

Examples:

Array.reverse([> 1, 2, 3]) == [> 3, 2, 1]

Array.toList

Added in 0.1.0 No other changes yet.
toList : (array: Array<a>) => List<a>

Converts the input array to a list.

Parameters:

array: The array to convert

Returns:

List<a>: The list containing all elements from the array

Examples:

Array.toList([> 1, 2, 3]) == [1, 2, 3]

Array.fromList

Added in 0.1.0 No other changes yet.
fromList : (list: List<a>) => Array<a>

Converts the input list to an array.

Parameters:

list: The list to convert

Returns:

Array<a>: The array containing all elements from the list

Examples:

Array.fromList([1, 2, 3]) == [> 1, 2, 3]

Array.contains

Added in 0.2.0 No other changes yet.
contains : (search: a, array: Array<a>) => Bool

Checks if the value is an element of the input array. Uses the generic == structural equality operator.

Parameters:

search: The value to compare
array: The array to inspect

Returns:

Bool: true if the value exists in the array or false otherwise

Examples:

Array.contains(1, [> 1, 2, 3]) == true
Array.contains(0, [> 1, 2, 3]) == false

Array.find

Added in 0.2.0 No other changes yet.
find : (fn: (a => Bool), array: Array<a>) => Option<a>

Finds the first element in an array that satisfies the given condition.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to search

Returns:

Option<a>: Some(element) containing the first value found or None otherwise

Examples:

Array.find(e => e % 2 == 0, [> 1, 4, 3]) == Some(4)
Array.find(e => e % 2 == 0, [> 1, 2, 3, 4]) == Some(2)
Array.find(e => e % 2 == 0, [> 1, 3, 5]) == None

Array.findIndex

Added in 0.2.0 No other changes yet.
findIndex : (fn: (a => Bool), array: Array<a>) => Option<Number>

Finds the first index in an array where the element satisfies the given condition.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to search

Returns:

Option<Number>: Some(index) containing the index of the first element found or None otherwise

Examples:

Array.findIndex(e => e % 2 == 0, [> 1, 4, 3]) == Some(1)
Array.findIndex(e => e % 2 == 0, [> 1, 2, 3, 4]) == Some(1)
Array.findIndex(e => e % 2 == 0, [> 1, 3, 5]) == None

Array.product

Added in 0.2.0 No other changes yet.
product : (array1: Array<a>, array2: Array<b>) => Array<(a, b)>

Combines two arrays into a Cartesian product of tuples containing all ordered pairs (a, b).

Parameters:

array1: The array to provide values for the first tuple element
array2: The array to provide values for the second tuple element

Returns:

Array<(a, b)>: The new array containing all pairs of (a, b)

Throws:

InvalidArgument(String)

  • When the multiplied array lengths are not an integer

Examples:

Array.product([> 1, 2], [> 3, 4]) == [> (1, 3), (1, 4), (2, 3), (2, 4)]

Array.count

Added in 0.2.0 No other changes yet.
count : (fn: (a => Bool), array: Array<a>) => Number

Counts the number of elements in an array that satisfy the given condition.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to iterate

Returns:

Number: The total number of elements that satisfy the condition

Examples:

Array.count(e => e % 2 == 0, [> 1, 2, 3, 4]) == 2

Array.counti

Added in 0.3.0 No other changes yet.
counti : (fn: ((a, Number) => Bool), array: Array<a>) => Number

Counts the number of elements in an array that satisfy the given condition. Also passes the index to the function.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to iterate

Returns:

Number: The total number of elements that satisfy the condition

Examples:

Array.counti((e, i) => e % 2 == 0 && i % 2 == 0, [> 1, 2, 3, 4, 5]) == 0
Array.counti((e, i) => e % 2 == 0 && i % 2 == 0, [> 0, 1, 2, 3, 5]) == 2

Array.filter

Added in 0.3.0 No other changes yet.
filter : (fn: (a => Bool), array: Array<a>) => Array<a>

Produces a new array by calling a function on each element of the input array and only including it in the result array if the element satisfies the condition.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to iterate

Returns:

Array<a>: The new array containing elements where fn returned true

Examples:

Array.filter(e => e % 2 == 0, [> 1, 2, 3, 4]) == [> 2, 4]

Array.filteri

Added in 0.3.0 No other changes yet.
filteri : (fn: ((a, Number) => Bool), array: Array<a>) => Array<a>

Produces a new array by calling a function on each element of the input array and only including it in the result array if the element satisfies the condition. Also passes the index to the function.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to iterate

Returns:

Array<a>: The new array containing elements where fn returned true

Examples:

Array.filteri((e, i) => e % 2 == 0, [> 1, 2, 3, 4]) == [> 2, 4]
Array.filteri((e, i) => e % 2 == 1 && i % 2 == 0, [> 1, 2, 3, 4, 5]) == [> 1, 3, 5]

Array.unique

Added in 0.3.0 No other changes yet.
unique : (array: Array<a>) => Array<a>

Produces a new array with any duplicates removed. Uses the generic == structural equality operator.

Parameters:

array: The array to filter

Returns:

Array<a>: The new array with only unique values

Examples:

Array.unique([> 1, 2, 1, 2, 3, 1]) == [> 1, 2, 3]

Array.zip

Added in 0.4.0
versionchanges
0.6.0Support zipping arrays of different sizes
zip : (array1: Array<a>, array2: Array<b>) => Array<(a, b)>

Produces a new array filled with tuples of elements from both given arrays. The first tuple will contain the first item of each array, the second tuple will contain the second item of each array, and so on.

Parameters:

array1: The array to provide values for the first tuple element
array2: The array to provide values for the second tuple element

Returns:

Array<(a, b)>: The new array containing indexed pairs of (a, b)

Throws:

IndexOutOfBounds

  • When the arrays have different sizes

Examples:

Array.zip([> 1, 2, 3], [> 4, 5, 6]) == [> (1, 4), (2, 5), (3, 6)]

Array.zipWith

Added in 0.5.3 No other changes yet.
zipWith : (fn: ((a, b) => c), array1: Array<a>, array2: Array<b>) => Array<c>

Produces a new array filled with elements defined by applying a function on pairs from both given arrays. The first element will contain the result of applying the function to the first elements of each array, the second element will contain the result of applying the function to the second elements of each array, and so on.

Calling this function with arrays of different sizes will cause the returned array to have the length of the smaller array.

Parameters:

fn: The function to apply to pairs of elements
array1: The array whose elements will each be passed to the function as the first argument
array2: The array whose elements will each be passed to the function as the second argument

Returns:

Array<c>: The new array containing elements derived from applying the function to pairs of input array elements

Throws:

IndexOutOfBounds

  • When the arrays have different sizes

Examples:

Array.zipWith((a, b) => a + b, [> 1, 2, 3], [> 4, 5, 6]) == [> 5, 7, 9]
Array.zipWith((a, b) => a * b, [> 1, 2, 3], [> 4, 5]) == [> 4, 10]

Array.unzip

Added in 0.4.0 No other changes yet.
unzip : (array: Array<(a, b)>) => (Array<a>, Array<b>)

Produces two arrays by splitting apart an array of tuples.

Parameters:

array: The array of tuples to split

Returns:

(Array<a>, Array<b>): An array containing all elements from the first tuple element, and an array containing all elements from the second tuple element

Examples:

Array.unzip([> (1, 4), (2, 5), (3, 6)]) == ([> 1, 2, 3], [> 4, 5, 6])

Array.join

Added in 0.4.0 No other changes yet.
join : (separator: String, items: Array<String>) => String

Concatenates an array of strings into a single string, separated by a separator string.

Parameters:

separator: The separator to insert between items in the string
items: The input strings

Returns:

String: The concatenated string

Examples:

Array.join(", ", [> "a", "b", "c"]) == "a, b, c"

Array.slice

Added in 0.4.0
versionchanges
0.6.0Default `end` to the Array length
slice : (start: Number, ?end: Number, array: Array<a>) => Array<a>

Slices an array given zero-based start and end indexes. The value at the end index will not be included in the result.

If either index is a negative number, it will be treated as a reverse index from the end of the array. e.g. slice(1, -1, [> 'a', 'b', 'c']) == [> 'b'].

Parameters:

start: The index of the array where the slice will begin (inclusive)
?end: The index of the array where the slice will end (exclusive)
array: The array to be sliced

Returns:

Array<a>: The subset of the array that was sliced

Examples:

Array.slice(1, end=3, [> 1, 2, 3, 4]) == [> 2, 3]
Array.slice(1, [> 1, 2, 3, 4]) == [> 2, 3, 4]

Array.sort

Added in 0.4.5
versionchanges
0.6.0Made `compare` a default argument
sort : (?compare: ((num1: a, num2: a) => Number), array: Array<a>) => Void

Sorts an array in-place.

Ordering is calculated using a comparator function which takes two array elements and must return 0 if both are equal, a positive number if the first is greater, and a negative number if the first is smaller.

Parameters:

?compare: The comparator function used to indicate sort order
array: The array to be sorted

Examples:

let arr = [> 3, 2, 4, 1]
Array.sort(compare=(a, b) => a - b, arr)
assert arr == [> 1, 2, 3, 4]

Array.rotate

Added in 0.4.5
versionchanges
0.6.0Behavior changed from right-rotation to left-rotation
rotate : (n: Number, arr: Array<a>) => Void

Rotates array elements in place by the specified amount to the left, such that the nth element becomes the first in the array.

If value is negative, array elements will be rotated by the specified amount to the right. See examples.

Parameters:

n: The number of elements to rotate by
arr: The array to be rotated

Examples:

let array = [> 1, 2, 3, 4, 5]
Array.rotate(2, array)
assert array == [> 3, 4, 5, 1, 2]
let array = [> 1, 2, 3, 4, 5]
Array.rotate(-1, array)
assert array == [> 5, 1, 2, 3, 4]

Array.chunk

Added in 0.6.0 No other changes yet.
chunk : (chunkSize: Number, arr: Array<a>) => Array<Array<a>>

Splits the given array into chunks of the provided size. If the array cannot be split evenly, the final chunk will contain the remaining elements.

Parameters:

chunkSize: The maximum size of each chunk
arr: The array to chunk

Returns:

Array<Array<a>>: An array of chunks

Throws:

InvalidArgument(String)

  • When chunkSize is not an integer
  • When chunkSize is less than one

Examples:

Array.chunk(2, [> 1, 2, 3, 4, 5]) == [> [> 1, 2], [> 3, 4], [> 5]]
Array.chunk(2, [> 1, 2, 3, 4]) == [> [> 1, 2], [> 3, 4]]

Array.Immutable

An immutable array implementation.

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
use Array.{ module Immutable }
Array.Immutable.empty
Immutable.fromList([1, 2, 3, 4, 5])

Types

Type declarations included in the Array.Immutable module.

Array.Immutable.ImmutableArray

type ImmutableArray<a>

Values

Functions and constants included in the Array.Immutable module.

Array.Immutable.empty

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
empty : ImmutableArray<a>

An empty array.

Examples:

Array.Immutable.empty == Array.Immutable.fromList([])

Array.Immutable.isEmpty

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
isEmpty : (array: ImmutableArray<a>) => Bool

Determines if the array contains no elements.

Parameters:

array: The array to check

Returns:

Bool: true if the array is empty and false otherwise

Examples:

use Array.{ module Immutable }
assert Immutable.isEmpty(Immutable.fromList([1, 2, 3])) == false
use Array.{ module Immutable }
assert Immutable.isEmpty(Immutable.fromList([])) == true

Array.Immutable.length

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
length : (array: ImmutableArray<a>) => Number

Provides the length of the input array.

Parameters:

array: The array to inspect

Returns:

Number: The number of elements in the array

Examples:

use Array.{ module Immutable }
assert Immutable.length(Immutable.fromList([1, 2, 3, 4, 5])) == 5

Array.Immutable.get

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
get : (index: Number, array: ImmutableArray<a>) => a

Retrieves the element from the array at the specified index. A negative index is treated as an offset from the end of the array.

Parameters:

index: The index to access
array: The array to access

Returns:

a: The element from the array

Throws:

IndexOutOfBounds

  • When the index being accessed is outside the array’s bounds

Examples:

use Array.{ module Immutable }
assert Immutable.get(1, Immutable.fromList([1, 2, 3, 4])) == 2
use Array.{ module Immutable }
assert Immutable.get(-1, Immutable.fromList([1, 2, 3, 4])) == 4

Array.Immutable.set

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
set :
  (index: Number, value: a, array: ImmutableArray<a>) => ImmutableArray<a>

Creates a new array in which the element at the specified index is set to a new value. A negative index is treated as an offset from the end of the array.

Parameters:

index: The index to update
value: The value to store
array: The array to update

Returns:

ImmutableArray<a>: A new array containing the new element at the given index

Throws:

IndexOutOfBounds

  • When the index being updated is outside the array’s bounds

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 2, 3, 4, 5])
let array = Immutable.set(1, 9, arr)
assert arr == Immutable.fromList([1, 2, 3, 4, 5])
assert array == Immutable.fromList([1, 9, 3, 4, 5])

Array.Immutable.append

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
append :
  (array1: ImmutableArray<a>, array2: ImmutableArray<a>) => ImmutableArray<a>

Creates a new array with the elements of the first array followed by the elements of the second array.

Parameters:

array1: The array containing elements to appear first
array2: The array containing elements to appear second

Returns:

ImmutableArray<a>: The new array containing elements from array1 followed by elements from array2

Examples:

use Array.{ module Immutable }
let arr1 = Immutable.fromList([1, 2])
let arr2 = Immutable.fromList([3, 4, 5])
assert Immutable.append(arr1, arr2) == Immutable.fromList([1, 2, 3, 4, 5])
assert arr1 == Immutable.fromList([1, 2])
assert arr2 == Immutable.fromList([3, 4, 5])

Array.Immutable.concat

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
concat : (arrays: List<ImmutableArray<a>>) => ImmutableArray<a>

Creates a single array containing the elements of all arrays in the provided list.

Parameters:

arrays: A list containing all arrays to combine

Returns:

ImmutableArray<a>: The new array

Examples:

use Array.{ module Immutable }
let arr1 = Immutable.fromList([1, 2])
let arr2 = Immutable.fromList([3, 4])
let arr3 = Immutable.fromList([5, 6])
assert Immutable.concat([arr1, arr2, arr3]) == Immutable.fromList([1, 2, 3, 4, 5, 6])

Array.Immutable.init

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
init : (length: Number, fn: (Number => a)) => ImmutableArray<a>

Creates a new array of the specified length where each element is initialized with the result of an initializer function. The initializer is called with the index of each array element.

Parameters:

length: The length of the new array
fn: The initializer function to call with each index, where the value returned will be used to initialize the element

Returns:

ImmutableArray<a>: The new array

Examples:

use Array.{ module Immutable }
assert Immutable.init(5, i => i) == Immutable.fromList([0, 1, 2, 3, 4])
use Array.{ module Immutable }
assert Immutable.init(5, i => i + 3) == Immutable.fromList([3, 4, 5, 6, 7])

Array.Immutable.make

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
make : (length: Number, value: a) => ImmutableArray<a>

Creates a new array of the specified length with each element being initialized with the given value.

Parameters:

length: The length of the new array
value: The value to store at each index

Returns:

ImmutableArray<a>: The new array

Examples:

use Array.{ module Immutable }
assert Immutable.make(5, "🌾") == Immutable.fromList(["🌾", "🌾", "🌾", "🌾", "🌾"])

Array.Immutable.forEach

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
forEach : (fn: (a => Void), array: ImmutableArray<a>) => Void

Iterates an array, calling an iterator function on each element.

Parameters:

fn: The iterator function to call with each element
array: The array to iterate

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(["foo", "bar", "baz"])
let mut str = ""
Immutable.forEach(e => str = str ++ e, arr)
assert str == "foobarbaz"

Array.Immutable.cycle

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
cycle : (fn: (a => Void), n: Number, array: ImmutableArray<a>) => Void

Iterates an array a given number of times, calling an iterator function on each element.

Parameters:

fn: The iterator function to call with each element
n: The number of times to iterate the given array
array: The array to iterate

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(["a", "b", "c"])
let mut str = ""
Immutable.cycle(e => str = str ++ e, 2, arr)
assert str == "abcabc"

Array.Immutable.map

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
map : (fn: (a => b), array: ImmutableArray<a>) => ImmutableArray<b>

Produces a new array initialized with the results of a mapper function called on each element of the input array.

Parameters:

fn: The mapper function to call on each element, where the value returned will be used to initialize the element in the new array
array: The array to iterate

Returns:

ImmutableArray<b>: The new array with mapped values

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(["foo", "bar", "baz"])
let arr = Immutable.map(e => e ++ "_", arr)
assert arr == Immutable.fromList(["foo_", "bar_", "baz_"])

Array.Immutable.reduce

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
reduce : (fn: ((a, b) => a), initial: a, array: ImmutableArray<b>) => a

Combines all elements of an array using a reducer function, starting from the “head”, or left side, of the array.

In ImmutableArray.reduce(fn, initial, array), fn is called with an accumulator and each element of the array, and returns a new accumulator. The final value is the last accumulator returned. The accumulator starts with value initial.

Parameters:

fn: The reducer function to call on each element, where the value returned will be the next accumulator value
initial: The initial value to use for the accumulator on the first iteration
array: The array to iterate

Returns:

a: The final accumulator returned from fn

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 2, 3])
assert Immutable.reduce((acc, x) => acc + x, 0, arr) == 6

Array.Immutable.reduceRight

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
reduceRight : (fn: ((a, b) => b), initial: b, array: ImmutableArray<a>) => b

Combines all elements of an array using a reducer function, starting from the “end”, or right side, of the array.

In ImmutableArray.reduceRight(fn, initial, array), fn is called with each element of the array and an accumulator, and returns a new accumulator. The final value is the last accumulator returned. The accumulator starts with value initial.

Parameters:

fn: The reducer function to call on each element, where the value returned will be the next accumulator value
initial: The initial value to use for the accumulator on the first iteration
array: The array to iterate

Returns:

b: The final accumulator returned from fn

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(["baz", "bar", "foo"])
assert Immutable.reduceRight((x, acc) => acc ++ x, "", arr) == "foobarbaz"

Array.Immutable.flatMap

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
flatMap :
  (fn: (a => ImmutableArray<b>), array: ImmutableArray<a>) =>
   ImmutableArray<b>

Produces a new array by calling a function on each element of the input array. Each iteration produces an intermediate array, which are all appended to produce a “flattened” array of all results.

Parameters:

fn: The function to be called on each element, where the value returned will be an array that gets appended to the new array
array: The array to iterate

Returns:

ImmutableArray<b>: The new array

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 3, 5])
let arr = Immutable.flatMap(n => Immutable.fromList([n, n + 1]), arr)
assert arr == Immutable.fromList([1, 2, 3, 4, 5, 6])

Array.Immutable.fromList

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
fromList : (list: List<a>) => ImmutableArray<a>

Converts the input list to an array.

Parameters:

list: The list to convert

Returns:

ImmutableArray<a>: The array containing all elements from the list

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 2, 3])
assert Immutable.get(1, arr) == 2

Array.Immutable.toList

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
toList : (array: ImmutableArray<a>) => List<a>

Converts the input array to a list.

Parameters:

array: The array to convert

Returns:

List<a>: The list containing all elements from the array

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'b', 'c'])
let arr = Immutable.set(0, 'd', arr)
assert Immutable.toList(arr) == ['d', 'b', 'c']

Array.Immutable.filter

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
filter : (fn: (a => Bool), array: ImmutableArray<a>) => ImmutableArray<a>

Produces a new array by calling a function on each element of the input array and only including it in the result array if the element satisfies the condition.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to iterate

Returns:

ImmutableArray<a>: The new array containing elements where fn returned true

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'a', 'b', 'c'])
let arr = Immutable.filter(e => e == 'a', arr)
assert Immutable.toList(arr) == ['a', 'a']

Array.Immutable.every

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
every : (fn: (a => Bool), array: ImmutableArray<a>) => Bool

Checks that the given condition is satisfied for all elements in the input array.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to check

Returns:

Bool: true if all elements satify the condition or false otherwise

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'a'])
assert Immutable.every(e => e == 'a', arr) == true
use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'a', 'b', 'c'])
assert Immutable.every(e => e == 'a', arr) == false

Array.Immutable.some

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
some : (fn: (a => Bool), array: ImmutableArray<a>) => Bool

Checks that the given condition is satisfied at least once by an element in the input array.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to iterate

Returns:

Bool: true if one or more elements satisfy the condition or false otherwise

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'a', 'b', 'c'])
assert Immutable.every(e => e == 'a', arr) == false
use Array.{ module Immutable }
let arr = Immutable.fromList(['b', 'c'])
assert Immutable.some(e => e == 'a', arr) == false

Array.Immutable.reverse

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
reverse : (array: ImmutableArray<a>) => ImmutableArray<a>

Creates a new array with all elements in reverse order.

Parameters:

array: The array to reverse

Returns:

ImmutableArray<a>: The new array

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'b', 'c'])
let arr = Immutable.reverse(arr)
assert Immutable.toList(arr) == ['c', 'b', 'a']

Array.Immutable.contains

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
contains : (search: a, array: ImmutableArray<a>) => Bool

Checks if the value is an element of the input array. Uses the generic == structural equality operator.

Parameters:

search: The value to compare
array: The array to inspect

Returns:

Bool: true if the value exists in the array or false otherwise

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'b', 'c'])
assert Immutable.contains('a', arr) == true
use Array.{ module Immutable }
let arr = Immutable.fromList(['b', 'c'])
assert Immutable.contains('a', arr) == false

Array.Immutable.find

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
find : (fn: (a => Bool), array: ImmutableArray<a>) => Option<a>

Finds the first element in an array that satisfies the given condition.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to search

Returns:

Option<a>: Some(element) containing the first value found or None otherwise

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 2, 3])
assert Immutable.find(e => e == 2, arr) == Some(2)
use Array.{ module Immutable }
let arr = Immutable.fromList([1, 3])
assert Immutable.find(e => e == 2, arr) == None

Array.Immutable.findIndex

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
findIndex : (fn: (a => Bool), array: ImmutableArray<a>) => Option<Number>

Finds the first index in an array where the element satisfies the given condition.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to search

Returns:

Option<Number>: Some(index) containing the index of the first element found or None otherwise

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 2, 3])
assert Immutable.findIndex(e => e == 2, arr) == Some(1)
use Array.{ module Immutable }
let arr = Immutable.fromList([1, 3])
assert Immutable.findIndex(e => e == 2, arr) == None

Array.Immutable.product

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
product :
  (array1: ImmutableArray<a>, array2: ImmutableArray<b>) =>
   ImmutableArray<(a, b)>

Combines two arrays into a Cartesian product of tuples containing all ordered pairs (a, b).

Parameters:

array1: The array to provide values for the first tuple element
array2: The array to provide values for the second tuple element

Returns:

ImmutableArray<(a, b)>: The new array containing all pairs of (a, b)

Examples:

use Array.{ module Immutable }
let arr1 = Immutable.fromList([1, 2])
let arr2 = Immutable.fromList([3, 4])
assert Immutable.product(arr1, arr2) == Immutable.fromList([(1, 3), (1, 4), (2, 3), (2, 4)])

Array.Immutable.count

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
count : (fn: (a => Bool), array: ImmutableArray<a>) => Number

Counts the number of elements in an array that satisfy the given condition.

Parameters:

fn: The function to call on each element, where the returned value indicates if the element satisfies the condition
array: The array to iterate

Returns:

Number: The total number of elements that satisfy the condition

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 1, 2, 3, 4])
assert Immutable.count(e => e == 1, arr) == 2

Array.Immutable.unique

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
unique : (array: ImmutableArray<a>) => ImmutableArray<a>

Produces a new array with any duplicates removed. Uses the generic == structural equality operator.

Parameters:

array: The array to filter

Returns:

ImmutableArray<a>: The new array with only unique values

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 1, 2, 3, 2, 4])
assert Immutable.unique(arr) == Immutable.fromList([1, 2, 3, 4])

Array.Immutable.zip

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
zip :
  (array1: ImmutableArray<a>, array2: ImmutableArray<b>) =>
   ImmutableArray<(a, b)>

Produces a new array filled with tuples of elements from both given arrays. The first tuple will contain the first item of each array, the second tuple will contain the second item of each array, and so on.

Calling this function with arrays of different sizes will cause the returned array to have the length of the smaller array.

Parameters:

array1: The array to provide values for the first tuple element
array2: The array to provide values for the second tuple element

Returns:

ImmutableArray<(a, b)>: The new array containing indexed pairs of (a, b)

Examples:

use Array.{ module Immutable }
let arr1 = Immutable.fromList([1, 2, 3])
let arr2 = Immutable.fromList([4, 5, 6])
assert Immutable.zip(arr1, arr2) == Immutable.fromList([(1, 4), (2, 5), (3, 6)])

Array.Immutable.zipWith

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
zipWith :
  (fn: ((a, b) => c), array1: ImmutableArray<a>, array2: ImmutableArray<b>) =>
   ImmutableArray<c>

Produces a new array filled with elements defined by applying a function on pairs from both given arrays. The first element will contain the result of applying the function to the first elements of each array, the second element will contain the result of applying the function to the second elements of each array, and so on.

Calling this function with arrays of different sizes will cause the returned array to have the length of the smaller array.

Parameters:

fn: The function to apply to pairs of elements
array1: The array whose elements will each be passed to the function as the first argument
array2: The array whose elements will each be passed to the function as the second argument

Returns:

ImmutableArray<c>: The new array containing elements derived from applying the function to pairs of input array elements

Examples:

use Array.{ module Immutable }
let arr1 = Immutable.fromList([1, 2, 3])
let arr2 = Immutable.fromList([4, 5, 6])
assert Immutable.zipWith((a, b) => a + b, arr1, arr2) == Immutable.fromList([5, 7, 9])
use Array.{ module Immutable }
let arr1 = Immutable.fromList([1, 2, 3])
let arr2 = Immutable.fromList([4, 5, 6])
assert Immutable.zipWith((a, b) => a * b, arr1, arr2) == Immutable.fromList([4, 10, 18])

Array.Immutable.unzip

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
unzip :
  (array: ImmutableArray<(a, b)>) => (ImmutableArray<a>, ImmutableArray<b>)

Produces two arrays by splitting apart an array of tuples.

Parameters:

array: The array of tuples to split

Returns:

(ImmutableArray<a>, ImmutableArray<b>): An array containing all elements from the first tuple element and an array containing all elements from the second tuple element

Examples:

use Array.{ module Immutable }
let arr1 = Immutable.fromList([(1, 2), (3, 4), (5, 6)])
let arr2 = Immutable.fromList([1, 3, 5])
let arr3 = Immutable.fromList([2, 4, 6])
assert Immutable.unzip(arr1) == (arr2, arr3)

Array.Immutable.join

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
join : (separator: String, array: ImmutableArray<String>) => String

Concatenates an array of strings into a single string, separated by a separator string.

Parameters:

separator: The separator to insert between items in the string
array: The input strings

Returns:

String: The concatenated string

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(["a", "b", "c"])
assert Immutable.join(", ", arr) == "a, b, c"

Array.Immutable.slice

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
0.6.0Default `end` to the Array length
slice :
  (start: Number, ?end: Number, array: ImmutableArray<a>) =>
   ImmutableArray<a>

Slices an array given zero-based start and end indexes. The value at the end index will not be included in the result.

If either index is a negative number, it will be treated as a reverse index from the end of the array.

Parameters:

start: The index of the array where the slice will begin (inclusive)
?end: The index of the array where the slice will end (exclusive)
array: The array to be sliced

Returns:

ImmutableArray<a>: The subset of the array that was sliced

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'b', 'c'])
assert Immutable.slice(0, end=2, arr) == Immutable.fromList(['a', 'b'])
use Array.{ module Immutable }
let arr = Immutable.fromList(['a', 'b', 'c'])
assert Immutable.slice(1, end=-1, arr) == Immutable.fromList(['b'])

Array.Immutable.sort

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module, with `compare` being a required argument
sort :
  (?compare: ((num1: a, num2: a) => Number), array: ImmutableArray<a>) =>
   ImmutableArray<a>

Sorts the given array based on a given comparator function.

Ordering is calculated using a comparator function which takes two array elements and must return 0 if both are equal, a positive number if the first is greater, and a negative number if the first is smaller.

Parameters:

?compare: The comparator function used to indicate sort order
array: The array to be sorted

Returns:

ImmutableArray<a>: The sorted array

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([2, 3, 1, 4])
assert Immutable.sort(compare=(a, b) => a - b, arr) == Immutable.fromList([1, 2, 3, 4])

Array.Immutable.rotate

Added in 0.6.0
versionchanges
0.5.4Originally in `"immutablearray"` module
rotate : (n: Number, array: ImmutableArray<a>) => ImmutableArray<a>

Rotates array elements by the specified amount to the left, such that the nth element is the first in the new array.

If value is negative, array elements will be rotated by the specified amount to the right. See examples.

Parameters:

n: The number of elements to rotate by
array: The array to be rotated

Examples:

use Array.{ module Immutable }
let arr = Immutable.fromList([1, 2, 3, 4, 5])
assert Immutable.rotate(2, arr) == Immutable.fromList([3, 4, 5, 1, 2])
use Array.{ module Immutable }
let arr = Immutable.fromList([1, 2, 3, 4, 5])
assert Immutable.rotate(-1, arr) == Immutable.fromList([5, 1, 2, 3, 4])

Sign up for farm-to-inbox developer news

You can unsubscribe at any time. Read our privacy policy.

Copyright © 2024 The Grain Programming Language