Skip to main content

ReadonlyArray

Instances

Constructors

Conversions

Do notation

Error handling

Filtering

Folding

Legacy

Lifting

Mapping

Pattern matching

Refinements

Sequencing

Traversing

Type lambdas

Unsafe

Utilities

Instances

Alt

Signature

export declare const Alt: Alt1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Alternative

Signature

export declare const Alternative: Alternative1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Applicative

Signature

export declare const Applicative: Applicative1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Apply

Signature

export declare const Apply: Apply1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Chain

Signature

export declare const Chain: Chain1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

ChainRecBreadthFirst

Signature

export declare const ChainRecBreadthFirst: ChainRec1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

ChainRecDepthFirst

Signature

export declare const ChainRecDepthFirst: ChainRec1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Compactable

Signature

export declare const Compactable: Compactable1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Extend

Signature

export declare const Extend: Extend1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Filterable

Signature

export declare const Filterable: Filterable1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

FilterableWithIndex

Signature

export declare const FilterableWithIndex: FilterableWithIndex1<URI, number>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Foldable

Signature

export declare const Foldable: Foldable1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

FoldableWithIndex

Signature

export declare const FoldableWithIndex: FoldableWithIndex1<URI, number>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

FromEither

Signature

export declare const FromEither: FromEither1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Functor

Signature

export declare const Functor: Functor1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

FunctorWithIndex

Signature

export declare const FunctorWithIndex: FunctorWithIndex1<URI, number>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Monad

Signature

export declare const Monad: Monad1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Pointed

Signature

export declare const Pointed: Pointed1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Traversable

Signature

export declare const Traversable: Traversable1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

TraversableWithIndex

Signature

export declare const TraversableWithIndex: TraversableWithIndex1<URI, number>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Unfoldable

Signature

export declare const Unfoldable: Unfoldable1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Witherable

Signature

export declare const Witherable: Witherable1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Zero

Signature

export declare const Zero: Zero1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

getDifferenceMagma

Signature

export declare const getDifferenceMagma: <A>(E: Eq<A>) => Magma<readonly A[]>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]>

Details

  • Added in 0.1.0

Example

import * as S from '@fp-tx/core/string'
import { getEq } from '@fp-tx/core/ReadonlyArray'

const E = getEq(S.Eq)
assert.strictEqual(E.equals(['a', 'b'], ['a', 'b']), true)
assert.strictEqual(E.equals(['a'], []), false)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

getIntersectionSemigroup

Signature

export declare const getIntersectionSemigroup: <A>(E: Eq<A>) => Semigroup<readonly A[]>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

getMonoid

Returns a Monoid for ReadonlyArray<A>.

Signature

export declare const getMonoid: <A = never>() => Monoid<readonly A[]>

Details

  • Added in 0.1.0

Example

import { getMonoid } from '@fp-tx/core/ReadonlyArray'

const M = getMonoid<number>()
assert.deepStrictEqual(M.concat([1, 2], [3, 4]), [1, 2, 3, 4])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]>

Details

  • Added in 0.1.0

Example

import { getOrd } from '@fp-tx/core/ReadonlyArray'
import * as S from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

getSemigroup

Signature

export declare const getSemigroup: <A = never>() => Semigroup<readonly A[]>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

getShow

Signature

export declare const getShow: <A>(S: Show<A>) => Show<readonly A[]>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

getUnionMonoid

Signature

export declare const getUnionMonoid: <A>(E: Eq<A>) => Monoid<readonly A[]>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

getUnionSemigroup

Signature

export declare const getUnionSemigroup: <A>(E: Eq<A>) => Semigroup<readonly A[]>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { makeBy } from '@fp-tx/core/ReadonlyArray'

const double = (n: number): number => n * 2
assert.deepStrictEqual(makeBy(5, double), [0, 2, 4, 6, 8])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

of

Signature

export declare const of: <A>(a: A) => ReadonlyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { replicate } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(replicate(3, 'a'), ['a', 'a', 'a'])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Conversions

fromArray

Signature

