Overview
Adapted from https://github.com/purescript/purescript-arrays
Table of contents
- URI (type alias)
- URI (constant)
- array (constant)
- empty (constant)
- catOptions (function)
- chop (function)
- chunksOf (function)
- comprehension (function)
- cons (function)
- copy (function)
- deleteAt (function)
- difference (function)
- drop (function)
- dropEnd (function)
- dropWhile (function)
- elem (function)
- filter (function)
- findFirst (function)
- findIndex (function)
- findLast (function)
- findLastIndex (function)
- flatten (function)
- fold (function)
- foldL (function)
- foldr (function)
- foldrL (function)
- getMonoid (function)
- getOrd (function)
- getSetoid (function)
- head (function)
index(function)- init (function)
- insertAt (function)
- intersection (function)
- isEmpty (function)
- isOutOfBound (function)
- last (function)
- lefts (function)
- lookup (function)
- makeBy (function)
- mapOption (function)
member(function)- modifyAt (function)
- partition (function)
- partitionMap (function)
- range (function)
refine(function)- replicate (function)
- reverse (function)
- rights (function)
- rotate (function)
- scanLeft (function)
- scanRight (function)
- snoc (function)
- sort (function)
- sortBy (function)
- sortBy1 (function)
- span (function)
- split (function)
- tail (function)
- take (function)
- takeEnd (function)
- takeWhile (function)
traverse(function)- union (function)
- uniq (function)
- unsafeDeleteAt (function)
- unsafeInsertAt (function)
- unsafeUpdateAt (function)
- unzip (function)
- updateAt (function)
- zip (function)
- zipWith (function)
URI (type alias)
Signature
export type URI = typeof URI
URI (constant)
Signature
export const URI = ...
array (constant)
Signature
export const array: Monad1<URI> &
Foldable2v1<URI> &
Unfoldable1<URI> &
TraversableWithIndex1<URI, number> &
Alternative1<URI> &
Plus1<URI> &
Extend1<URI> &
Compactable1<URI> &
FilterableWithIndex1<URI, number> &
Witherable1<URI> &
FunctorWithIndex1<URI, number> &
FoldableWithIndex1<URI, number> = ...
Added in v1.0.0
empty (constant)
An empty array
Signature
export const empty: Array<never> = ...
Added in v1.9.0
catOptions (function)
Filter an array of optional values, keeping only the elements which contain a value, creating a new array.
Alias of Compactable
’s compact
Signature
export const catOptions = <A>(as: Array<Option<A>>): Array<A> => ...
Example
import { catOptions } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(catOptions([some(1), none, some(3)]), [1, 3])
Added in v1.0.0
chop (function)
A useful recursion pattern for processing an array to produce a new array, often used for “chopping” up the input array. Typically chop is called with some function that will consume an initial prefix of the array and produce a value and the rest of the array.
Signature
export const chop = <A, B>(as: Array<A>, f: (as: Array<A>) => [B, Array<A>]): Array<B> => ...
Example
import { Setoid, setoidNumber } from 'fp-ts/lib/Setoid'
import { chop, span } from 'fp-ts/lib/Array'
const group = <A>(S: Setoid<A>) => (as: Array<A>): Array<Array<A>> => {
return chop(as, as => {
const { init, rest } = span(as, a => S.equals(a, as[0]))
return [init, rest]
})
}
assert.deepStrictEqual(group(setoidNumber)([1, 1, 2, 3, 3, 4]), [[1, 1], [2], [3, 3], [4]])
Added in v1.10.0
chunksOf (function)
Splits an array into length-n
pieces. The last piece will be shorter if n
does not evenly divide the length of
the array. Note that chunksOf([], n)
is []
, not [[]]
. This is intentional, and is consistent with a recursive
definition of chunksOf
; it satisfies the property that
chunksOf(xs, n).concat(chunksOf(ys, n)) == chunksOf(xs.concat(ys)), n)
whenever n
evenly divides the length of xs
.
Signature
export const chunksOf = <A>(as: Array<A>, n: number): Array<Array<A>> => ...
Example
import { chunksOf } from 'fp-ts/lib/Array'
assert.deepStrictEqual(chunksOf([1, 2, 3, 4, 5], 2), [[1, 2], [3, 4], [5]])
Added in v1.10.0
comprehension (function)
Array comprehension
[ g(x, y, ...) | x ← xs, y ← ys, ..., f(x, y, ...) ]
Signature
export function comprehension<A, B, C, D, R>(
input: [Array<A>, Array<B>, Array<C>, Array<D>],
f: (a: A, b: B, c: C, d: D) => boolean,
g: (a: A, b: B, c: C, d: D) => R
): Array<R>
export function comprehension<A, B, C, R>(
input: [Array<A>, Array<B>, Array<C>],
f: (a: A, b: B, c: C) => boolean,
g: (a: A, b: B, c: C) => R
): Array<R>
export function comprehension<A, R>(input: [Array<A>], f: (a: A) => boolean, g: (a: A) => R): Array<R>
export function comprehension<A, B, R>(
input: [Array<A>, Array<B>],
f: (a: A, b: B) => boolean,
g: (a: A, b: B) => R
): Array<R>
export function comprehension<A, R>(input: [Array<A>], f: (a: A) => boolean, g: (a: A) => R): Array<R> { ... }
Example
import { comprehension } from 'fp-ts/lib/Array'
import { tuple } from 'fp-ts/lib/function'
assert.deepStrictEqual(comprehension([[1, 2, 3], ['a', 'b']], (a, b) => (a + b.length) % 2 === 0, tuple), [
[1, 'a'],
[1, 'b'],
[3, 'a'],
[3, 'b']
])
Added in v1.10.0
cons (function)
Attaches an element to the front of an array, creating a new array
Signature
export const cons = <A>(a: A, as: Array<A>): Array<A> => ...
Example
import { cons } from 'fp-ts/lib/Array'
assert.deepStrictEqual(cons(0, [1, 2, 3]), [0, 1, 2, 3])
Added in v1.0.0
copy (function)
Signature
export const copy = <A>(as: Array<A>): Array<A> => ...
Added in v1.0.0
deleteAt (function)
Delete the element at the specified index, creating a new array, or returning None
if the index is out of bounds
Signature
export const deleteAt = <A>(i: number, as: Array<A>): Option<Array<A>> => ...
Example
import { deleteAt } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(deleteAt(0, [1, 2, 3]), some([2, 3]))
assert.deepStrictEqual(deleteAt(1, []), none)
Added in v1.0.0
difference (function)
Creates an array of array values not included in the other given array using a Setoid
for equality
comparisons. The order and references of result values are determined by the first array.
Signature
export const difference = <A>(S: Setoid<A>): ((xs: Array<A>, ys: Array<A>) => Array<A>) => ...
Example
import { difference } from 'fp-ts/lib/Array'
import { setoidNumber } from 'fp-ts/lib/Setoid'
assert.deepStrictEqual(difference(setoidNumber)([1, 2], [2, 3]), [1])
Added in v1.12.0
drop (function)
Drop a number of elements from the start of an array, creating a new array
Signature
export const drop = <A>(n: number, as: Array<A>): Array<A> => ...
Example
import { drop } from 'fp-ts/lib/Array'
assert.deepStrictEqual(drop(2, [1, 2, 3]), [3])
Added in v1.0.0
dropEnd (function)
Drop a number of elements from the end of an array, creating a new array
Signature
export const dropEnd = <A>(n: number, as: Array<A>): Array<A> => ...
Example
import { dropEnd } from 'fp-ts/lib/Array'
assert.deepStrictEqual(dropEnd(2, [1, 2, 3, 4, 5]), [1, 2, 3])
Added in v1.10.0
dropWhile (function)
Remove the longest initial subarray for which all element satisfy the specified predicate, creating a new array
Signature
export const dropWhile = <A>(as: Array<A>, predicate: Predicate<A>): Array<A> => ...
Example
import { dropWhile } from 'fp-ts/lib/Array'
assert.deepStrictEqual(dropWhile([1, 3, 2, 4, 5], n => n % 2 === 1), [2, 4, 5])
Added in v1.0.0
elem (function)
Test if a value is a member of an array. Takes a Setoid<A>
as a single
argument which returns the function to use to search for a value of type A
in
an array of type Array<A>
.
Signature
export const elem = <A>(S: Setoid<A>) => (a: A, as: Array<A>): boolean => ...
Example
import { elem } from 'fp-ts/lib/Array'
import { setoidNumber } from 'fp-ts/lib/Setoid'
assert.strictEqual(elem(setoidNumber)(1, [1, 2, 3]), true)
assert.strictEqual(elem(setoidNumber)(4, [1, 2, 3]), false)
Added in v1.14.0
filter (function)
Filter an array, keeping the elements which satisfy a predicate function, creating a new array
Signature
export function filter<A, B extends A>(as: Array<A>, predicate: Refinement<A, B>): Array<B>
export function filter<A>(as: Array<A>, predicate: Predicate<A>): Array<A> { ... }
Added in v1.0.0
findFirst (function)
Find the first element which satisfies a predicate (or a refinement) function
Signature
export function findFirst<A, B extends A>(as: Array<A>, predicate: Refinement<A, B>): Option<B>
export function findFirst<A>(as: Array<A>, predicate: Predicate<A>): Option<A> { ... }
Example
import { findFirst } from 'fp-ts/lib/Array'
import { some } from 'fp-ts/lib/Option'
assert.deepStrictEqual(findFirst([{ a: 1, b: 1 }, { a: 1, b: 2 }], x => x.a === 1), some({ a: 1, b: 1 }))
Added in v1.0.0
findIndex (function)
Find the first index for which a predicate holds
Signature
export const findIndex = <A>(as: Array<A>, predicate: Predicate<A>): Option<number> => ...
Example
import { findIndex } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(findIndex([1, 2, 3], x => x === 2), some(1))
assert.deepStrictEqual(findIndex([], x => x === 2), none)
Added in v1.0.0
findLast (function)
Find the last element which satisfies a predicate function
Signature
export function findLast<A, B extends A>(as: Array<A>, predicate: Refinement<A, B>): Option<B>
export function findLast<A>(as: Array<A>, predicate: Predicate<A>): Option<A> { ... }
Example
import { findLast } from 'fp-ts/lib/Array'
import { some } from 'fp-ts/lib/Option'
assert.deepStrictEqual(findLast([{ a: 1, b: 1 }, { a: 1, b: 2 }], x => x.a === 1), some({ a: 1, b: 2 }))
Added in v1.0.0
findLastIndex (function)
Returns the index of the last element of the list which matches the predicate
Signature
export const findLastIndex = <A>(as: Array<A>, predicate: Predicate<A>): Option<number> => ...
Example
import { findLastIndex } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
interface X {
a: number
b: number
}
const xs: Array<X> = [{ a: 1, b: 0 }, { a: 1, b: 1 }]
assert.deepStrictEqual(findLastIndex(xs, x => x.a === 1), some(1))
assert.deepStrictEqual(findLastIndex(xs, x => x.a === 4), none)
Added in v1.10.0
flatten (function)
Removes one level of nesting
Signature
export const flatten = <A>(ffa: Array<Array<A>>): Array<A> => ...
Example
import { flatten } from 'fp-ts/lib/Array'
assert.deepStrictEqual(flatten([[1], [2], [3]]), [1, 2, 3])
Added in v1.0.0
fold (function)
Break an array into its first element and remaining elements
Signature
export const fold = <A, B>(as: Array<A>, b: B, cons: (head: A, tail: Array<A>) => B): B => ...
Example
import { fold } from 'fp-ts/lib/Array'
const len = <A>(as: Array<A>): number => fold(as, 0, (_, tail) => 1 + len(tail))
assert.strictEqual(len([1, 2, 3]), 3)
Added in v1.0.0
foldL (function)
Lazy version of fold
Signature
export const foldL = <A, B>(as: Array<A>, nil: () => B, cons: (head: A, tail: Array<A>) => B): B => ...
Added in v1.0.0
foldr (function)
Break an array into its initial elements and the last element
Signature
export const foldr = <A, B>(as: Array<A>, b: B, cons: (init: Array<A>, last: A) => B): B => ...
Added in v1.7.0
foldrL (function)
Lazy version of foldr
Signature
export const foldrL = <A, B>(as: Array<A>, nil: () => B, cons: (init: Array<A>, last: A) => B): B => ...
Added in v1.7.0
getMonoid (function)
Signature
export const getMonoid = <A = never>(): Monoid<Array<A>> => ...
Example
import { getMonoid } from 'fp-ts/lib/Array'
const M = getMonoid<number>()
assert.deepStrictEqual(M.concat([1, 2], [3, 4]), [1, 2, 3, 4])
Added in v1.0.0
getOrd (function)
Derives an Ord
over the Array of a given element type from the Ord
of that type. The ordering between two such
arrays is equal to: the first non equal comparison of each arrays elements taken pairwise in increasing order, in
case of equality over all the pairwise elements; the longest array is considered the greatest, if both arrays have
the same length, the result is equality.
Signature
export const getOrd = <A>(O: Ord<A>): Ord<Array<A>> => ...
Example
import { getOrd } from 'fp-ts/lib/Array'
import { ordString } from 'fp-ts/lib/Ord'
const O = getOrd(ordString)
assert.strictEqual(O.compare(['b'], ['a']), 1)
assert.strictEqual(O.compare(['a'], ['a']), 0)
assert.strictEqual(O.compare(['a'], ['b']), -1)
Added in v1.2.0
getSetoid (function)
Derives a Setoid over the Array of a given element type from the Setoid of that type. The derived setoid defines two
arrays as equal if all elements of both arrays are compared equal pairwise with the given setoid S
. In case of
arrays of different lengths, the result is non equality.
Signature
export const getSetoid = <A>(S: Setoid<A>): Setoid<Array<A>> => ...
Example
import { ordString } from 'fp-ts/lib/Ord'
import { getSetoid } from 'fp-ts/lib/Array'
const O = getSetoid(ordString)
assert.strictEqual(O.equals(['a', 'b'], ['a', 'b']), true)
assert.strictEqual(O.equals(['a'], []), false)
Added in v1.0.0
head (function)
Get the first element in an array, or None
if the array is empty
Signature
export const head = <A>(as: Array<A>): Option<A> => ...
Example
import { head } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(head([1, 2, 3]), some(1))
assert.deepStrictEqual(head([]), none)
Added in v1.0.0
index (function)
Use lookup
instead
Signature
export const index = <A>(i: number, as: Array<A>): Option<A> => ...
Added in v1.0.0
init (function)
Get all but the last element of an array, creating a new array, or None
if the array is empty
Signature
export const init = <A>(as: Array<A>): Option<Array<A>> => ...
Example
import { init } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(init([1, 2, 3]), some([1, 2]))
assert.deepStrictEqual(init([]), none)
Added in v1.0.0
insertAt (function)
Insert an element at the specified index, creating a new array, or returning None
if the index is out of bounds
Signature
export const insertAt = <A>(i: number, a: A, as: Array<A>): Option<Array<A>> => ...
Example
import { insertAt } from 'fp-ts/lib/Array'
import { some } from 'fp-ts/lib/Option'
assert.deepStrictEqual(insertAt(2, 5, [1, 2, 3, 4]), some([1, 2, 5, 3, 4]))
Added in v1.0.0
intersection (function)
Creates an array of unique values that are included in all given arrays using a Setoid
for equality
comparisons. The order and references of result values are determined by the first array.
Signature
export const intersection = <A>(S: Setoid<A>): ((xs: Array<A>, ys: Array<A>) => Array<A>) => ...
Example
import { intersection } from 'fp-ts/lib/Array'
import { setoidNumber } from 'fp-ts/lib/Setoid'
assert.deepStrictEqual(intersection(setoidNumber)([1, 2], [2, 3]), [2])
Added in v1.12.0
isEmpty (function)
Test whether an array is empty
Signature
export const isEmpty = <A>(as: Array<A>): boolean => ...
Example
import { isEmpty } from 'fp-ts/lib/Array'
assert.strictEqual(isEmpty([]), true)
Added in v1.0.0
isOutOfBound (function)
Test whether an array contains a particular index
Signature
export const isOutOfBound = <A>(i: number, as: Array<A>): boolean => ...
Added in v1.0.0
last (function)
Get the last element in an array, or None
if the array is empty
Signature
export const last = <A>(as: Array<A>): Option<A> => ...
Example
import { last } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(last([1, 2, 3]), some(3))
assert.deepStrictEqual(last([]), none)
Added in v1.0.0
lefts (function)
Extracts from an array of Either
all the Left
elements. All the Left
elements are extracted in order
Signature
export const lefts = <L, A>(as: Array<Either<L, A>>): Array<L> => ...
Example
import { lefts } from 'fp-ts/lib/Array'
import { left, right } from 'fp-ts/lib/Either'
assert.deepStrictEqual(lefts([right(1), left('foo'), right(2)]), ['foo'])
Added in v1.0.0
lookup (function)
This function provides a safe way to read a value at a particular index from an array
Signature
export const lookup = <A>(i: number, as: Array<A>): Option<A> => ...
Example
import { lookup } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(lookup(1, [1, 2, 3]), some(2))
assert.deepStrictEqual(lookup(3, [1, 2, 3]), none)
Added in v1.14.0
makeBy (function)
Return a list of length n
with element i
initialized with f(i)
Signature
export const makeBy = <A>(n: number, f: (i: number) => A): Array<A> => ...
Example
import { makeBy } from 'fp-ts/lib/Array'
const double = (n: number): number => n * 2
assert.deepStrictEqual(makeBy(5, double), [0, 2, 4, 6, 8])
Added in v1.10.0
mapOption (function)
Apply a function to each element in an array, keeping only the results which contain a value, creating a new array.
Alias of Filterable
’s filterMap
Signature
export const mapOption = <A, B>(as: Array<A>, f: (a: A) => Option<B>): Array<B> => ...
Example
import { mapOption } from 'fp-ts/lib/Array'
import { Option, some, none } from 'fp-ts/lib/Option'
const f = (n: number): Option<number> => (n % 2 === 0 ? none : some(n))
assert.deepStrictEqual(mapOption([1, 2, 3], f), [1, 3])
Added in v1.0.0
member (function)
Use elem
instead
Signature
export const member = <A>(S: Setoid<A>): ((as: Array<A>, a: A) => boolean) => ...
Added in v1.3.0
modifyAt (function)
Apply a function to the element at the specified index, creating a new array, or returning None
if the index is out
of bounds
Signature
export const modifyAt = <A>(as: Array<A>, i: number, f: Endomorphism<A>): Option<Array<A>> => ...
Example
import { modifyAt } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
const double = (x: number): number => x * 2
assert.deepStrictEqual(modifyAt([1, 2, 3], 1, double), some([1, 4, 3]))
assert.deepStrictEqual(modifyAt([], 1, double), none)
Added in v1.0.0
partition (function)
Signature
export function partition<A, B extends A>(fa: Array<A>, p: Refinement<A, B>): Separated<Array<A>, Array<B>>
export function partition<A>(fa: Array<A>, p: Predicate<A>): Separated<Array<A>, Array<A>> { ... }
Added in v1.12.0
partitionMap (function)
Signature
export const partitionMap = <A, L, R>(fa: Array<A>, f: (a: A) => Either<L, R>): Separated<Array<L>, Array<R>> => ...
Example
import { array } from 'fp-ts/lib/Array'
import { left, right } from 'fp-ts/lib/Either'
import { identity } from 'fp-ts/lib/function'
assert.deepStrictEqual(array.partitionMap([right(1), left('foo'), right(2)], identity), {
left: ['foo'],
right: [1, 2]
})
Added in v1.0.0
range (function)
Create an array containing a range of integers, including both endpoints
Signature
export const range = (start: number, end: number): Array<number> => ...
Example
import { range } from 'fp-ts/lib/Array'
assert.deepStrictEqual(range(1, 5), [1, 2, 3, 4, 5])
Added in v1.10.0
refine (function)
Use filter
instead
Signature
export const refine = <A, B extends A>(as: Array<A>, refinement: Refinement<A, B>): Array<B> => ...
Added in v1.0.0
replicate (function)
Create an array containing a value repeated the specified number of times
Signature
export const replicate = <A>(n: number, a: A): Array<A> => ...
Example
import { replicate } from 'fp-ts/lib/Array'
assert.deepStrictEqual(replicate(3, 'a'), ['a', 'a', 'a'])
Added in v1.10.0
reverse (function)
Reverse an array, creating a new array
Signature
export const reverse = <A>(as: Array<A>): Array<A> => ...
Example
import { reverse } from 'fp-ts/lib/Array'
assert.deepStrictEqual(reverse([1, 2, 3]), [3, 2, 1])
Added in v1.0.0
rights (function)
Extracts from an array of Either
all the Right
elements. All the Right
elements are extracted in order
Signature
export const rights = <L, A>(as: Array<Either<L, A>>): Array<A> => ...
Example
import { rights } from 'fp-ts/lib/Array'
import { right, left } from 'fp-ts/lib/Either'
assert.deepStrictEqual(rights([right(1), left('foo'), right(2)]), [1, 2])
Added in v1.0.0
rotate (function)
Rotate an array to the right by n
steps
Signature
export const rotate = <A>(n: number, xs: Array<A>): Array<A> => ...
Example
import { rotate } from 'fp-ts/lib/Array'
assert.deepStrictEqual(rotate(2, [1, 2, 3, 4, 5]), [4, 5, 1, 2, 3])
Added in v1.0.0
scanLeft (function)
Same as reduce
but it carries over the intermediate steps
import { scanLeft } from 'fp-ts/lib/Array'
assert.deepStrictEqual(scanLeft([1, 2, 3], 10, (b, a) => b - a), [10, 9, 7, 4])
Signature
export const scanLeft = <A, B>(as: Array<A>, b: B, f: ((b: B, a: A) => B)): Array<B> => ...
Added in v1.1.0
scanRight (function)
Fold an array from the right, keeping all intermediate results instead of only the final result
Signature
export const scanRight = <A, B>(as: Array<A>, b: B, f: (a: A, b: B) => B): Array<B> => ...
Example
import { scanRight } from 'fp-ts/lib/Array'
assert.deepStrictEqual(scanRight([1, 2, 3], 10, (a, b) => b - a), [4, 5, 7, 10])
Added in v1.1.0
snoc (function)
Append an element to the end of an array, creating a new array
Signature
export const snoc = <A>(as: Array<A>, a: A): Array<A> => ...
Example
import { snoc } from 'fp-ts/lib/Array'
assert.deepStrictEqual(snoc([1, 2, 3], 4), [1, 2, 3, 4])
Added in v1.0.0
sort (function)
Sort the elements of an array in increasing order, creating a new array
Signature
export const sort = <A>(O: Ord<A>) => (as: Array<A>): Array<A> => ...
Example
import { sort } from 'fp-ts/lib/Array'
import { ordNumber } from 'fp-ts/lib/Ord'
assert.deepStrictEqual(sort(ordNumber)([3, 2, 1]), [1, 2, 3])
Added in v1.0.0
sortBy (function)
Sort the elements of an array in increasing order, where elements are compared using first ords[0]
, then ords[1]
,
etc…
Signature
export const sortBy = <A>(ords: Array<Ord<A>>): Option<Endomorphism<Array<A>>> => ...
Example
import { sortBy } from 'fp-ts/lib/Array'
import { contramap, ordString, ordNumber } from 'fp-ts/lib/Ord'
interface Person {
name: string
age: number
}
const byName = contramap((p: Person) => p.name, ordString)
const byAge = contramap((p: Person) => p.age, ordNumber)
const sortByNameByAge = sortBy([byName, byAge])
if (sortByNameByAge.isSome()) {
const persons = [{ name: 'a', age: 1 }, { name: 'b', age: 3 }, { name: 'c', age: 2 }, { name: 'b', age: 2 }]
assert.deepStrictEqual(sortByNameByAge.value(persons), [
{ name: 'a', age: 1 },
{ name: 'b', age: 2 },
{ name: 'b', age: 3 },
{ name: 'c', age: 2 }
])
}
Added in v1.3.0
sortBy1 (function)
Non failing version of sortBy
Signature
export const sortBy1 = <A>(head: Ord<A>, tail: Array<Ord<A>>): Endomorphism<Array<A>> => ...
Example
import { sortBy1 } from 'fp-ts/lib/Array'
import { contramap, ordString, ordNumber } from 'fp-ts/lib/Ord'
interface Person {
name: string
age: number
}
const byName = contramap((p: Person) => p.name, ordString)
const byAge = contramap((p: Person) => p.age, ordNumber)
const sortByNameByAge = sortBy1(byName, [byAge])
const persons = [{ name: 'a', age: 1 }, { name: 'b', age: 3 }, { name: 'c', age: 2 }, { name: 'b', age: 2 }]
assert.deepStrictEqual(sortByNameByAge(persons), [
{ name: 'a', age: 1 },
{ name: 'b', age: 2 },
{ name: 'b', age: 3 },
{ name: 'c', age: 2 }
])
Added in v1.3.0
span (function)
Split an array into two parts:
- the longest initial subarray for which all elements satisfy the specified predicate
- the remaining elements
Signature
export function span<A, B extends A>(as: Array<A>, predicate: Refinement<A, B>): { init: Array<B>; rest: Array<A> }
export function span<A>(as: Array<A>, predicate: Predicate<A>): { init: Array<A>; rest: Array<A> } { ... }
Example
import { span } from 'fp-ts/lib/Array'
assert.deepStrictEqual(span([1, 3, 2, 4, 5], n => n % 2 === 1), { init: [1, 3], rest: [2, 4, 5] })
Added in v1.0.0
split (function)
Splits an array into two pieces, the first piece has n
elements.
Signature
export const split = <A>(n: number, as: Array<A>): [Array<A>, Array<A>] => ...
Example
import { split } from 'fp-ts/lib/Array'
assert.deepStrictEqual(split(2, [1, 2, 3, 4, 5]), [[1, 2], [3, 4, 5]])
Added in v1.10.0
tail (function)
Get all but the first element of an array, creating a new array, or None
if the array is empty
Signature
export const tail = <A>(as: Array<A>): Option<Array<A>> => ...
Example
import { tail } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(tail([1, 2, 3]), some([2, 3]))
assert.deepStrictEqual(tail([]), none)
Added in v1.0.0
take (function)
Keep only a number of elements from the start of an array, creating a new array.
n
must be a natural number
Signature
export const take = <A>(n: number, as: Array<A>): Array<A> => ...
Example
import { take } from 'fp-ts/lib/Array'
assert.deepStrictEqual(take(2, [1, 2, 3]), [1, 2])
Added in v1.0.0
takeEnd (function)
Keep only a number of elements from the end of an array, creating a new array.
n
must be a natural number
Signature
export const takeEnd = <A>(n: number, as: Array<A>): Array<A> => ...
Example
import { takeEnd } from 'fp-ts/lib/Array'
assert.deepStrictEqual(takeEnd(2, [1, 2, 3, 4, 5]), [4, 5])
Added in v1.10.0
takeWhile (function)
Calculate the longest initial subarray for which all element satisfy the specified predicate, creating a new array
Signature
export function takeWhile<A, B extends A>(as: Array<A>, predicate: Refinement<A, B>): Array<B>
export function takeWhile<A>(as: Array<A>, predicate: Predicate<A>): Array<A> { ... }
Example
import { takeWhile } from 'fp-ts/lib/Array'
assert.deepStrictEqual(takeWhile([2, 4, 3, 6], n => n % 2 === 0), [2, 4])
Added in v1.0.0
traverse (function)
Use array.traverse
instead
Signature
export function traverse<F extends URIS3>(
F: Applicative3<F>
): <U, L, A, B>(ta: Array<A>, f: (a: A) => Type3<F, U, L, B>) => Type3<F, U, L, Array<B>>
export function traverse<F extends URIS3, U, L>(
F: Applicative3C<F, U, L>
): <A, B>(ta: Array<A>, f: (a: A) => Type3<F, U, L, B>) => Type3<F, U, L, Array<B>>
export function traverse<F extends URIS2>(
F: Applicative2<F>
): <L, A, B>(ta: Array<A>, f: (a: A) => Type2<F, L, B>) => Type2<F, L, Array<B>>
export function traverse<F extends URIS2, L>(
F: Applicative2C<F, L>
): <A, B>(ta: Array<A>, f: (a: A) => Type2<F, L, B>) => Type2<F, L, Array<B>>
export function traverse<F extends URIS>(
F: Applicative1<F>
): <A, B>(ta: Array<A>, f: (a: A) => Type<F, B>) => Type<F, Array<B>>
export function traverse<F>(F: Applicative<F>): <A, B>(ta: Array<A>, f: (a: A) => HKT<F, B>) => HKT<F, Array<B>> { ... }
Added in v1.0.0
union (function)
Creates an array of unique values, in order, from all given arrays using a Setoid
for equality comparisons
Signature
export const union = <A>(S: Setoid<A>): ((xs: Array<A>, ys: Array<A>) => Array<A>) => ...
Example
import { union } from 'fp-ts/lib/Array'
import { setoidNumber } from 'fp-ts/lib/Setoid'
assert.deepStrictEqual(union(setoidNumber)([1, 2], [2, 3]), [1, 2, 3])
Added in v1.12.0
uniq (function)
Remove duplicates from an array, keeping the first occurance of an element.
Signature
export const uniq = <A>(S: Setoid<A>): ((as: Array<A>) => Array<A>) => ...
Example
import { uniq } from 'fp-ts/lib/Array'
import { setoidNumber } from 'fp-ts/lib/Setoid'
assert.deepStrictEqual(uniq(setoidNumber)([1, 2, 1]), [1, 2])
Added in v1.3.0
unsafeDeleteAt (function)
Signature
export const unsafeDeleteAt = <A>(i: number, as: Array<A>): Array<A> => ...
Added in v1.0.0
unsafeInsertAt (function)
Signature
export const unsafeInsertAt = <A>(i: number, a: A, as: Array<A>): Array<A> => ...
Added in v1.0.0
unsafeUpdateAt (function)
Signature
export const unsafeUpdateAt = <A>(i: number, a: A, as: Array<A>): Array<A> => ...
Added in v1.0.0
unzip (function)
The function is reverse of zip
. Takes an array of pairs and return two corresponding arrays
Signature
export const unzip = <A, B>(as: Array<[A, B]>): [Array<A>, Array<B>] => ...
Example
import { unzip } from 'fp-ts/lib/Array'
assert.deepStrictEqual(unzip([[1, 'a'], [2, 'b'], [3, 'c']]), [[1, 2, 3], ['a', 'b', 'c']])
Added in v1.13.0
updateAt (function)
Change the element at the specified index, creating a new array, or returning None
if the index is out of bounds
Signature
export const updateAt = <A>(i: number, a: A, as: Array<A>): Option<Array<A>> => ...
Example
import { updateAt } from 'fp-ts/lib/Array'
import { some, none } from 'fp-ts/lib/Option'
assert.deepStrictEqual(updateAt(1, 1, [1, 2, 3]), some([1, 1, 3]))
assert.deepStrictEqual(updateAt(1, 1, []), none)
Added in v1.0.0
zip (function)
Takes two arrays and returns an array of corresponding pairs. If one input array is short, excess elements of the longer array are discarded
Signature
export const zip = <A, B>(fa: Array<A>, fb: Array<B>): Array<[A, B]> => ...
Example
import { zip } from 'fp-ts/lib/Array'
assert.deepStrictEqual(zip([1, 2, 3], ['a', 'b', 'c', 'd']), [[1, 'a'], [2, 'b'], [3, 'c']])
Added in v1.0.0
zipWith (function)
Apply a function to pairs of elements at the same index in two arrays, collecting the results in a new array. If one input array is short, excess elements of the longer array are discarded.
Signature
export const zipWith = <A, B, C>(fa: Array<A>, fb: Array<B>, f: (a: A, b: B) => C): Array<C> => ...
Example
import { zipWith } from 'fp-ts/lib/Array'
assert.deepStrictEqual(zipWith([1, 2, 3], ['a', 'b', 'c', 'd'], (n, s) => s + n), ['a1', 'b2', 'c3'])
Added in v1.0.0