ReadonlyArray overview
Added in v2.5.0
Table of contents
- constructors
- conversions
- do notation
- error handling
- filtering
- folding
- instances
- Alt
- Alternative
- Applicative
- Apply
- Chain
- ChainRecBreadthFirst
- ChainRecDepthFirst
- Compactable
- Extend
- Filterable
- FilterableWithIndex
- Foldable
- FoldableWithIndex
- FromEither
- Functor
- FunctorWithIndex
- Monad
- Pointed
- Traversable
- TraversableWithIndex
- Unfoldable
- Witherable
- Zero
- getDifferenceMagma
- getEq
- getIntersectionSemigroup
- getMonoid
- getOrd
- getSemigroup
- getShow
- getUnionMonoid
- getUnionSemigroup
- legacy
- lifting
- mapping
- pattern matching
- refinements
- sequencing
- traversing
- type lambdas
- unsafe
- utils
- Spanned (interface)
- ap
- apFirst
- apSecond
- append
- appendW
- chop
- chunksOf
- comprehension
- concat
- concatW
- deleteAt
- difference
- dropLeft
- dropLeftWhile
- dropRight
- duplicate
- elem
- empty
- every
- exists
- extend
- filterE
- findFirst
- findFirstMap
- findIndex
- findLast
- findLastIndex
- findLastMap
- head
- init
- insertAt
- intercalate
- intersection
- intersperse
- isOutOfBound
- last
- lefts
- lookup
- modifyAt
- prepend
- prependAll
- prependW
- reverse
- rights
- rotate
- scanLeft
- scanRight
- size
- some
- sort
- sortBy
- spanLeft
- splitAt
- tail
- takeLeft
- takeLeftWhile
- takeRight
- unfold
- union
- uniq
- unzip
- updateAt
- zero
- zip
- zipWith
- zone of death
constructors
makeBy
Return a ReadonlyArray
of length n
with element i
initialized with f(i)
.
Note. n
is normalized to a non negative integer.
Signature
export declare const makeBy: <A>(n: number, f: (i: number) => A) => readonly A[]
Example
import { makeBy } from 'fp-ts/ReadonlyArray'
const double = (n: number): number => n * 2
assert.deepStrictEqual(makeBy(5, double), [0, 2, 4, 6, 8])
Added in v2.5.0
of
Signature
export declare const of: <A>(a: A) => readonly A[]
Added in v2.5.0
replicate
Create a ReadonlyArray
containing a value repeated the specified number of times.
Note. n
is normalized to a non negative integer.
Signature
export declare const replicate: <A>(n: number, a: A) => readonly A[]
Example
import { replicate } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(replicate(3, 'a'), ['a', 'a', 'a'])
Added in v2.5.0
conversions
fromArray
Signature
export declare const fromArray: <A>(as: A[]) => readonly A[]
Added in v2.5.0
fromEither
Transforms an Either
to a ReadonlyArray
.
Signature
export declare const fromEither: <A>(fa: Either<unknown, A>) => readonly A[]
Added in v2.11.0
fromOption
Signature
export declare const fromOption: <A>(fa: Option<A>) => readonly A[]
Added in v2.11.0
toArray
Signature
export declare const toArray: <A>(as: readonly A[]) => A[]
Added in v2.5.0
do notation
Do
Signature
export declare const Do: readonly {}[]
Added in v2.9.0
apS
Signature
export declare const apS: <N, A, B>(
name: Exclude<N, keyof A>,
fb: readonly B[]
) => (fa: readonly A[]) => readonly { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B }[]
Added in v2.8.0
bind
Signature
export declare const bind: <N, A, B>(
name: Exclude<N, keyof A>,
f: (a: A) => readonly B[]
) => (ma: readonly A[]) => readonly { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B }[]
Added in v2.8.0
bindTo
Signature
export declare const bindTo: <N>(name: N) => <A>(fa: readonly A[]) => readonly { readonly [K in N]: A }[]
Added in v2.8.0
guard
Signature
export declare const guard: (b: boolean) => readonly void[]
Added in v2.11.0
let
Signature
export declare const let: <N, A, B>(
name: Exclude<N, keyof A>,
f: (a: A) => B
) => (fa: readonly A[]) => readonly { readonly [K in N | keyof A]: K extends keyof A ? A[K] : B }[]
Added in v2.13.0
error handling
alt
Identifies an associative operation on a type constructor. It is similar to Semigroup
, except that it applies to types of kind * -> *
.
In case of ReadonlyArray
concatenates the inputs into a single array.
Signature
export declare const alt: <A>(that: LazyArg<readonly A[]>) => (fa: readonly A[]) => readonly A[]
Example
import * as RA from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(
pipe(
[1, 2, 3],
RA.alt(() => [4, 5])
),
[1, 2, 3, 4, 5]
)
Added in v2.5.0
altW
Less strict version of alt
.
The W
suffix (short for Widening) means that the return types will be merged.
Signature
export declare const altW: <B>(that: LazyArg<readonly B[]>) => <A>(fa: readonly A[]) => readonly (B | A)[]
Example
import * as RA from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(
pipe(
[1, 2, 3],
RA.altW(() => ['a', 'b'])
),
[1, 2, 3, 'a', 'b']
)
Added in v2.9.0
filtering
compact
Signature
export declare const compact: <A>(fa: readonly Option<A>[]) => readonly A[]
Added in v2.5.0
filter
Signature
export declare const filter: {
<A, B extends A>(refinement: Refinement<A, B>): (as: readonly A[]) => readonly B[]
<A>(predicate: Predicate<A>): <B extends A>(bs: readonly B[]) => readonly B[]
<A>(predicate: Predicate<A>): (as: readonly A[]) => readonly A[]
}
Added in v2.5.0
filterMap
Signature
export declare const filterMap: <A, B>(f: (a: A) => Option<B>) => (fa: readonly A[]) => readonly B[]
Added in v2.5.0
filterMapWithIndex
Signature
export declare const filterMapWithIndex: <A, B>(f: (i: number, a: A) => Option<B>) => (fa: readonly A[]) => readonly B[]
Added in v2.5.0
filterWithIndex
Signature
export declare const filterWithIndex: {
<A, B extends A>(refinementWithIndex: RefinementWithIndex<number, A, B>): (as: readonly A[]) => readonly B[]
<A>(predicateWithIndex: PredicateWithIndex<number, A>): <B extends A>(bs: readonly B[]) => readonly B[]
<A>(predicateWithIndex: PredicateWithIndex<number, A>): (as: readonly A[]) => readonly A[]
}
Added in v2.5.0
partition
Signature
export declare const partition: {
<A, B extends A>(refinement: Refinement<A, B>): (as: readonly A[]) => Separated<readonly A[], readonly B[]>
<A>(predicate: Predicate<A>): <B extends A>(bs: readonly B[]) => Separated<readonly B[], readonly B[]>
<A>(predicate: Predicate<A>): (as: readonly A[]) => Separated<readonly A[], readonly A[]>
}
Added in v2.5.0
partitionMap
Signature
export declare const partitionMap: <A, B, C>(
f: (a: A) => Either<B, C>
) => (fa: readonly A[]) => Separated<readonly B[], readonly C[]>
Added in v2.5.0
partitionMapWithIndex
Signature
export declare const partitionMapWithIndex: <A, B, C>(
f: (i: number, a: A) => Either<B, C>
) => (fa: readonly A[]) => Separated<readonly B[], readonly C[]>
Added in v2.5.0
partitionWithIndex
Signature
export declare const partitionWithIndex: {
<A, B extends A>(refinementWithIndex: RefinementWithIndex<number, A, B>): (
as: readonly A[]
) => Separated<readonly A[], readonly B[]>
<A>(predicateWithIndex: PredicateWithIndex<number, A>): <B extends A>(
bs: readonly B[]
) => Separated<readonly B[], readonly B[]>
<A>(predicateWithIndex: PredicateWithIndex<number, A>): (as: readonly A[]) => Separated<readonly A[], readonly A[]>
}
Added in v2.5.0
separate
Signature
export declare const separate: <A, B>(fa: readonly Either<A, B>[]) => Separated<readonly A[], readonly B[]>
Added in v2.5.0
wilt
Signature
export declare const wilt: PipeableWilt1<'ReadonlyArray'>
Added in v2.6.5
wither
Signature
export declare const wither: PipeableWither1<'ReadonlyArray'>
Added in v2.6.5
folding
foldMap
Signature
export declare const foldMap: <M>(M: Monoid<M>) => <A>(f: (a: A) => M) => (fa: readonly A[]) => M
Added in v2.5.0
foldMapWithIndex
Signature
export declare const foldMapWithIndex: <M>(M: Monoid<M>) => <A>(f: (i: number, a: A) => M) => (fa: readonly A[]) => M
Added in v2.5.0
reduce
Signature
export declare const reduce: <A, B>(b: B, f: (b: B, a: A) => B) => (fa: readonly A[]) => B
Added in v2.5.0
reduceRight
Signature
export declare const reduceRight: <A, B>(b: B, f: (a: A, b: B) => B) => (fa: readonly A[]) => B
Added in v2.5.0
reduceRightWithIndex
Signature
export declare const reduceRightWithIndex: <A, B>(b: B, f: (i: number, a: A, b: B) => B) => (fa: readonly A[]) => B
Added in v2.5.0
reduceWithIndex
Signature
export declare const reduceWithIndex: <A, B>(b: B, f: (i: number, b: B, a: A) => B) => (fa: readonly A[]) => B
Added in v2.5.0
instances
Alt
Signature
export declare const Alt: Alt1<'ReadonlyArray'>
Added in v2.7.0
Alternative
Signature
export declare const Alternative: Alternative1<'ReadonlyArray'>
Added in v2.7.0
Applicative
Signature
export declare const Applicative: Applicative1<'ReadonlyArray'>
Added in v2.7.0
Apply
Signature
export declare const Apply: Apply1<'ReadonlyArray'>
Added in v2.10.0
Chain
Signature
export declare const Chain: Chain1<'ReadonlyArray'>
Added in v2.10.0
ChainRecBreadthFirst
Signature
export declare const ChainRecBreadthFirst: ChainRec1<'ReadonlyArray'>
Added in v2.11.0
ChainRecDepthFirst
Signature
export declare const ChainRecDepthFirst: ChainRec1<'ReadonlyArray'>
Added in v2.11.0
Compactable
Signature
export declare const Compactable: Compactable1<'ReadonlyArray'>
Added in v2.7.0
Extend
Signature
export declare const Extend: Extend1<'ReadonlyArray'>
Added in v2.7.0
Filterable
Signature
export declare const Filterable: Filterable1<'ReadonlyArray'>
Added in v2.7.0
FilterableWithIndex
Signature
export declare const FilterableWithIndex: FilterableWithIndex1<'ReadonlyArray', number>
Added in v2.7.0
Foldable
Signature
export declare const Foldable: Foldable1<'ReadonlyArray'>
Added in v2.7.0
FoldableWithIndex
Signature
export declare const FoldableWithIndex: FoldableWithIndex1<'ReadonlyArray', number>
Added in v2.7.0
FromEither
Signature
export declare const FromEither: FromEither1<'ReadonlyArray'>
Added in v2.11.0
Functor
Signature
export declare const Functor: Functor1<'ReadonlyArray'>
Added in v2.7.0
FunctorWithIndex
Signature
export declare const FunctorWithIndex: FunctorWithIndex1<'ReadonlyArray', number>
Added in v2.7.0
Monad
Signature
export declare const Monad: Monad1<'ReadonlyArray'>
Added in v2.7.0
Pointed
Signature
export declare const Pointed: Pointed1<'ReadonlyArray'>
Added in v2.10.0
Traversable
Signature
export declare const Traversable: Traversable1<'ReadonlyArray'>
Added in v2.7.0
TraversableWithIndex
Signature
export declare const TraversableWithIndex: TraversableWithIndex1<'ReadonlyArray', number>
Added in v2.7.0
Unfoldable
Signature
export declare const Unfoldable: Unfoldable1<'ReadonlyArray'>
Added in v2.7.0
Witherable
Signature
export declare const Witherable: Witherable1<'ReadonlyArray'>
Added in v2.7.0
Zero
Signature
export declare const Zero: Zero1<'ReadonlyArray'>
Added in v2.11.0
getDifferenceMagma
Signature
export declare const getDifferenceMagma: <A>(E: Eq<A>) => Magma<readonly A[]>
Added in v2.11.0
getEq
Derives an Eq
over the ReadonlyArray
of a given element type from the Eq
of that type. The derived Eq
defines two arrays as equal if all elements of both arrays are compared equal pairwise with the given E
. In case of arrays of different lengths, the result is non equality.
Signature
export declare const getEq: <A>(E: Eq<A>) => Eq<readonly A[]>
Example
import * as S from 'fp-ts/string'
import { getEq } from 'fp-ts/ReadonlyArray'
const E = getEq(S.Eq)
assert.strictEqual(E.equals(['a', 'b'], ['a', 'b']), true)
assert.strictEqual(E.equals(['a'], []), false)
Added in v2.5.0
getIntersectionSemigroup
Signature
export declare const getIntersectionSemigroup: <A>(E: Eq<A>) => Semigroup<readonly A[]>
Added in v2.11.0
getMonoid
Returns a Monoid
for ReadonlyArray<A>
.
Signature
export declare const getMonoid: <A = never>() => Monoid<readonly A[]>
Example
import { getMonoid } from 'fp-ts/ReadonlyArray'
const M = getMonoid<number>()
assert.deepStrictEqual(M.concat([1, 2], [3, 4]), [1, 2, 3, 4])
Added in v2.5.0
getOrd
Derives an Ord
over the ReadonlyArray
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 declare const getOrd: <A>(O: Ord<A>) => Ord<readonly A[]>
Example
import { getOrd } from 'fp-ts/ReadonlyArray'
import * as S from 'fp-ts/string'
const O = getOrd(S.Ord)
assert.strictEqual(O.compare(['b'], ['a']), 1)
assert.strictEqual(O.compare(['a'], ['a']), 0)
assert.strictEqual(O.compare(['a'], ['b']), -1)
Added in v2.5.0
getSemigroup
Signature
export declare const getSemigroup: <A = never>() => Semigroup<readonly A[]>
Added in v2.5.0
getShow
Signature
export declare const getShow: <A>(S: Show<A>) => Show<readonly A[]>
Added in v2.5.0
getUnionMonoid
Signature
export declare const getUnionMonoid: <A>(E: Eq<A>) => Monoid<readonly A[]>
Added in v2.11.0
getUnionSemigroup
Signature
export declare const getUnionSemigroup: <A>(E: Eq<A>) => Semigroup<readonly A[]>
Added in v2.11.0
legacy
chain
Alias of flatMap
.
Signature
export declare const chain: <A, B>(f: (a: A) => readonly B[]) => (ma: readonly A[]) => readonly B[]
Added in v2.5.0
lifting
fromEitherK
Signature
export declare const fromEitherK: <E, A extends readonly unknown[], B>(
f: (...a: A) => Either<E, B>
) => (...a: A) => readonly B[]
Added in v2.11.0
fromOptionK
Signature
export declare const fromOptionK: <A extends readonly unknown[], B>(
f: (...a: A) => Option<B>
) => (...a: A) => readonly B[]
Added in v2.11.0
fromPredicate
Signature
export declare function fromPredicate<A, B extends A>(refinement: Refinement<A, B>): (a: A) => ReadonlyArray<B>
export declare function fromPredicate<A>(predicate: Predicate<A>): <B extends A>(b: B) => ReadonlyArray<B>
export declare function fromPredicate<A>(predicate: Predicate<A>): (a: A) => ReadonlyArray<A>
Added in v2.11.0
mapping
flap
Signature
export declare const flap: <A>(a: A) => <B>(fab: readonly ((a: A) => B)[]) => readonly B[]
Added in v2.10.0
map
map
can be used to turn functions (a: A) => B
into functions (fa: F<A>) => F<B>
whose argument and return types use the type constructor F
to represent some computational context.
Signature
export declare const map: <A, B>(f: (a: A) => B) => (fa: readonly A[]) => readonly B[]
Added in v2.5.0
mapWithIndex
Signature
export declare const mapWithIndex: <A, B>(f: (i: number, a: A) => B) => (fa: readonly A[]) => readonly B[]
Added in v2.5.0
pattern matching
foldLeft
Alias of matchLeft
.
Signature
export declare const foldLeft: <A, B>(
onEmpty: LazyArg<B>,
onNonEmpty: (head: A, tail: readonly A[]) => B
) => (as: readonly A[]) => B
Added in v2.5.0
foldRight
Alias of matchRight
.
Signature
export declare const foldRight: <A, B>(
onEmpty: LazyArg<B>,
onNonEmpty: (init: readonly A[], last: A) => B
) => (as: readonly A[]) => B
Added in v2.5.0
match
Signature
export declare const match: <B, A>(
onEmpty: LazyArg<B>,
onNonEmpty: (as: RNEA.ReadonlyNonEmptyArray<A>) => B
) => (as: readonly A[]) => B
Added in v2.11.0
matchLeft
Break a ReadonlyArray
into its first element and remaining elements.
Signature
export declare const matchLeft: <B, A>(
onEmpty: LazyArg<B>,
onNonEmpty: (head: A, tail: readonly A[]) => B
) => (as: readonly A[]) => B
Example
import { matchLeft } from 'fp-ts/ReadonlyArray'
const len: <A>(as: ReadonlyArray<A>) => number = matchLeft(
() => 0,
(_, tail) => 1 + len(tail)
)
assert.strictEqual(len([1, 2, 3]), 3)
Added in v2.10.0
matchLeftW
Less strict version of matchLeft
.
Signature
export declare const matchLeftW: <B, A, C>(
onEmpty: LazyArg<B>,
onNonEmpty: (head: A, tail: readonly A[]) => C
) => (as: readonly A[]) => B | C
Added in v2.11.0
matchRight
Break a ReadonlyArray
into its initial elements and the last element.
Signature
export declare const matchRight: <B, A>(
onEmpty: LazyArg<B>,
onNonEmpty: (init: readonly A[], last: A) => B
) => (as: readonly A[]) => B
Added in v2.10.0
matchRightW
Less strict version of matchRight
.
Signature
export declare const matchRightW: <B, A, C>(
onEmpty: LazyArg<B>,
onNonEmpty: (init: readonly A[], last: A) => C
) => (as: readonly A[]) => B | C
Added in v2.11.0
matchW
Less strict version of match
.
The W
suffix (short for Widening) means that the handler return types will be merged.
Signature
export declare const matchW: <B, A, C>(
onEmpty: LazyArg<B>,
onNonEmpty: (as: RNEA.ReadonlyNonEmptyArray<A>) => C
) => (as: readonly A[]) => B | C
Added in v2.11.0
refinements
isEmpty
Test whether a ReadonlyArray
is empty.
Signature
export declare const isEmpty: <A>(as: readonly A[]) => as is readonly []
Example
import { isEmpty } from 'fp-ts/ReadonlyArray'
assert.strictEqual(isEmpty([]), true)
Added in v2.5.0
isNonEmpty
Test whether a ReadonlyArray
is non empty.
Signature
export declare const isNonEmpty: <A>(as: readonly A[]) => as is RNEA.ReadonlyNonEmptyArray<A>
Added in v2.5.0
sequencing
chainFirst
Composes computations in sequence, using the return value of one computation to determine the next computation and keeping only the result of the first.
Signature
export declare const chainFirst: <A, B>(f: (a: A) => readonly B[]) => (first: readonly A[]) => readonly A[]
Example
import * as RA from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(
pipe(
[1, 2, 3],
RA.chainFirst(() => ['a', 'b'])
),
[1, 1, 2, 2, 3, 3]
)
assert.deepStrictEqual(
pipe(
[1, 2, 3],
RA.chainFirst(() => [])
),
[]
)
Added in v2.5.0
chainRecBreadthFirst
Signature
export declare const chainRecBreadthFirst: <A, B>(f: (a: A) => readonly Either<A, B>[]) => (a: A) => readonly B[]
Added in v2.11.0
chainRecDepthFirst
Signature
export declare const chainRecDepthFirst: <A, B>(f: (a: A) => readonly Either<A, B>[]) => (a: A) => readonly B[]
Added in v2.11.0
chainWithIndex
Signature
export declare const chainWithIndex: <A, B>(f: (i: number, a: A) => readonly B[]) => (as: readonly A[]) => readonly B[]
Added in v2.7.0
flatMap
Composes computations in sequence, using the return value of one computation to determine the next computation.
Signature
export declare const flatMap: {
<A, B>(f: (a: A, i: number) => readonly B[]): (ma: readonly A[]) => readonly B[]
<A, B>(ma: readonly A[], f: (a: A, i: number) => readonly B[]): readonly B[]
}
Example
import * as RA from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(
pipe(
[1, 2, 3],
RA.flatMap((n) => [`a${n}`, `b${n}`])
),
['a1', 'b1', 'a2', 'b2', 'a3', 'b3']
)
assert.deepStrictEqual(
pipe(
[1, 2, 3],
RA.flatMap(() => [])
),
[]
)
Added in v2.14.0
flatten
Signature
export declare const flatten: <A>(mma: readonly (readonly A[])[]) => readonly A[]
Added in v2.5.0
traverseWithIndex
Signature
export declare const traverseWithIndex: PipeableTraverseWithIndex1<'ReadonlyArray', number>
Added in v2.6.3
traversing
sequence
Signature
export declare const sequence: Sequence1<'ReadonlyArray'>
Added in v2.6.3
traverse
Signature
export declare const traverse: PipeableTraverse1<'ReadonlyArray'>
Added in v2.6.3
type lambdas
URI
Signature
export declare const URI: 'ReadonlyArray'
Added in v2.5.0
URI (type alias)
Signature
export type URI = typeof URI
Added in v2.5.0
unsafe
unsafeDeleteAt
Signature
export declare const unsafeDeleteAt: <A>(i: number, as: readonly A[]) => readonly A[]
Added in v2.5.0
unsafeInsertAt
Signature
export declare const unsafeInsertAt: <A>(i: number, a: A, as: readonly A[]) => RNEA.ReadonlyNonEmptyArray<A>
Added in v2.5.0
unsafeUpdateAt
Signature
export declare const unsafeUpdateAt: <A>(i: number, a: A, as: readonly A[]) => readonly A[]
Added in v2.5.0
utils
Spanned (interface)
Signature
export interface Spanned<I, R> {
readonly init: ReadonlyArray<I>
readonly rest: ReadonlyArray<R>
}
Added in v2.5.0
ap
Signature
export declare const ap: <A>(fa: readonly A[]) => <B>(fab: readonly ((a: A) => B)[]) => readonly B[]
Added in v2.5.0
apFirst
Combine two effectful actions, keeping only the result of the first.
Signature
export declare const apFirst: <B>(second: readonly B[]) => <A>(first: readonly A[]) => readonly A[]
Added in v2.5.0
apSecond
Combine two effectful actions, keeping only the result of the second.
Signature
export declare const apSecond: <B>(second: readonly B[]) => <A>(first: readonly A[]) => readonly B[]
Added in v2.5.0
append
Append an element to the end of a ReadonlyArray
, creating a new ReadonlyNonEmptyArray
.
Signature
export declare const append: <A>(end: A) => (init: readonly A[]) => RNEA.ReadonlyNonEmptyArray<A>
Example
import { append } from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(pipe([1, 2, 3], append(4)), [1, 2, 3, 4])
Added in v2.10.0
appendW
Less strict version of append
.
Signature
export declare const appendW: <B>(end: B) => <A>(init: readonly A[]) => RNEA.ReadonlyNonEmptyArray<B | A>
Added in v2.11.0
chop
A useful recursion pattern for processing a ReadonlyArray
to produce a new ReadonlyArray
, often used for “chopping” up the input ReadonlyArray
. Typically chop
is called with some function that will consume an initial prefix of the ReadonlyArray
and produce a value and the tail of the ReadonlyArray
.
Signature
export declare const chop: <A, B>(
f: (as: RNEA.ReadonlyNonEmptyArray<A>) => readonly [B, readonly A[]]
) => (as: readonly A[]) => readonly B[]
Example
import { Eq } from 'fp-ts/Eq'
import * as RA from 'fp-ts/ReadonlyArray'
import * as N from 'fp-ts/number'
import { pipe } from 'fp-ts/function'
const group = <A>(S: Eq<A>): ((as: ReadonlyArray<A>) => ReadonlyArray<ReadonlyArray<A>>) => {
return RA.chop((as) => {
const { init, rest } = pipe(
as,
RA.spanLeft((a: A) => S.equals(a, as[0]))
)
return [init, rest]
})
}
assert.deepStrictEqual(group(N.Eq)([1, 1, 2, 3, 3, 4]), [[1, 1], [2], [3, 3], [4]])
Added in v2.5.0
chunksOf
Splits a ReadonlyArray
into length-n
pieces. The last piece will be shorter if n
does not evenly divide the length of the ReadonlyArray
. Note that chunksOf(n)([])
is []
, not [[]]
. This is intentional, and is consistent with a recursive definition of chunksOf
; it satisfies the property that:
chunksOf(n)(xs).concat(chunksOf(n)(ys)) == chunksOf(n)(xs.concat(ys)))
whenever n
evenly divides the length of as
.
Signature
export declare const chunksOf: (n: number) => <A>(as: readonly A[]) => readonly RNEA.ReadonlyNonEmptyArray<A>[]
Example
import { chunksOf } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(chunksOf(2)([1, 2, 3, 4, 5]), [[1, 2], [3, 4], [5]])
Added in v2.5.0
comprehension
ReadonlyArray
comprehension.
[ f(x, y, ...) | x ← xs, y ← ys, ..., g(x, y, ...) ]
Signature
export declare function comprehension<A, B, C, D, R>(
input: readonly [ReadonlyArray<A>, ReadonlyArray<B>, ReadonlyArray<C>, ReadonlyArray<D>],
f: (a: A, b: B, c: C, d: D) => R,
g?: (a: A, b: B, c: C, d: D) => boolean
): ReadonlyArray<R>
export declare function comprehension<A, B, C, R>(
input: readonly [ReadonlyArray<A>, ReadonlyArray<B>, ReadonlyArray<C>],
f: (a: A, b: B, c: C) => R,
g?: (a: A, b: B, c: C) => boolean
): ReadonlyArray<R>
export declare function comprehension<A, B, R>(
input: readonly [ReadonlyArray<A>, ReadonlyArray<B>],
f: (a: A, b: B) => R,
g?: (a: A, b: B) => boolean
): ReadonlyArray<R>
export declare function comprehension<A, R>(
input: readonly [ReadonlyArray<A>],
f: (a: A) => R,
g?: (a: A) => boolean
): ReadonlyArray<R>
Example
import { comprehension } from 'fp-ts/ReadonlyArray'
import { tuple } from 'fp-ts/function'
assert.deepStrictEqual(
comprehension(
[
[1, 2, 3],
['a', 'b'],
],
tuple,
(a, b) => (a + b.length) % 2 === 0
),
[
[1, 'a'],
[1, 'b'],
[3, 'a'],
[3, 'b'],
]
)
Added in v2.5.0
concat
Signature
export declare const concat: <A>(second: readonly A[]) => (first: readonly A[]) => readonly A[]
Added in v2.11.0
concatW
Signature
export declare const concatW: <B>(second: readonly B[]) => <A>(first: readonly A[]) => readonly (B | A)[]
Added in v2.11.0
deleteAt
Delete the element at the specified index, creating a new array, or returning None
if the index is out of bounds
Signature
export declare const deleteAt: (i: number) => <A>(as: readonly A[]) => Option<readonly A[]>
Example
import { deleteAt } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
assert.deepStrictEqual(deleteAt(0)([1, 2, 3]), some([2, 3]))
assert.deepStrictEqual(deleteAt(1)([]), none)
Added in v2.5.0
difference
Creates an array of array values not included in the other given array using a Eq
for equality comparisons. The order and references of result values are determined by the first array.
Signature
export declare function difference<A>(E: Eq<A>): {
(xs: ReadonlyArray<A>): (ys: ReadonlyArray<A>) => ReadonlyArray<A>
(xs: ReadonlyArray<A>, ys: ReadonlyArray<A>): ReadonlyArray<A>
}
Example
import { difference } from 'fp-ts/ReadonlyArray'
import * as N from 'fp-ts/number'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(pipe([1, 2], difference(N.Eq)([2, 3])), [1])
Added in v2.5.0
dropLeft
Drop a max number of elements from the start of an ReadonlyArray
, creating a new ReadonlyArray
.
Note. n
is normalized to a non negative integer.
Signature
export declare const dropLeft: (n: number) => <A>(as: readonly A[]) => readonly A[]
Example
import * as RA from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
const input: ReadonlyArray<number> = [1, 2, 3]
assert.deepStrictEqual(pipe(input, RA.dropLeft(2)), [3])
assert.strictEqual(pipe(input, RA.dropLeft(0)), input)
assert.strictEqual(pipe(input, RA.dropLeft(-1)), input)
Added in v2.5.0
dropLeftWhile
Remove the longest initial subarray for which all element satisfy the specified predicate, creating a new array
Signature
export declare function dropLeftWhile<A, B extends A>(
refinement: Refinement<A, B>
): (as: ReadonlyArray<A>) => ReadonlyArray<B>
export declare function dropLeftWhile<A>(
predicate: Predicate<A>
): <B extends A>(bs: ReadonlyArray<B>) => ReadonlyArray<B>
export declare function dropLeftWhile<A>(predicate: Predicate<A>): (as: ReadonlyArray<A>) => ReadonlyArray<A>
Example
import { dropLeftWhile } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(dropLeftWhile((n: number) => n % 2 === 1)([1, 3, 2, 4, 5]), [2, 4, 5])
Added in v2.5.0
dropRight
Drop a max number of elements from the end of an ReadonlyArray
, creating a new ReadonlyArray
.
Note. n
is normalized to a non negative integer.
Signature
export declare const dropRight: (n: number) => <A>(as: readonly A[]) => readonly A[]
Example
import * as RA from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
const input: ReadonlyArray<number> = [1, 2, 3]
assert.deepStrictEqual(pipe(input, RA.dropRight(2)), [1])
assert.strictEqual(pipe(input, RA.dropRight(0)), input)
assert.strictEqual(pipe(input, RA.dropRight(-1)), input)
Added in v2.5.0
duplicate
Signature
export declare const duplicate: <A>(wa: readonly A[]) => readonly (readonly A[])[]
Added in v2.5.0
elem
Test if a value is a member of an array. Takes a Eq<A>
as a single argument which returns the function to use to search for a value of type A
in an array of type ReadonlyArray<A>
.
Signature
export declare function elem<A>(E: Eq<A>): {
(a: A): (as: ReadonlyArray<A>) => boolean
(a: A, as: ReadonlyArray<A>): boolean
}
Example
import { elem } from 'fp-ts/ReadonlyArray'
import * as N from 'fp-ts/number'
import { pipe } from 'fp-ts/function'
assert.strictEqual(pipe([1, 2, 3], elem(N.Eq)(2)), true)
assert.strictEqual(pipe([1, 2, 3], elem(N.Eq)(0)), false)
Added in v2.5.0
empty
An empty array
Signature
export declare const empty: readonly never[]
Added in v2.5.0
every
Check if a predicate holds true for every array member.
Signature
export declare function every<A, B extends A>(
refinement: Refinement<A, B>
): Refinement<ReadonlyArray<A>, ReadonlyArray<B>>
export declare function every<A>(predicate: Predicate<A>): Predicate<ReadonlyArray<A>>
Example
import { every } from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
const isPositive = (n: number): boolean => n > 0
assert.deepStrictEqual(pipe([1, 2, 3], every(isPositive)), true)
assert.deepStrictEqual(pipe([1, 2, -3], every(isPositive)), false)
Added in v2.9.0
exists
Alias of some
Signature
export declare const exists: <A>(predicate: Predicate<A>) => (as: readonly A[]) => as is RNEA.ReadonlyNonEmptyArray<A>
Added in v2.11.0
extend
Signature
export declare const extend: <A, B>(f: (fa: readonly A[]) => B) => (wa: readonly A[]) => readonly B[]
Added in v2.5.0
filterE
Filter values inside a context.
Signature
export declare const filterE: FilterE1<'ReadonlyArray'>
Example
import { pipe } from 'fp-ts/function'
import * as RA from 'fp-ts/ReadonlyArray'
import * as T from 'fp-ts/Task'
const filterE = RA.filterE(T.ApplicativePar)
async function test() {
assert.deepStrictEqual(
await pipe(
[-1, 2, 3],
filterE((n) => T.of(n > 0))
)(),
[2, 3]
)
}
test()
Added in v2.11.0
findFirst
Find the first element which satisfies a predicate (or a refinement) function
Signature
export declare function findFirst<A, B extends A>(refinement: Refinement<A, B>): (as: ReadonlyArray<A>) => Option<B>
export declare function findFirst<A>(predicate: Predicate<A>): <B extends A>(bs: ReadonlyArray<B>) => Option<B>
export declare function findFirst<A>(predicate: Predicate<A>): (as: ReadonlyArray<A>) => Option<A>
Example
import { findFirst } from 'fp-ts/ReadonlyArray'
import { some } from 'fp-ts/Option'
type X = {
readonly a: number
readonly b: number
}
assert.deepStrictEqual(
findFirst((x: X) => x.a === 1)([
{ a: 1, b: 1 },
{ a: 1, b: 2 },
]),
some({ a: 1, b: 1 })
)
Added in v2.5.0
findFirstMap
Find the first element returned by an option based selector function
Signature
export declare const findFirstMap: <A, B>(f: (a: A) => Option<B>) => (as: readonly A[]) => Option<B>
Example
import { findFirstMap } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
interface Person {
readonly name: string
readonly age?: number
}
const persons: ReadonlyArray<Person> = [{ name: 'John' }, { name: 'Mary', age: 45 }, { name: 'Joey', age: 28 }]
// returns the name of the first person that has an age
assert.deepStrictEqual(findFirstMap((p: Person) => (p.age === undefined ? none : some(p.name)))(persons), some('Mary'))
Added in v2.5.0
findIndex
Find the first index for which a predicate holds
Signature
export declare const findIndex: <A>(predicate: Predicate<A>) => (as: readonly A[]) => Option<number>
Example
import { findIndex } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
assert.deepStrictEqual(findIndex((n: number) => n === 2)([1, 2, 3]), some(1))
assert.deepStrictEqual(findIndex((n: number) => n === 2)([]), none)
Added in v2.5.0
findLast
Find the last element which satisfies a predicate function
Signature
export declare function findLast<A, B extends A>(refinement: Refinement<A, B>): (as: ReadonlyArray<A>) => Option<B>
export declare function findLast<A>(predicate: Predicate<A>): <B extends A>(bs: ReadonlyArray<B>) => Option<B>
export declare function findLast<A>(predicate: Predicate<A>): (as: ReadonlyArray<A>) => Option<A>
Example
import { findLast } from 'fp-ts/ReadonlyArray'
import { some } from 'fp-ts/Option'
type X = {
readonly a: number
readonly b: number
}
assert.deepStrictEqual(
findLast((x: X) => x.a === 1)([
{ a: 1, b: 1 },
{ a: 1, b: 2 },
]),
some({ a: 1, b: 2 })
)
Added in v2.5.0
findLastIndex
Returns the index of the last element of the list which matches the predicate
Signature
export declare const findLastIndex: <A>(predicate: Predicate<A>) => (as: readonly A[]) => Option<number>
Example
import { findLastIndex } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
interface X {
readonly a: number
readonly b: number
}
const xs: ReadonlyArray<X> = [
{ a: 1, b: 0 },
{ a: 1, b: 1 },
]
assert.deepStrictEqual(findLastIndex((x: { readonly a: number }) => x.a === 1)(xs), some(1))
assert.deepStrictEqual(findLastIndex((x: { readonly a: number }) => x.a === 4)(xs), none)
Added in v2.5.0
findLastMap
Find the last element returned by an option based selector function
Signature
export declare const findLastMap: <A, B>(f: (a: A) => Option<B>) => (as: readonly A[]) => Option<B>
Example
import { findLastMap } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
interface Person {
readonly name: string
readonly age?: number
}
const persons: ReadonlyArray<Person> = [{ name: 'John' }, { name: 'Mary', age: 45 }, { name: 'Joey', age: 28 }]
// returns the name of the last person that has an age
assert.deepStrictEqual(findLastMap((p: Person) => (p.age === undefined ? none : some(p.name)))(persons), some('Joey'))
Added in v2.5.0
head
Get the first element in an array, or None
if the array is empty
Signature
export declare const head: <A>(as: readonly A[]) => Option<A>
Example
import { head } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
assert.deepStrictEqual(head([1, 2, 3]), some(1))
assert.deepStrictEqual(head([]), none)
Added in v2.5.0
init
Get all but the last element of an array, creating a new array, or None
if the array is empty
Signature
export declare const init: <A>(as: readonly A[]) => Option<readonly A[]>
Example
import { init } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
assert.deepStrictEqual(init([1, 2, 3]), some([1, 2]))
assert.deepStrictEqual(init([]), none)
Added in v2.5.0
insertAt
Insert an element at the specified index, creating a new array, or returning None
if the index is out of bounds
Signature
export declare const insertAt: <A>(i: number, a: A) => (as: readonly A[]) => Option<RNEA.ReadonlyNonEmptyArray<A>>
Example
import { insertAt } from 'fp-ts/ReadonlyArray'
import { some } from 'fp-ts/Option'
assert.deepStrictEqual(insertAt(2, 5)([1, 2, 3, 4]), some([1, 2, 5, 3, 4]))
Added in v2.5.0
intercalate
Places an element in between members of a ReadonlyArray
, then folds the results using the provided Monoid
.
Signature
export declare const intercalate: <A>(M: Monoid<A>) => (middle: A) => (as: readonly A[]) => A
Example
import * as S from 'fp-ts/string'
import { intercalate } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(intercalate(S.Monoid)('-')(['a', 'b', 'c']), 'a-b-c')
Added in v2.12.0
intersection
Creates an array of unique values that are included in all given arrays using a Eq
for equality comparisons. The order and references of result values are determined by the first array.
Signature
export declare function intersection<A>(E: Eq<A>): {
(xs: ReadonlyArray<A>): (ys: ReadonlyArray<A>) => ReadonlyArray<A>
(xs: ReadonlyArray<A>, ys: ReadonlyArray<A>): ReadonlyArray<A>
}
Example
import { intersection } from 'fp-ts/ReadonlyArray'
import * as N from 'fp-ts/number'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(pipe([1, 2], intersection(N.Eq)([2, 3])), [2])
Added in v2.5.0
intersperse
Places an element in between members of an array
Signature
export declare const intersperse: <A>(middle: A) => (as: readonly A[]) => readonly A[]
Example
import { intersperse } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(intersperse(9)([1, 2, 3, 4]), [1, 9, 2, 9, 3, 9, 4])
Added in v2.9.0
isOutOfBound
Test whether an array contains a particular index
Signature
export declare const isOutOfBound: <A>(i: number, as: readonly A[]) => boolean
Added in v2.5.0
last
Get the last element in an array, or None
if the array is empty
Signature
export declare const last: <A>(as: readonly A[]) => Option<A>
Example
import { last } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
assert.deepStrictEqual(last([1, 2, 3]), some(3))
assert.deepStrictEqual(last([]), none)
Added in v2.5.0
lefts
Extracts from an array of Either
all the Left
elements. All the Left
elements are extracted in order
Signature
export declare const lefts: <E, A>(as: readonly Either<E, A>[]) => readonly E[]
Example
import { lefts } from 'fp-ts/ReadonlyArray'
import { left, right } from 'fp-ts/Either'
assert.deepStrictEqual(lefts([right(1), left('foo'), right(2)]), ['foo'])
Added in v2.5.0
lookup
This function provides a safe way to read a value at a particular index from an array
Signature
export declare function lookup(i: number): <A>(as: ReadonlyArray<A>) => Option<A>
export declare function lookup<A>(i: number, as: ReadonlyArray<A>): Option<A>
Example
import { lookup } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(pipe([1, 2, 3], lookup(1)), some(2))
assert.deepStrictEqual(pipe([1, 2, 3], lookup(3)), none)
Added in v2.5.0
modifyAt
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 declare const modifyAt: <A>(i: number, f: (a: A) => A) => (as: readonly A[]) => Option<readonly A[]>
Example
import { modifyAt } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
const double = (x: number): number => x * 2
assert.deepStrictEqual(modifyAt(1, double)([1, 2, 3]), some([1, 4, 3]))
assert.deepStrictEqual(modifyAt(1, double)([]), none)
Added in v2.5.0
prepend
Prepend an element to the front of a ReadonlyArray
, creating a new ReadonlyNonEmptyArray
.
Signature
export declare const prepend: <A>(head: A) => (tail: readonly A[]) => RNEA.ReadonlyNonEmptyArray<A>
Example
import { prepend } from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(pipe([2, 3, 4], prepend(1)), [1, 2, 3, 4])
Added in v2.10.0
prependAll
Prepend an element to every member of an array
Signature
export declare const prependAll: <A>(middle: A) => (as: readonly A[]) => readonly A[]
Example
import { prependAll } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(prependAll(9)([1, 2, 3, 4]), [9, 1, 9, 2, 9, 3, 9, 4])
Added in v2.10.0
prependW
Less strict version of prepend
.
Signature
export declare const prependW: <B>(head: B) => <A>(tail: readonly A[]) => RNEA.ReadonlyNonEmptyArray<B | A>
Added in v2.11.0
reverse
Reverse an array, creating a new array
Signature
export declare const reverse: <A>(as: readonly A[]) => readonly A[]
Example
import { reverse } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(reverse([1, 2, 3]), [3, 2, 1])
Added in v2.5.0
rights
Extracts from an array of Either
all the Right
elements. All the Right
elements are extracted in order
Signature
export declare const rights: <E, A>(as: readonly Either<E, A>[]) => readonly A[]
Example
import { rights } from 'fp-ts/ReadonlyArray'
import { right, left } from 'fp-ts/Either'
assert.deepStrictEqual(rights([right(1), left('foo'), right(2)]), [1, 2])
Added in v2.5.0
rotate
Rotate a ReadonlyArray
by n
steps.
Signature
export declare const rotate: (n: number) => <A>(as: readonly A[]) => readonly A[]
Example
import { rotate } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(rotate(2)([1, 2, 3, 4, 5]), [4, 5, 1, 2, 3])
Added in v2.5.0
scanLeft
Same as reduce
but it carries over the intermediate steps.
Signature
export declare const scanLeft: <A, B>(b: B, f: (b: B, a: A) => B) => (as: readonly A[]) => RNEA.ReadonlyNonEmptyArray<B>
Example
import { scanLeft } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(scanLeft(10, (b, a: number) => b - a)([1, 2, 3]), [10, 9, 7, 4])
Added in v2.5.0
scanRight
Fold an array from the right, keeping all intermediate results instead of only the final result
Signature
export declare const scanRight: <A, B>(
b: B,
f: (a: A, b: B) => B
) => (as: readonly A[]) => RNEA.ReadonlyNonEmptyArray<B>
Example
import { scanRight } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(scanRight(10, (a: number, b) => b - a)([1, 2, 3]), [4, 5, 7, 10])
Added in v2.5.0
size
Calculate the number of elements in a ReadonlyArray
.
Signature
export declare const size: <A>(as: readonly A[]) => number
Added in v2.10.0
some
Check if a predicate holds true for any array member.
Signature
export declare const some: <A>(predicate: Predicate<A>) => (as: readonly A[]) => as is RNEA.ReadonlyNonEmptyArray<A>
Example
import { some } from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
const isPositive = (n: number): boolean => n > 0
assert.deepStrictEqual(pipe([-1, -2, 3], some(isPositive)), true)
assert.deepStrictEqual(pipe([-1, -2, -3], some(isPositive)), false)
Added in v2.9.0
sort
Sort the elements of an array in increasing order, creating a new array
Signature
export declare const sort: <B>(O: Ord<B>) => <A extends B>(as: readonly A[]) => readonly A[]
Example
import { sort } from 'fp-ts/ReadonlyArray'
import * as N from 'fp-ts/number'
assert.deepStrictEqual(sort(N.Ord)([3, 2, 1]), [1, 2, 3])
Added in v2.5.0
sortBy
Sort the elements of an array in increasing order, where elements are compared using first ords[0]
, then ords[1]
, etc…
Signature
export declare const sortBy: <B>(ords: readonly Ord<B>[]) => <A extends B>(as: readonly A[]) => readonly A[]
Example
import { sortBy } from 'fp-ts/ReadonlyArray'
import { contramap } from 'fp-ts/Ord'
import * as S from 'fp-ts/string'
import * as N from 'fp-ts/number'
import { pipe } from 'fp-ts/function'
interface Person {
readonly name: string
readonly age: number
}
const byName = pipe(
S.Ord,
contramap((p: Person) => p.name)
)
const byAge = pipe(
N.Ord,
contramap((p: Person) => p.age)
)
const sortByNameByAge = sortBy([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 v2.5.0
spanLeft
Split an array into two parts:
- the longest initial subarray for which all elements satisfy the specified predicate
- the remaining elements
Signature
export declare function spanLeft<A, B extends A>(refinement: Refinement<A, B>): (as: ReadonlyArray<A>) => Spanned<B, A>
export declare function spanLeft<A>(predicate: Predicate<A>): <B extends A>(bs: ReadonlyArray<B>) => Spanned<B, B>
export declare function spanLeft<A>(predicate: Predicate<A>): (as: ReadonlyArray<A>) => Spanned<A, A>
Example
import { spanLeft } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(spanLeft((n: number) => n % 2 === 1)([1, 3, 2, 4, 5]), { init: [1, 3], rest: [2, 4, 5] })
Added in v2.5.0
splitAt
Splits a ReadonlyArray
into two pieces, the first piece has max n
elements.
Signature
export declare const splitAt: (n: number) => <A>(as: readonly A[]) => readonly [readonly A[], readonly A[]]
Example
import { splitAt } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(splitAt(2)([1, 2, 3, 4, 5]), [
[1, 2],
[3, 4, 5],
])
Added in v2.5.0
tail
Get all but the first element of an array, creating a new array, or None
if the array is empty
Signature
export declare const tail: <A>(as: readonly A[]) => Option<readonly A[]>
Example
import { tail } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
assert.deepStrictEqual(tail([1, 2, 3]), some([2, 3]))
assert.deepStrictEqual(tail([]), none)
Added in v2.5.0
takeLeft
Keep only a max number of elements from the start of an ReadonlyArray
, creating a new ReadonlyArray
.
Note. n
is normalized to a non negative integer.
Signature
export declare const takeLeft: (n: number) => <A>(as: readonly A[]) => readonly A[]
Example
import * as RA from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
const input: ReadonlyArray<number> = [1, 2, 3]
assert.deepStrictEqual(pipe(input, RA.takeLeft(2)), [1, 2])
// out of bounds
assert.strictEqual(pipe(input, RA.takeLeft(4)), input)
assert.strictEqual(pipe(input, RA.takeLeft(-1)), input)
Added in v2.5.0
takeLeftWhile
Calculate the longest initial subarray for which all element satisfy the specified predicate, creating a new array
Signature
export declare function takeLeftWhile<A, B extends A>(
refinement: Refinement<A, B>
): (as: ReadonlyArray<A>) => ReadonlyArray<B>
export declare function takeLeftWhile<A>(
predicate: Predicate<A>
): <B extends A>(bs: ReadonlyArray<B>) => ReadonlyArray<B>
export declare function takeLeftWhile<A>(predicate: Predicate<A>): (as: ReadonlyArray<A>) => ReadonlyArray<A>
Example
import { takeLeftWhile } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(takeLeftWhile((n: number) => n % 2 === 0)([2, 4, 3, 6]), [2, 4])
Added in v2.5.0
takeRight
Keep only a max number of elements from the end of an ReadonlyArray
, creating a new ReadonlyArray
.
Note. n
is normalized to a non negative integer.
Signature
export declare const takeRight: (n: number) => <A>(as: readonly A[]) => readonly A[]
Example
import * as RA from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
const input: ReadonlyArray<number> = [1, 2, 3]
assert.deepStrictEqual(pipe(input, RA.takeRight(2)), [2, 3])
// out of bounds
assert.strictEqual(pipe(input, RA.takeRight(4)), input)
assert.strictEqual(pipe(input, RA.takeRight(-1)), input)
Added in v2.5.0
unfold
Signature
export declare const unfold: <A, B>(b: B, f: (b: B) => Option<readonly [A, B]>) => readonly A[]
Added in v2.6.6
union
Creates an array of unique values, in order, from all given arrays using a Eq
for equality comparisons
Signature
export declare function union<A>(E: Eq<A>): {
(xs: ReadonlyArray<A>): (ys: ReadonlyArray<A>) => ReadonlyArray<A>
(xs: ReadonlyArray<A>, ys: ReadonlyArray<A>): ReadonlyArray<A>
}
Example
import { union } from 'fp-ts/ReadonlyArray'
import * as N from 'fp-ts/number'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(pipe([1, 2], union(N.Eq)([2, 3])), [1, 2, 3])
Added in v2.5.0
uniq
Remove duplicates from an array, keeping the first occurrence of an element.
Signature
export declare const uniq: <A>(E: Eq<A>) => (as: readonly A[]) => readonly A[]
Example
import { uniq } from 'fp-ts/ReadonlyArray'
import * as N from 'fp-ts/number'
assert.deepStrictEqual(uniq(N.Eq)([1, 2, 1]), [1, 2])
Added in v2.5.0
unzip
The function is reverse of zip
. Takes an array of pairs and return two corresponding arrays
Signature
export declare const unzip: <A, B>(as: readonly (readonly [A, B])[]) => readonly [readonly A[], readonly B[]]
Example
import { unzip } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(
unzip([
[1, 'a'],
[2, 'b'],
[3, 'c'],
]),
[
[1, 2, 3],
['a', 'b', 'c'],
]
)
Added in v2.5.0
updateAt
Change the element at the specified index, creating a new array, or returning None
if the index is out of bounds
Signature
export declare const updateAt: <A>(i: number, a: A) => (as: readonly A[]) => Option<readonly A[]>
Example
import { updateAt } from 'fp-ts/ReadonlyArray'
import { some, none } from 'fp-ts/Option'
assert.deepStrictEqual(updateAt(1, 1)([1, 2, 3]), some([1, 1, 3]))
assert.deepStrictEqual(updateAt(1, 1)([]), none)
Added in v2.5.0
zero
Signature
export declare const zero: <A>() => readonly A[]
Added in v2.7.0
zip
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 declare function zip<B>(bs: ReadonlyArray<B>): <A>(as: ReadonlyArray<A>) => ReadonlyArray<readonly [A, B]>
export declare function zip<A, B>(as: ReadonlyArray<A>, bs: ReadonlyArray<B>): ReadonlyArray<readonly [A, B]>
Example
import { zip } from 'fp-ts/ReadonlyArray'
import { pipe } from 'fp-ts/function'
assert.deepStrictEqual(pipe([1, 2, 3], zip(['a', 'b', 'c', 'd'])), [
[1, 'a'],
[2, 'b'],
[3, 'c'],
])
Added in v2.5.0
zipWith
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 declare const zipWith: <A, B, C>(fa: readonly A[], fb: readonly B[], f: (a: A, b: B) => C) => readonly C[]
Example
import { zipWith } from 'fp-ts/ReadonlyArray'
assert.deepStrictEqual(
zipWith([1, 2, 3], ['a', 'b', 'c', 'd'], (n, s) => s + n),
['a1', 'b2', 'c3']
)
Added in v2.5.0
zone of death
cons
Use prepend
instead.
Signature
export declare const cons: typeof RNEA.cons
Added in v2.5.0
prependToAll
Use prependAll
instead.
Signature
export declare const prependToAll: <A>(middle: A) => (as: readonly A[]) => readonly A[]
Added in v2.9.0
range
Use ReadonlyNonEmptyArray
module instead.
Signature
export declare const range: (start: number, end: number) => RNEA.ReadonlyNonEmptyArray<number>
Added in v2.5.0
readonlyArray
This instance is deprecated, use small, specific instances instead. For example if a function needs a Functor
instance, pass RA.Functor
instead of RA.readonlyArray
(where RA
is from import RA from 'fp-ts/ReadonlyArray'
)
Signature
export declare const readonlyArray: FunctorWithIndex1<'ReadonlyArray', number> &
Monad1<'ReadonlyArray'> &
Unfoldable1<'ReadonlyArray'> &
Alternative1<'ReadonlyArray'> &
Extend1<'ReadonlyArray'> &
FilterableWithIndex1<'ReadonlyArray', number> &
FoldableWithIndex1<'ReadonlyArray', number> &
TraversableWithIndex1<'ReadonlyArray', number> &
Witherable1<'ReadonlyArray'>
Added in v2.5.0
snoc
Use append
instead.
Signature
export declare const snoc: <A>(init: readonly A[], end: A) => RNEA.ReadonlyNonEmptyArray<A>
Added in v2.5.0