export declare const fromArray: <A>(as: A[]) => readonly A[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

fromEither

Transforms an Either to a ReadonlyArray.

Signature

export declare const fromEither: <A>(fa: Either<unknown, A>) => ReadonlyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

fromOption

Signature

export declare const fromOption: <A>(fa: Option<A>) => ReadonlyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

toArray

Signature

export declare const toArray: <A>(as: readonly A[]) => A[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Do notation

Do

Signature

export declare const Do: ReadonlyArray<{}>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

apS

Signature

export declare const apS: <N extends string, 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 }[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

bind

Signature

export declare const bind: <N extends string, 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 }[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

bindTo

Signature

export declare const bindTo: <N extends string>(name: N) => <A>(fa: readonly A[]) => readonly { readonly [K in N]: A }[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

guard

Signature

export declare const guard: (b: boolean) => readonly void[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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<ReadonlyArray<A>>) => (fa: ReadonlyArray<A>) => ReadonlyArray<A>

Details

  • Added in 0.1.0

Example

import * as RA from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(
pipe(
[1, 2, 3],
RA.alt(() => [4, 5]),
),
[1, 2, 3, 4, 5],
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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)[]

Details

  • Added in 0.1.0

Example

import * as RA from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(
pipe(
[1, 2, 3],
RA.altW(() => ['a', 'b']),
),
[1, 2, 3, 'a', 'b'],
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Filtering

compact

Signature

export declare const compact: <A>(fa: ReadonlyArray<Option<A>>) => ReadonlyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

filter

Signature

export declare const filter: {
<A, B extends A>(refinement: Refinement<A, B>): (as: ReadonlyArray<A>) => ReadonlyArray<B>
<A>(predicate: Predicate<A>): <B extends A>(bs: ReadonlyArray<B>) => ReadonlyArray<B>
<A>(predicate: Predicate<A>): (as: ReadonlyArray<A>) => ReadonlyArray<A>
}

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

filterMap

Signature

export declare const filterMap: <A, B>(f: (a: A) => Option<B>) => (fa: ReadonlyArray<A>) => ReadonlyArray<B>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

filterMapWithIndex

Signature

export declare const filterMapWithIndex: <A, B>(f: (i: number, a: A) => Option<B>) => (fa: readonly A[]) => readonly B[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

filterWithIndex

Signature

export declare const filterWithIndex: {
<A, B extends A>(refinementWithIndex: RefinementWithIndex<number, A, B>): (as: ReadonlyArray<A>) => ReadonlyArray<B>
<A>(predicateWithIndex: PredicateWithIndex<number, A>): <B extends A>(bs: ReadonlyArray<B>) => ReadonlyArray<B>
<A>(predicateWithIndex: PredicateWithIndex<number, A>): (as: ReadonlyArray<A>) => ReadonlyArray<A>
}

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

partition

Signature

export declare const partition: {
<A, B extends A>(
refinement: Refinement<A, B>,
): (as: ReadonlyArray<A>) => Separated<ReadonlyArray<A>, ReadonlyArray<B>>
<A>(predicate: Predicate<A>): <B extends A>(bs: ReadonlyArray<B>) => Separated<ReadonlyArray<B>, ReadonlyArray<B>>
<A>(predicate: Predicate<A>): (as: ReadonlyArray<A>) => Separated<ReadonlyArray<A>, ReadonlyArray<A>>
}

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

partitionMap

Signature

export declare const partitionMap: <A, B, C>(
f: (a: A) => Either<B, C>,
) => (fa: ReadonlyArray<A>) => Separated<ReadonlyArray<B>, ReadonlyArray<C>>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

partitionWithIndex

Signature

export declare const partitionWithIndex: {
<A, B extends A>(
refinementWithIndex: RefinementWithIndex<number, A, B>,
): (as: ReadonlyArray<A>) => Separated<ReadonlyArray<A>, ReadonlyArray<B>>
<A>(
predicateWithIndex: PredicateWithIndex<number, A>,
): <B extends A>(bs: ReadonlyArray<B>) => Separated<ReadonlyArray<B>, ReadonlyArray<B>>
<A>(
predicateWithIndex: PredicateWithIndex<number, A>,
): (as: ReadonlyArray<A>) => Separated<ReadonlyArray<A>, ReadonlyArray<A>>
}

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

separate

Signature

export declare const separate: <A, B>(fa: readonly Either<A, B>[]) => Separated<readonly A[], readonly B[]>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

wilt

Signature

export declare const wilt: PipeableWilt1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

wither

Signature

export declare const wither: PipeableWither1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Folding

foldMap

Signature

export declare const foldMap: <M>(M: Monoid<M>) => <A>(f: (a: A) => M) => (fa: ReadonlyArray<A>) => M

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

foldMapWithIndex

Signature

export declare const foldMapWithIndex: <M>(M: Monoid<M>) => <A>(f: (i: number, a: A) => M) => (fa: readonly A[]) => M

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

reduce

Signature

export declare const reduce: <A, B>(b: B, f: (b: B, a: A) => B) => (fa: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

reduceRight

Signature

export declare const reduceRight: <A, B>(b: B, f: (a: A, b: B) => B) => (fa: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

reduceRightWithIndex

Signature

export declare const reduceRightWithIndex: <A, B>(b: B, f: (i: number, a: A, b: B) => B) => (fa: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

reduceWithIndex

Signature

export declare const reduceWithIndex: <A, B>(b: B, f: (i: number, b: B, a: A) => B) => (fa: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Legacy

chain

Alias of flatMap.

Signature

export declare const chain: <A, B>(f: (a: A) => ReadonlyArray<B>) => (ma: ReadonlyArray<A>) => ReadonlyArray<B>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Lifting

fromEitherK

Signature

export declare const fromEitherK: <E, A extends ReadonlyArray<unknown>, B>(
f: (...a: A) => Either<E, B>,
) => (...a: A) => ReadonlyArray<B>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

fromOptionK

Signature

export declare const fromOptionK: <A extends readonly unknown[], B>(
f: (...a: A) => Option<B>,
) => (...a: A) => readonly B[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Mapping

flap

Signature

export declare const flap: <A>(a: A) => <B>(fab: readonly ((a: A) => B)[]) => readonly B[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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: ReadonlyArray<A>) => ReadonlyArray<B>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

mapWithIndex

Signature

export declare const mapWithIndex: <A, B>(f: (i: number, a: A) => B) => (fa: ReadonlyArray<A>) => ReadonlyArray<B>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Pattern matching

foldLeft

Alias of matchLeft.

Signature

export declare const foldLeft: <A, B>(
onEmpty: LazyArg<B>,
onNonEmpty: (head: A, tail: ReadonlyArray<A>) => B,
) => (as: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

foldRight

Alias of matchRight.

Signature

export declare const foldRight: <A, B>(
onEmpty: LazyArg<B>,
onNonEmpty: (init: ReadonlyArray<A>, last: A) => B,
) => (as: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

match

Signature

export declare const match: <B, A>(
onEmpty: LazyArg<B>,
onNonEmpty: (as: ReadonlyNonEmptyArray<A>) => B,
) => (as: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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: ReadonlyArray<A>) => B,
) => (as: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

Example

import { matchLeft } from '@fp-tx/core/ReadonlyArray'

const len: <A>(as: ReadonlyArray<A>) => number = matchLeft(
() => 0,
(_, tail) => 1 + len(tail),
)
assert.strictEqual(len([1, 2, 3]), 3)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

matchRight

Break a ReadonlyArray into its initial elements and the last element.

Signature

export declare const matchRight: <B, A>(
onEmpty: LazyArg<B>,
onNonEmpty: (init: ReadonlyArray<A>, last: A) => B,
) => (as: ReadonlyArray<A>) => B

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Refinements

isEmpty

Test whether a ReadonlyArray is empty.

Signature

export declare const isEmpty: <A>(as: readonly A[]) => as is readonly []

Details

  • Added in 0.1.0

Example

import { isEmpty } from '@fp-tx/core/ReadonlyArray'

assert.strictEqual(isEmpty([]), true)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

isNonEmpty

Test whether a ReadonlyArray is non empty.

Signature

export declare const isNonEmpty: <A>(as: ReadonlyArray<A>) => as is ReadonlyNonEmptyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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) => ReadonlyArray<B>) => (first: ReadonlyArray<A>) => ReadonlyArray<A>

Details

  • Added in 0.1.0

Example

import * as RA from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/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(() => []),
),
[],
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

chainRecBreadthFirst

Signature

export declare const chainRecBreadthFirst: <A, B>(f: (a: A) => readonly Either<A, B>[]) => (a: A) => readonly B[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

chainRecDepthFirst

Signature

export declare const chainRecDepthFirst: <A, B>(f: (a: A) => readonly Either<A, B>[]) => (a: A) => readonly B[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

chainWithIndex

Signature

export declare const chainWithIndex: <A, B>(f: (i: number, a: A) => readonly B[]) => (as: readonly A[]) => readonly B[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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) => ReadonlyArray<B>): (ma: ReadonlyArray<A>) => ReadonlyArray<B>
<A, B>(ma: ReadonlyArray<A>, f: (a: A, i: number) => ReadonlyArray<B>): ReadonlyArray<B>
}

Details

  • Added in 0.1.0

Example

import * as RA from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/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(() => []),
),
[],
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

flatten

Signature

export declare const flatten: <A>(mma: ReadonlyArray<ReadonlyArray<A>>) => ReadonlyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

traverseWithIndex

Signature

export declare const traverseWithIndex: PipeableTraverseWithIndex1<URI, number>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Traversing

sequence

Signature

export declare const sequence: Traversable1<URI>['sequence']

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

traverse

Signature

export declare const traverse: PipeableTraverse1<URI>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Type lambdas

URI

Signature

export type URI = typeof URI

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

URI

Signature

export declare const URI = 'ReadonlyArray'

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Unsafe

unsafeDeleteAt

Signature

export declare const unsafeDeleteAt: <A>(i: number, as: readonly A[]) => readonly A[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

unsafeInsertAt

Signature

export declare const unsafeInsertAt: <A>(i: number, a: A, as: ReadonlyArray<A>) => ReadonlyNonEmptyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

unsafeUpdateAt

Signature

export declare const unsafeUpdateAt: <A>(i: number, a: A, as: readonly A[]) => readonly A[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

Utilities

Spanned

Signature

export interface Spanned<I, R> {
readonly init: ReadonlyArray<I>
readonly rest: ReadonlyArray<R>
}

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

ap

Signature

export declare const ap: <A>(fa: ReadonlyArray<A>) => <B>(fab: ReadonlyArray<(a: A) => B>) => ReadonlyArray<B>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { append } from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(pipe([1, 2, 3], append(4)), [1, 2, 3, 4])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

appendW

Less strict version of append.

Signature

export declare const appendW: <B>(end: B) => <A>(init: readonly A[]) => RNEA.ReadonlyNonEmptyArray<B | A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { Eq } from '@fp-tx/core/Eq'
import * as RA from '@fp-tx/core/ReadonlyArray'
import * as N from '@fp-tx/core/number'
import { pipe } from '@fp-tx/core/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]])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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:

Whenever n evenly divides the length of as.

Signature

export declare const chunksOf: (n: number) => <A>(as: readonly A[]) => readonly RNEA.ReadonlyNonEmptyArray<A>[]

Details

  • Added in 0.1.0

Example

import { chunksOf } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(chunksOf(2)([1, 2, 3, 4, 5]), [[1, 2], [3, 4], [5]])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

comprehension

ReadonlyArray comprehension.

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>

Details

  • Added in 0.1.0

Example

import { comprehension } from '@fp-tx/core/ReadonlyArray'
import { tuple } from '@fp-tx/core/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'],
],
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

concat

Signature

export declare const concat: <A>(second: ReadonlyArray<A>) => (first: ReadonlyArray<A>) => ReadonlyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

concatW

Signature

export declare const concatW: <B>(second: readonly B[]) => <A>(first: readonly A[]) => readonly (B | A)[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

cons

Use prepend instead.

Signature

export declare const cons: typeof RNEA.cons

Details

  • Added in 0.1.0
  • Deprecated

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]>

Details

  • Added in 0.1.0

Example

import { deleteAt } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/Option'

assert.deepStrictEqual(deleteAt(0)([1, 2, 3]), some([2, 3]))
assert.deepStrictEqual(deleteAt(1)([]), none)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>
}

Details

  • Added in 0.1.0

Example

import { difference } from '@fp-tx/core/ReadonlyArray'
import * as N from '@fp-tx/core/number'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(pipe([1, 2], difference(N.Eq)([2, 3])), [1])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import * as RA from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { dropLeftWhile } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(dropLeftWhile((n: number) => n % 2 === 1)([1, 3, 2, 4, 5]), [2, 4, 5])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import * as RA from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

duplicate

Signature

export declare const duplicate: <A>(wa: ReadonlyArray<A>) => ReadonlyArray<ReadonlyArray<A>>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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
}

Details

  • Added in 0.1.0

Example

import { elem } from '@fp-tx/core/ReadonlyArray'
import * as N from '@fp-tx/core/number'
import { pipe } from '@fp-tx/core/function'

assert.strictEqual(pipe([1, 2, 3], elem(N.Eq)(2)), true)
assert.strictEqual(pipe([1, 2, 3], elem(N.Eq)(0)), false)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

empty

An empty array

Signature

export declare const empty: ReadonlyArray<never>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>>

Details

  • Added in 0.1.0

Example

import { every } from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

exists

Alias of some

Signature

export declare const exists: <A>(
predicate: Predicate<A>,
) => (as: ReadonlyArray<A>) => as is RNEA.ReadonlyNonEmptyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

extend

Signature

export declare const extend: <A, B>(f: (fa: ReadonlyArray<A>) => B) => (wa: ReadonlyArray<A>) => ReadonlyArray<B>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

filterE

Filter values inside a context.

Signature

export declare const filterE: import('./Witherable.js').FilterE1<'ReadonlyArray'>

Details

  • Added in 0.1.0

Example

import { pipe } from '@fp-tx/core/function'
import * as RA from '@fp-tx/core/ReadonlyArray'
import * as T from '@fp-tx/core/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()

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { findFirst } from '@fp-tx/core/ReadonlyArray'
import { some } from '@fp-tx/core/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 }),
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { findFirstMap } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/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'),
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

findIndex

Find the first index for which a predicate holds

Signature

export declare const findIndex: <A>(predicate: Predicate<A>) => (as: readonly A[]) => Option<number>

Details

  • Added in 0.1.0

Example

import { findIndex } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/Option'

assert.deepStrictEqual(findIndex((n: number) => n === 2)([1, 2, 3]), some(1))
assert.deepStrictEqual(findIndex((n: number) => n === 2)([]), none)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { findLast } from '@fp-tx/core/ReadonlyArray'
import { some } from '@fp-tx/core/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 }),
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { findLastIndex } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { findLastMap } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/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'),
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { head } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/Option'

assert.deepStrictEqual(head([1, 2, 3]), some(1))
assert.deepStrictEqual(head([]), none)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]>

Details

  • Added in 0.1.0

Example

import { init } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/Option'

assert.deepStrictEqual(init([1, 2, 3]), some([1, 2]))
assert.deepStrictEqual(init([]), none)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>>

Details

  • Added in 0.1.0

Example

import { insertAt } from '@fp-tx/core/ReadonlyArray'
import { some } from '@fp-tx/core/Option'

assert.deepStrictEqual(insertAt(2, 5)([1, 2, 3, 4]), some([1, 2, 5, 3, 4]))

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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

Details

  • Added in 0.1.0

Example

import * as S from '@fp-tx/core/string'
import { intercalate } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(intercalate(S.Monoid)('-')(['a', 'b', 'c']), 'a-b-c')

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>
}

Details

  • Added in 0.1.0

Example

import { intersection } from '@fp-tx/core/ReadonlyArray'
import * as N from '@fp-tx/core/number'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(pipe([1, 2], intersection(N.Eq)([2, 3])), [2])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

intersperse

Places an element in between members of an array

Signature

export declare const intersperse: <A>(middle: A) => (as: readonly A[]) => readonly A[]

Details

  • Added in 0.1.0

Example

import { intersperse } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(intersperse(9)([1, 2, 3, 4]), [1, 9, 2, 9, 3, 9, 4])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

isOutOfBound

Test whether an array contains a particular index

Signature

export declare const isOutOfBound: <A>(i: number, as: ReadonlyArray<A>) => boolean

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { last } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/Option'

assert.deepStrictEqual(last([1, 2, 3]), some(3))
assert.deepStrictEqual(last([]), none)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { lefts } from '@fp-tx/core/ReadonlyArray'
import { left, right } from '@fp-tx/core/Either'

assert.deepStrictEqual(lefts([right(1), left('foo'), right(2)]), ['foo'])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

let

Signature

export declare const let_: <N extends string, 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 }[]

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>

Details

  • Added in 0.1.0

Example

import { lookup } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/Option'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(pipe([1, 2, 3], lookup(1)), some(2))
assert.deepStrictEqual(pipe([1, 2, 3], lookup(3)), none)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]>

Details

  • Added in 0.1.0

Example

import { modifyAt } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { prepend } from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(pipe([2, 3, 4], prepend(1)), [1, 2, 3, 4])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

prependAll

Prepend an element to every member of an array

Signature

export declare const prependAll: <A>(middle: A) => (as: readonly A[]) => readonly A[]

Details

  • Added in 0.1.0

Example

import { prependAll } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(prependAll(9)([1, 2, 3, 4]), [9, 1, 9, 2, 9, 3, 9, 4])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

prependToAll

Use prependAll instead.

Signature

export declare const prependToAll: <A>(middle: A) => (as: readonly A[]) => readonly A[]

Details

  • Added in 0.1.0
  • Deprecated

License

  • MIT – Copyright (c) 2017-present Giulio Canti

prependW

Less strict version of prepend.

Signature

export declare const prependW: <B>(head: B) => <A>(tail: readonly A[]) => RNEA.ReadonlyNonEmptyArray<B | A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

range

Use ReadonlyNonEmptyArray module instead.

Signature

export declare const range: (start: number, end: number) => RNEA.ReadonlyNonEmptyArray<number>

Details

  • Added in 0.1.0
  • Deprecated

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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

Signature

export declare const readonlyArray: FunctorWithIndex1<URI, number> &
Monad1<URI> &
Unfoldable1<URI> &
Alternative1<URI> &
Extend1<URI> &
FilterableWithIndex1<URI, number> &
FoldableWithIndex1<URI, number> &
TraversableWithIndex1<URI, number> &
Witherable1<URI>

Details

  • Added in 0.1.0
  • Deprecated

License

  • MIT – Copyright (c) 2017-present Giulio Canti

reverse

Reverse an array, creating a new array

Signature

export declare const reverse: <A>(as: readonly A[]) => readonly A[]

Details

  • Added in 0.1.0

Example

import { reverse } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(reverse([1, 2, 3]), [3, 2, 1])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { rights } from '@fp-tx/core/ReadonlyArray'
import { right, left } from '@fp-tx/core/Either'

assert.deepStrictEqual(rights([right(1), left('foo'), right(2)]), [1, 2])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

rotate

Rotate a ReadonlyArray by n steps.

Signature

export declare const rotate: (n: number) => <A>(as: readonly A[]) => readonly A[]

Details

  • Added in 0.1.0

Example

import { rotate } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(rotate(2)([1, 2, 3, 4, 5]), [4, 5, 1, 2, 3])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { scanLeft } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(scanLeft(10, (b, a: number) => b - a)([1, 2, 3]), [10, 9, 7, 4])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { scanRight } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(scanRight(10, (a: number, b) => b - a)([1, 2, 3]), [4, 5, 7, 10])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

size

Calculate the number of elements in a ReadonlyArray.

Signature

export declare const size: <A>(as: readonly A[]) => number

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

snoc

Use append instead.

Signature

export declare const snoc: <A>(init: readonly A[], end: A) => RNEA.ReadonlyNonEmptyArray<A>

Details

  • Added in 0.1.0
  • Deprecated

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { some } from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { sort } from '@fp-tx/core/ReadonlyArray'
import * as N from '@fp-tx/core/number'

assert.deepStrictEqual(sort(N.Ord)([3, 2, 1]), [1, 2, 3])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { sortBy } from '@fp-tx/core/ReadonlyArray'
import { contramap } from '@fp-tx/core/Ord'
import * as S from '@fp-tx/core/string'
import * as N from '@fp-tx/core/number'
import { pipe } from '@fp-tx/core/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 },
])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

spanLeft

Split an array into two parts:

  1. The longest initial subarray for which all elements satisfy the specified predicate 2. 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>

Details

  • Added in 0.1.0

Example

import { spanLeft } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(spanLeft((n: number) => n % 2 === 1)([1, 3, 2, 4, 5]), { init: [1, 3], rest: [2, 4, 5] })

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]]

Details

  • Added in 0.1.0

Example

import { splitAt } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(splitAt(2)([1, 2, 3, 4, 5]), [
[1, 2],
[3, 4, 5],
])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]>

Details

  • Added in 0.1.0

Example

import { tail } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/Option'

assert.deepStrictEqual(tail([1, 2, 3]), some([2, 3]))
assert.deepStrictEqual(tail([]), none)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import * as RA from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>

Details

  • Added in 0.1.0

Example

import { takeLeftWhile } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(takeLeftWhile((n: number) => n % 2 === 0)([2, 4, 3, 6]), [2, 4])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import * as RA from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/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)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

unfold

Signature

export declare const unfold: <A, B>(b: B, f: (b: B) => Option<readonly [A, B]>) => readonly A[]

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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>
}

Details

  • Added in 0.1.0

Example

import { union } from '@fp-tx/core/ReadonlyArray'
import * as N from '@fp-tx/core/number'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(pipe([1, 2], union(N.Eq)([2, 3])), [1, 2, 3])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { uniq } from '@fp-tx/core/ReadonlyArray'
import * as N from '@fp-tx/core/number'

assert.deepStrictEqual(uniq(N.Eq)([1, 2, 1]), [1, 2])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]]

Details

  • Added in 0.1.0

Example

import { unzip } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(
unzip([
[1, 'a'],
[2, 'b'],
[3, 'c'],
]),
[
[1, 2, 3],
['a', 'b', 'c'],
],
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]>

Details

  • Added in 0.1.0

Example

import { updateAt } from '@fp-tx/core/ReadonlyArray'
import { some, none } from '@fp-tx/core/Option'

assert.deepStrictEqual(updateAt(1, 1)([1, 2, 3]), some([1, 1, 3]))
assert.deepStrictEqual(updateAt(1, 1)([]), none)

License

  • MIT – Copyright (c) 2017-present Giulio Canti

zero

Signature

export declare const zero: <A>() => ReadonlyArray<A>

Details

  • Added in 0.1.0

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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]>

Details

  • Added in 0.1.0

Example

import { zip } from '@fp-tx/core/ReadonlyArray'
import { pipe } from '@fp-tx/core/function'

assert.deepStrictEqual(pipe([1, 2, 3], zip(['a', 'b', 'c', 'd'])), [
[1, 'a'],
[2, 'b'],
[3, 'c'],
])

License

  • MIT – Copyright (c) 2017-present Giulio Canti

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[]

Details

  • Added in 0.1.0

Example

import { zipWith } from '@fp-tx/core/ReadonlyArray'

assert.deepStrictEqual(
zipWith([1, 2, 3], ['a', 'b', 'c', 'd'], (n, s) => s + n),
['a1', 'b2', 'c3'],
)

License

  • MIT – Copyright (c) 2017-present Giulio Canti