Record
Instances
- Compactable
- Filterable
- FilterableWithIndex
- Functor
- FunctorWithIndex
- getDifferenceMagma
- getEq
- getIntersectionSemigroup
- getMonoid
- getShow
- getUnionMonoid
- getUnionSemigroup
Conversions
Filtering
Folding
Mapping
Traversing
Type lambdas
Utilities
Foldable(deprecated)FoldableWithIndex(deprecated)Traversable(deprecated)TraversableWithIndex(deprecated)Witherable(deprecated)- collect
- deleteAt
- difference
- elem
empty(deprecated)- every
- filterMapWithIndex
- filterWithIndex
- foldMapWithIndex
- fromFoldable
- fromFoldableMap
- has
hasOwnProperty(deprecated)insertAt(deprecated)- intersection
- isEmpty
- isSubrecord
- keys
- lookup
- mapWithIndex
- modifyAt
- partitionMapWithIndex
- partitionWithIndex
- pop
record(deprecated)- reduceRightWithIndex
- reduceWithIndex
- sequence
- singleton
- size
- some
- toUnfoldable
- traverse
- traverseWithIndex
- union
- updateAt
- upsertAt
Instances
Compactable
Signature
export declare const Compactable: Compactable1<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, string>
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, string>
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
getDifferenceMagma
Produces a Magma with a concat function that combines two Records by making the difference.
Signature
export declare const getDifferenceMagma: <A>() => Magma<Record<string, A>>
Details
- Added in 0.1.0
Example
import { getDifferenceMagma, difference } from '@fp-tx/core/Record'
import { Magma } from '@fp-tx/core/Magma'
const r1 = { a: 3, c: 3 }
const r2 = { a: 1, b: 2 }
const m: Magma<Record<string, number>> = getDifferenceMagma<number>()
assert.deepStrictEqual(m.concat(r1, r2), difference(r2)(r1))
assert.deepStrictEqual(m.concat(r1, r2), { c: 3, b: 2 })
License
- MIT – Copyright (c) 2017-present Giulio Canti
getEq
Given an Eq for the base type, it produces an Eq for a Record of that base type.
Signature
export declare const getEq: <K extends string, A>(E: Eq<A>) => Eq<Record<K, A>>
Details
- Added in 0.1.0
Example
import { getEq } from '@fp-tx/core/Record'
import { string } from 'fp-ts'
import { Eq } from '@fp-tx/core/Eq'
const eq: Eq<Record<string, string>> = getEq(string.Eq)
assert.deepStrictEqual(eq.equals({ a: 'foo' }, { b: 'bar' }), false)
assert.deepStrictEqual(eq.equals({ a: 'foo' }, { a: 'foo' }), true)
License
- MIT – Copyright (c) 2017-present Giulio Canti
getIntersectionSemigroup
Given a Semigroup in the base type, it produces a Semigroup in the Record of the base type. The resulting Semigroup concatenates two Records by intersection.
Signature
export declare const getIntersectionSemigroup: <A>(S: Se.Semigroup<A>) => Se.Semigroup<Record<string, A>>
Details
- Added in 0.1.0
Example
import { getIntersectionSemigroup } from '@fp-tx/core/Record'
import { Semigroup } from '@fp-tx/core/Semigroup'
const sNumber: Semigroup<number> = { concat: (x, y) => x - y }
const sRecord: Semigroup<Record<string, number>> = getIntersectionSemigroup(sNumber)
assert.deepStrictEqual(sRecord.concat({ a: 1, b: 2 }, { b: 3, c: 4 }), { b: -1 })
License
- MIT – Copyright (c) 2017-present Giulio Canti
getMonoid
Returns a Monoid instance for Records, given a Semigroup instance for the base type. The Monoid makes the union of two Records comining the overlapping entries with the provided Semigroup.
Signature
export declare const getMonoid: <K extends string, A>(S: Semigroup<A>) => Monoid<Record<K, A>>
Details
- Added in 0.1.0
Example
import { SemigroupSum } from '@fp-tx/core/number'
import { getMonoid } from '@fp-tx/core/Record'
const M = getMonoid(SemigroupSum)
assert.deepStrictEqual(M.concat({ foo: 123, bar: 234 }, { foo: 456, baz: 567 }), {
foo: 579,
bar: 234,
baz: 567,
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
getShow
Produces a Show for a Record, given a Show for the base type (a Show produces a human-readable representation of an instance). Record entries are sorted by key with the provided Ord.
Signature
export declare function getShow(O: Ord<string>): <A>(S: Show<A>) => Show<Record<string, A>>
export declare function getShow<A>(S: Show<A>): Show<Record<string, A>>
Details
- Added in 0.1.0
Example
import { getShow } from '@fp-tx/core/Record'
import { Show } from '@fp-tx/core/Show'
import { Ord } from '@fp-tx/core/string'
const sNumber: Show<number> = { show: (n: number) => `${n}` }
const sRecord: Show<Record<string, number>> = getShow(Ord)(sNumber)
assert.deepStrictEqual(sRecord.show({ b: 2, a: 1 }), '{ "a": 1, "b": 2 }')
License
- MIT – Copyright (c) 2017-present Giulio Canti
getUnionMonoid
Same as getMonoid. Returns a Monoid instance for Records given a Semigroup instance for the base type. The Monoid makes the union of two Records combining the entries that have the same key with the provided Semigroup.
Signature
export declare const getUnionMonoid: <A>(S: Se.Semigroup<A>) => Monoid<Record<string, A>>
Details
- Added in 0.1.0
Example
import { SemigroupSum } from '@fp-tx/core/number'
import { getUnionMonoid } from '@fp-tx/core/Record'
const M = getUnionMonoid(SemigroupSum)
assert.deepStrictEqual(M.concat({ foo: 123, bar: 234 }, { foo: 456, baz: 567 }), {
foo: 579,
bar: 234,
baz: 567,
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
getUnionSemigroup
Given a Semigroup in the base type, it produces a Semigroup in the Record of the base type. The resulting Semigroup concatenates two Records by union.
Signature
export declare const getUnionSemigroup: <A>(S: Se.Semigroup<A>) => Se.Semigroup<Record<string, A>>
Details
- Added in 0.1.0
Example
import { getUnionSemigroup } from '@fp-tx/core/Record'
import { Semigroup } from '@fp-tx/core/Semigroup'
const sNumber: Semigroup<number> = { concat: (x, y) => x - y }
const sRecord: Semigroup<Record<string, number>> = getUnionSemigroup(sNumber)
assert.deepStrictEqual(sRecord.concat({ a: 1, b: 2 }, { b: 3, c: 4 }), { a: 1, b: -1, c: 4 })
License
- MIT – Copyright (c) 2017-present Giulio Canti
Conversions
fromEntries
Converts an Array of [key, value] tuples into a Record.
Signature
export declare const fromEntries: <A>(fa: [string, A][]) => Record<string, A>
Details
- Added in 0.1.0
Example
import { fromEntries } from '@fp-tx/core/Record'
assert.deepStrictEqual(
fromEntries([
['a', 1],
['b', 2],
['a', 3],
]),
{ b: 2, a: 3 },
)
License
- MIT – Copyright (c) 2017-present Giulio Canti
toArray
Get a sorted Array of the key/value pairs contained in a Record. Sorted alphabetically by key.
Signature
export declare const toArray: <K extends string, A>(r: Record<K, A>) => Array<[K, A]>
Details
- Added in 0.1.0
Example
import { toArray } from '@fp-tx/core/Record'
const x = { c: 3, a: 'foo', b: false }
assert.deepStrictEqual(toArray(x), [
['a', 'foo'],
['b', false],
['c', 3],
])
License
- MIT – Copyright (c) 2017-present Giulio Canti
toEntries
Alias of toArray.
Signature
export declare const toEntries: <K extends string, A>(r: Record<K, A>) => [K, A][]
Details
- Added in 0.1.0
Example
import { toEntries } from '@fp-tx/core/Record'
assert.deepStrictEqual(toEntries({ b: 2, a: 1 }), [
['a', 1],
['b', 2],
])
License
- MIT – Copyright (c) 2017-present Giulio Canti
Filtering
compact
Compact a Record of Options discarding the None values and keeping the Some values.
Signature
export declare const compact: <A>(fa: Record<string, Option<A>>) => Record<string, A>
Details
- Added in 0.1.0
Example
import { compact } from '@fp-tx/core/Record'
import { option } from 'fp-ts'
assert.deepStrictEqual(compact({ a: option.some('foo'), b: option.none, c: option.some('bar') }), {
a: 'foo',
c: 'bar',
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
filter
Given a Predicate, it produces a new Record keeping only the entries with a value that satisfies the provided predicate.
Signature
export declare const filter: {
<A, B extends A>(refinement: Refinement<A, B>): (fa: Record<string, A>) => Record<string, B>
<A>(predicate: Predicate<A>): <B extends A>(fb: Record<string, B>) => Record<string, B>
<A>(predicate: Predicate<A>): (fa: Record<string, A>) => Record<string, A>
}
Details
- Added in 0.1.0
Example
import { filter } from '@fp-tx/core/Record'
assert.deepStrictEqual(filter((s: string) => s.length < 4)({ a: 'foo', b: 'bar', c: 'verylong' }), {
a: 'foo',
b: 'bar',
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
filterMap
Maps a Record with an iterating function that returns an Option and it keeps only the Some values discarding the Nones.
Signature
export declare const filterMap: <A, B>(f: (a: A) => Option<B>) => (fa: Record<string, A>) => Record<string, B>
Details
- Added in 0.1.0
Example
import { filterMap } from '@fp-tx/core/Record'
import { option } from 'fp-ts'
const f = (s: string) => (s.length < 4 ? option.some(`${s} is short`) : option.none)
assert.deepStrictEqual(filterMap(f)({ a: 'foo', b: 'bar', c: 'verylong' }), {
a: 'foo is short',
b: 'bar is short',
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
getWitherable
Signature
export declare const getWitherable: (O: Ord<string>) => Witherable1<URI>
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
partition
Partition a Record into two parts according to a Predicate.
Signature
export declare const partition: {
<A, B extends A>(
refinement: Refinement<A, B>,
): (fa: Record<string, A>) => Separated<Record<string, A>, Record<string, B>>
<A>(predicate: Predicate<A>): <B extends A>(fb: Record<string, B>) => Separated<Record<string, B>, Record<string, B>>
<A>(predicate: Predicate<A>): (fa: Record<string, A>) => Separated<Record<string, A>, Record<string, A>>
}
Details
- Added in 0.1.0
Example
import { partition } from '@fp-tx/core/Record'
assert.deepStrictEqual(partition((s: string) => s.length < 4)({ a: 'foo', b: 'bar', c: 'verylong' }), {
left: {
c: 'verylong',
},
right: {
a: 'foo',
b: 'bar',
},
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
partitionMap
Maps a Record with a function returning an Either and partitions the resulting Record into Lefts and Rights.
Signature
export declare const partitionMap: <A, B, C>(
f: (a: A) => Either<B, C>,
) => (fa: Record<string, A>) => Separated<Record<string, B>, Record<string, C>>
Details
- Added in 0.1.0
Example
import { partitionMap } from '@fp-tx/core/Record'
import { either } from 'fp-ts'
const f = (s: string) => (s.length < 4 ? either.right(`${s} is short`) : either.left(`${s} is not short`))
assert.deepStrictEqual(partitionMap(f)({ a: 'foo', b: 'bar', c: 'verylong' }), {
left: {
c: 'verylong is not short',
},
right: {
a: 'foo is short',
b: 'bar is short',
},
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
separate
Separate a Record of Eithers into Lefts and Rights.
Signature
export declare const separate: <A, B>(
fa: Record<string, Either<A, B>>,
) => Separated<Record<string, A>, Record<string, B>>
Details
- Added in 0.1.0
Example
import { separate } from '@fp-tx/core/Record'
import { either } from 'fp-ts'
assert.deepStrictEqual(separate({ a: either.right('foo'), b: either.left('bar'), c: either.right('baz') }), {
right: {
a: 'foo',
c: 'baz',
},
left: {
b: 'bar',
},
})
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
Map and fold a Record. Map the Record passing each value to the iterating function. Then fold the results using the provided Monoid.
Signature
export declare function foldMap(
O: Ord<string>,
): <M>(M: Monoid<M>) => <A>(f: (a: A) => M) => (fa: Record<string, A>) => M
export declare function foldMap<M>(M: Monoid<M>): <A>(f: (a: A) => M) => (fa: Record<string, A>) => M
Details
- Added in 0.1.0
Example
import { foldMap } from '@fp-tx/core/Record'
import { Ord } from '@fp-tx/core/string'
import { Monoid } from '@fp-tx/core/Monoid'
const m: Monoid<string> = { empty: '', concat: (x: string, y: string) => (x ? `${x} -> ${y}` : `${y}`) }
const f = (a: number) => `-${a}-`
const x = { c: 3, a: 1, b: 2 }
assert.deepStrictEqual(foldMap(Ord)(m)(f)(x), '-1- -> -2- -> -3-')
License
- MIT – Copyright (c) 2017-present Giulio Canti
getFoldable
Produces a Foldable instance for a Record, using the provided Ord to sort the Record's entries by key.
Signature
export declare const getFoldable: (O: Ord<string>) => Foldable1<URI>
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
getFoldableWithIndex
Produces a FoldableWithIndex1 instance for a Record, using the provided Ord to sort the Record's entries by key.
Signature
export declare const getFoldableWithIndex: (O: Ord<string>) => FoldableWithIndex1<URI, string>
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
reduce
Reduces a Record passing each value to the iterating function. Entries are processed in order, sorted by key according to the given Ord.
Signature
export declare function reduce(O: Ord<string>): <A, B>(b: B, f: (b: B, a: A) => B) => (fa: Record<string, A>) => B
export declare function reduce<A, B>(b: B, f: (b: B, a: A) => B): (fa: Record<string, A>) => B
Details
- Added in 0.1.0
Example
import { reduce } from '@fp-tx/core/Record'
import { Ord } from '@fp-tx/core/string'
const x = { c: 3, a: 'foo', b: false }
assert.deepStrictEqual(reduce(Ord)([] as string[], (b, a) => [...b, `-${a}-`])(x), ['-foo-', '-false-', '-3-'])
License
- MIT – Copyright (c) 2017-present Giulio Canti
reduceRight
Same as reduce but entries are processed from the right, i.e. in reverse order, from the last to the first entry, according to the given Ord.
Signature
export declare function reduceRight(O: Ord<string>): <A, B>(b: B, f: (a: A, b: B) => B) => (fa: Record<string, A>) => B
export declare function reduceRight<A, B>(b: B, f: (a: A, b: B) => B): (fa: Record<string, A>) => B
Details
- Added in 0.1.0
Example
import { reduceRight } from '@fp-tx/core/Record'
import { Ord } from '@fp-tx/core/string'
const x = { c: 3, a: 'foo', b: false }
assert.deepStrictEqual(reduceRight(Ord)([] as string[], (a, b) => [...b, `-${a}-`])(x), [
'-3-',
'-false-',
'-foo-',
])
License
- MIT – Copyright (c) 2017-present Giulio Canti
Mapping
flap
Takes a value and a Record of functions and returns a Record by applying each function to the input value.
Signature
export declare const flap: <A>(a: A) => <B>(fab: Record<string, (a: A) => B>) => Record<string, B>
Details
- Added in 0.1.0
Example
import { flap } from '@fp-tx/core/Record'
const fab = { x: (n: number) => `${n} times 2`, y: (n: number) => `${n * 2}` }
assert.deepStrictEqual(flap(3)(fab), {
x: '3 times 2',
y: '6',
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
map
Map a Record passing the values to the iterating function.
Signature
export declare const map: <A, B>(f: (a: A) => B) => <K extends string>(fa: Record<K, A>) => Record<K, B>
Details
- Added in 0.1.0
Example
import { map } from '@fp-tx/core/Record'
const f = (n: number) => `-${n}-`
assert.deepStrictEqual(map(f)({ a: 3, b: 5 }), { a: '-3-', b: '-5-' })
License
- MIT – Copyright (c) 2017-present Giulio Canti
Traversing
getTraversable
Produces a Traversable instance for a Record, using the provided Ord to sort the Record's entries by key.
Signature
export declare const getTraversable: (O: Ord<string>) => Traversable1<URI>
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
getTraversableWithIndex
Produces a TraversableWithIndex instance for a Record, using the provided Ord to sort the Record's entries by key.
Signature
export declare const getTraversableWithIndex: (O: Ord<string>) => TraversableWithIndex1<URI, string>
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 = 'Record'
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
Utilities
Foldable
FoldableUse getFoldable instead.
Signature
export declare const Foldable: Foldable1<URI>
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
FoldableWithIndex
FoldableWithIndexUse getFoldableWithIndex instead.
Signature
export declare const FoldableWithIndex: FoldableWithIndex1<URI, string>
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
Traversable
TraversableUse getTraversable instead.
Signature
export declare const Traversable: Traversable1<URI>
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
TraversableWithIndex
TraversableWithIndexUse the getTraversableWithIndex instead.
Signature
export declare const TraversableWithIndex: TraversableWithIndex1<URI, string>
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
Witherable
WitherableUse getWitherable instead.
Signature
export declare const Witherable: Witherable1<URI>
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
collect
Map a Record into an Array. It passes each key/value pair to the iterating function and collects the results in an array, sorted alphabetically by the original key.
Signature
export declare function collect(
O: Ord<string>,
): <K extends string, A, B>(f: (k: K, a: A) => B) => (r: Record<K, A>) => Array<B>
export declare function collect<K extends string, A, B>(f: (k: K, a: A) => B): (r: Record<K, A>) => Array<B>
Details
- Added in 0.1.0
Example
import { collect } from '@fp-tx/core/Record'
import { Ord } from '@fp-tx/core/string'
const f = <A>(k: string, a: A) => `${k.toUpperCase()}-${a}`
const x = { c: 3, a: 'foo', b: false }
assert.deepStrictEqual(collect(Ord)(f)(x), ['A-foo', 'B-false', 'C-3'])
License
- MIT – Copyright (c) 2017-present Giulio Canti
deleteAt
Delete a key and value from a Record.
Signature
export declare function deleteAt<K extends string>(
k: K,
): <KS extends string, A>(r: Record<KS, A>) => Record<string extends K ? string : Exclude<KS, K>, A>
Details
- Added in 0.1.0
Example
import { deleteAt } from '@fp-tx/core/Record'
assert.deepStrictEqual(deleteAt('a')({ a: 1, b: 2 }), { b: 2 })
assert.deepStrictEqual(deleteAt('c')({ a: 1, b: 2 }), { a: 1, b: 2 })
License
- MIT – Copyright (c) 2017-present Giulio Canti
difference
Difference between two Records. Takes two Records and produces a Record composed by the entries of the two inputs, removing the entries with the same key in both inputs.
Signature
export declare const difference: <A>(second: Record<string, A>) => (first: Record<string, A>) => Record<string, A>
Details
- Added in 0.1.0
Example
import { difference } from '@fp-tx/core/Record'
assert.deepStrictEqual(difference({ a: 1 })({ a: 1, b: 2 }), { b: 2 })
assert.deepStrictEqual(difference({ a: 3 })({ a: 1, b: 2 }), { b: 2 })
assert.deepStrictEqual(difference({ a: 3, c: 3 })({ a: 1, b: 2 }), { b: 2, c: 3 })
License
- MIT – Copyright (c) 2017-present Giulio Canti
elem
Given an Eq checks if a Record contains an entry with value equal to a provided value.
Signature
export declare const elem: <A>(E: Eq<A>) => {
(a: A): (fa: Record<string, A>) => boolean
(a: A, fa: Record<string, A>): boolean
}
Details
- Added in 0.1.0
Example
import { elem } from '@fp-tx/core/Record'
import { number } from 'fp-ts'
assert.deepStrictEqual(elem(number.Eq)(123, { foo: 123, bar: 234 }), true)
assert.deepStrictEqual(elem(number.Eq)(-7, { foo: 123, bar: 234 }), false)
License
- MIT – Copyright (c) 2017-present Giulio Canti
empty
emptyUse a new {} instead.
Signature
export declare const empty: Record<string, never>
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
every
Test if every value in a Record satisfies the predicate.
Signature
export declare const every: {
<A, B extends A>(refinement: Refinement<A, B>): Refinement<Record<string, A>, Record<string, B>>
<A>(predicate: Predicate<A>): Predicate<Record<string, A>>
}
Details
- Added in 0.1.0
Example
import { every } from '@fp-tx/core/Record'
assert.deepStrictEqual(every((n: number) => n >= 0)({ a: 1, b: 2 }), true)
assert.deepStrictEqual(every((n: number) => n >= 0)({ a: 1, b: -1 }), false)
License
- MIT – Copyright (c) 2017-present Giulio Canti
filterMapWithIndex
Maps a Record with an iterating function that takes key and value and returns an Option, keeping only the Some values and discarding Nones.
Signature
export declare const filterMapWithIndex: <K extends string, A, B>(
f: (key: K, a: A) => Option<B>,
) => (fa: Record<K, A>) => Record<string, B>
Details
- Added in 0.1.0
Example
import { filterMapWithIndex } from '@fp-tx/core/Record'
import { option } from 'fp-ts'
const f = (key: string, a: number) => (a >= 0 ? option.some(`${key}${a}`) : option.none)
assert.deepStrictEqual(filterMapWithIndex(f)({ a: -1, b: 2, c: 3 }), {
b: 'b2',
c: 'c3',
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
filterWithIndex
Produce a new Record keeping only the entries that satisfy a predicate taking key and value as input.
Signature
export declare function filterWithIndex<K extends string, A, B extends A>(
refinementWithIndex: RefinementWithIndex<K, A, B>,
): (fa: Record<K, A>) => Record<string, B>
export declare function filterWithIndex<K extends string, A>(
predicateWithIndex: PredicateWithIndex<K, A>,
): <B extends A>(fb: Record<K, B>) => Record<string, B>
export declare function filterWithIndex<K extends string, A>(
predicateWithIndex: PredicateWithIndex<K, A>,
): (fa: Record<K, A>) => Record<string, A>
Details
- Added in 0.1.0
Example
import { filterWithIndex } from '@fp-tx/core/Record'
assert.deepStrictEqual(
filterWithIndex((s: string, v: number) => s.length <= 1 && v > 0)({ a: 1, b: -2, ccc: 3 }),
{
a: 1,
},
)
License
- MIT – Copyright (c) 2017-present Giulio Canti
foldMapWithIndex
Map and fold a Record. Map the Record passing each key/value pair to the iterating function. Then fold the results using the provided Monoid.
Signature
export declare function foldMapWithIndex(
O: Ord<string>,
): <M>(M: Monoid<M>) => <K extends string, A>(f: (k: K, a: A) => M) => (fa: Record<K, A>) => M
export declare function foldMapWithIndex<M>(
M: Monoid<M>,
): <K extends string, A>(f: (k: K, a: A) => M) => (fa: Record<K, A>) => M
Details
- Added in 0.1.0
Example
import { foldMapWithIndex } from '@fp-tx/core/Record'
import { Ord } from '@fp-tx/core/string'
import { Monoid } from '@fp-tx/core/Monoid'
const m: Monoid<string> = { empty: '', concat: (x: string, y: string) => (x ? `${x} -> ${y}` : `${y}`) }
const f = (k: string, a: number) => `${k}-${a}`
const x = { c: 3, a: 1, b: 2 }
assert.deepStrictEqual(foldMapWithIndex(Ord)(m)(f)(x), 'a-1 -> b-2 -> c-3')
License
- MIT – Copyright (c) 2017-present Giulio Canti
fromFoldable
Create a Record from a foldable collection of key/value pairs, using the specified Magma to combine values for duplicate keys.
Signature
export declare function fromFoldable<F extends URIS3, A>(
M: Magma<A>,
F: Foldable3<F>,
): <R, E>(fka: Kind3<F, R, E, [string, A]>) => Record<string, A>
export declare function fromFoldable<F extends URIS2, A>(
M: Magma<A>,
F: Foldable2<F>,
): <E>(fka: Kind2<F, E, [string, A]>) => Record<string, A>
export declare function fromFoldable<F extends URIS, A>(
M: Magma<A>,
F: Foldable1<F>,
): (fka: Kind<F, [string, A]>) => Record<string, A>
export declare function fromFoldable<F, A>(
M: Magma<A>,
F: FoldableHKT<F>,
): (fka: HKT<F, [string, A]>) => Record<string, A>
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
fromFoldableMap
Create a Record from a foldable collection using the specified functions to
- Map to key/value pairs - Combine values for duplicate keys.
Signature
export declare function fromFoldableMap<F extends URIS3, B>(
M: Magma<B>,
F: Foldable3<F>,
): <R, E, A>(fa: Kind3<F, R, E, A>, f: (a: A) => [string, B]) => Record<string, B>
export declare function fromFoldableMap<F extends URIS2, B>(
M: Magma<B>,
F: Foldable2<F>,
): <E, A>(fa: Kind2<F, E, A>, f: (a: A) => [string, B]) => Record<string, B>
export declare function fromFoldableMap<F extends URIS, B>(
M: Magma<B>,
F: Foldable1<F>,
): <A>(fa: Kind<F, A>, f: (a: A) => [string, B]) => Record<string, B>
export declare function fromFoldableMap<F, B>(
M: Magma<B>,
F: FoldableHKT<F>,
): <A>(fa: HKT<F, A>, f: (a: A) => [string, B]) => Record<string, B>
Details
- Added in 0.1.0
Example
import { last } from '@fp-tx/core/Semigroup'
import { Foldable, zip } from '@fp-tx/core/Array'
import { identity } from '@fp-tx/core/function'
import { fromFoldableMap } from '@fp-tx/core/Record'
export const zipObject = <K extends string, A>(keys: Array<K>, values: Array<A>): Record<K, A> =>
fromFoldableMap(last<A>(), Foldable)(zip(keys, values), identity)
assert.deepStrictEqual(zipObject(['a', 'b'], [1, 2, 3]), { a: 1, b: 2 })
interface User {
readonly id: string
readonly name: string
}
const users: Array<User> = [
{ id: 'id1', name: 'name1' },
{ id: 'id2', name: 'name2' },
{ id: 'id1', name: 'name3' },
]
assert.deepStrictEqual(
fromFoldableMap(last<User>(), Foldable)(users, user => [user.id, user]),
{
id1: { id: 'id1', name: 'name3' },
id2: { id: 'id2', name: 'name2' },
},
)
License
- MIT – Copyright (c) 2017-present Giulio Canti
has
Test whether or not a key exists in a Record.
Note. This function is not pipeable because is a Refinement.
Signature
export declare const has: <K extends string>(k: string, r: Record<K, unknown>) => k is K
Details
- Added in 0.1.0
Example
import { has } from '@fp-tx/core/Record'
assert.deepStrictEqual(has('a', { a: 1, b: 2 }), true)
assert.deepStrictEqual(has('c', { a: 1, b: 2 }), false)
License
- MIT – Copyright (c) 2017-present Giulio Canti
hasOwnProperty
hasOwnPropertyUse has instead.
Signature
export declare const hasOwnProperty: <K extends string>(k: string, r: Record<K, unknown>) => k is K
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
insertAt
insertAtUse upsertAt instead.
Signature
export declare const insertAt: <A>(k: string, a: A) => (r: Record<string, A>) => Record<string, A>
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
intersection
Intersection of two Records. Takes two Records and produces a Record combining only the entries of the two inputswith the same key. It uses the concat function of the provided Magma to combine the elements.
Signature
export declare const intersection: <A>(
M: Magma<A>,
) => (second: Record<string, A>) => (first: Record<string, A>) => Record<string, A>
Details
- Added in 0.1.0
Example
import { intersection } from '@fp-tx/core/Record'
import { Magma } from '@fp-tx/core/Magma'
const m1: Magma<number> = { concat: (x: number, y: number) => x + y }
assert.deepStrictEqual(intersection(m1)({ a: 3, c: 3 })({ a: 1, b: 2 }), { a: 4 })
const m2: Magma<number> = { concat: (x: number) => x }
assert.deepStrictEqual(intersection(m2)({ a: 3, c: 3 })({ a: 1, b: 2 }), { a: 1 })
License
- MIT – Copyright (c) 2017-present Giulio Canti
isEmpty
Test whether a Record is empty.
Signature
export declare const isEmpty: <A>(r: Record<string, A>) => boolean
Details
- Added in 0.1.0
Example
import { isEmpty } from '@fp-tx/core/Record'
assert.deepStrictEqual(isEmpty({}), true)
assert.deepStrictEqual(isEmpty({ a: 3 }), false)
License
- MIT – Copyright (c) 2017-present Giulio Canti
isSubrecord
Test whether one Record contains all of the keys and values contained in another Record.
Signature
export declare const isSubrecord: <A>(E: Eq<A>) => {
(that: Record<string, A>): (me: Record<string, A>) => boolean
(me: Record<string, A>, that: Record<string, A>): boolean
}
Details
- Added in 0.1.0
Example
import { isSubrecord } from '@fp-tx/core/Record'
import { string } from 'fp-ts'
assert.deepStrictEqual(
isSubrecord(string.Eq)({ a: 'foo', b: 'bar', c: 'baz' })({ a: 'foo', b: 'bar', c: 'baz' }),
true,
)
assert.deepStrictEqual(isSubrecord(string.Eq)({ a: 'foo', b: 'bar', c: 'baz' })({ a: 'foo', c: 'baz' }), true)
assert.deepStrictEqual(
isSubrecord(string.Eq)({ a: 'foo', b: 'bar', c: 'baz' })({ a: 'foo', b: 'not-bar', c: 'baz' }),
false,
)
assert.deepStrictEqual(isSubrecord(string.Eq)({ a: 'foo', b: 'bar' })({ a: 'foo', b: 'bar', c: 'baz' }), false)
License
- MIT – Copyright (c) 2017-present Giulio Canti
keys
The keys of a Record, sorted alphabetically.
Signature
export declare const keys: <K extends string>(r: Record<K, unknown>) => Array<K>
Details
- Added in 0.1.0
Example
import { keys } from '@fp-tx/core/Record'
assert.deepStrictEqual(keys({ c: 1, a: 2, b: 3 }), ['a', 'b', 'c'])
License
- MIT – Copyright (c) 2017-present Giulio Canti
lookup
Lookup the value for a key in a Record.
Signature
export declare const lookup: {
(k: string): <A>(r: Record<string, A>) => Option<A>
<A>(k: string, r: Record<string, A>): Option<A>
}
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
mapWithIndex
Map a Record passing the key/value pairs to the iterating function.
Signature
export declare const mapWithIndex: <K extends string, A, B>(f: (k: K, a: A) => B) => (fa: Record<K, A>) => Record<K, B>
Details
- Added in 0.1.0
Example
import { mapWithIndex } from '@fp-tx/core/Record'
const f = (k: string, n: number) => `${k.toUpperCase()}-${n}`
assert.deepStrictEqual(mapWithIndex(f)({ a: 3, b: 5 }), { a: 'A-3', b: 'B-5' })
License
- MIT – Copyright (c) 2017-present Giulio Canti
modifyAt
Applies a mapping function to one spcific key/value pair in a Record.
Signature
export declare const modifyAt: <A>(
k: string,
f: (a: A) => A,
) => <K extends string>(r: Record<K, A>) => Option<Record<K, A>>
Details
- Added in 0.1.0
Example
otherwise it returns `None`
License
- MIT – Copyright (c) 2017-present Giulio Canti
partitionMapWithIndex
Maps a Record with a function returning an Either and partitions the resulting Record into Lefts and Rights.
Signature
export declare const partitionMapWithIndex: <K extends string, A, B, C>(
f: (key: K, a: A) => Either<B, C>,
) => (fa: Record<K, A>) => Separated<Record<string, B>, Record<string, C>>
Details
- Added in 0.1.0
Example
import { partitionMapWithIndex } from '@fp-tx/core/Record'
import { either } from 'fp-ts'
const f = (key: string, a: number) =>
a >= 0 ? either.right(`${key} is >= 0 (${a})`) : either.left(`${key} is < 0 (${a})`)
assert.deepStrictEqual(partitionMapWithIndex(f)({ a: -1, b: 2, c: 123 }), {
left: {
a: 'a is < 0 (-1)',
},
right: {
b: 'b is >= 0 (2)',
c: 'c is >= 0 (123)',
},
})
License
- MIT – Copyright (c) 2017-present Giulio Canti
partitionWithIndex
Partition a Record into two parts according to a predicate that takes a key and a value.
Signature
export declare function partitionWithIndex<K extends string, A, B extends A>(
refinementWithIndex: RefinementWithIndex<K, A, B>,
): (fa: Record<K, A>) => Separated<Record<string, A>, Record<string, B>>
export declare function partitionWithIndex<K extends string, A>(
predicateWithIndex: PredicateWithIndex<K, A>,
): <B extends A>(fb: Record<K, B>) => Separated<Record<string, B>, Record<string, B>>
export declare function partitionWithIndex<K extends string, A>(
predicateWithIndex: PredicateWithIndex<K, A>,
): (fa: Record<K, A>) => Separated<Record<string, A>, Record<string, A>>
Details
- Added in 0.1.0
Example
import { partitionWithIndex } from '@fp-tx/core/Record'
assert.deepStrictEqual(
partitionWithIndex((key: string, a: number) => key.length <= 1 && a > 0)({ a: -1, b: 2, ccc: 7 }),
{
left: {
a: -1,
ccc: 7,
},
right: {
b: 2,
},
},
)
License
- MIT – Copyright (c) 2017-present Giulio Canti
pop
Delete a key and value from a Record, returning the value as well as the subsequent Record.
Signature
export declare function pop<K extends string>(
k: K,
): <KS extends string, A>(r: Record<KS, A>) => Option<[A, Record<string extends K ? string : Exclude<KS, K>, A>]>
Details
- Added in 0.1.0
Example
otherwise it returns `None`
License
- MIT – Copyright (c) 2017-present Giulio Canti
record
recordThis instance is deprecated, use small, specific instances instead. For example if a function needs a Functor instance, pass R.Functor instead of R.record (where R is from import R from 'fp-ts/Record')
Signature
export declare const record: FunctorWithIndex1<URI, string> &
FoldableWithIndex1<URI, string> &
FilterableWithIndex1<URI, string> &
TraversableWithIndex1<URI, string> &
Witherable1<URI>
Details
- Added in 0.1.0
- Deprecated
License
- MIT – Copyright (c) 2017-present Giulio Canti
reduceRightWithIndex
Same as reduceWithIndex, but reduce starting from the right (i.e. in reverse order, from the last to the first entry according to the given Ord).
Signature
export declare function reduceRightWithIndex(
O: Ord<string>,
): <K extends string, A, B>(b: B, f: (k: K, a: A, b: B) => B) => (fa: Record<K, A>) => B
export declare function reduceRightWithIndex<K extends string, A, B>(
b: B,
f: (k: K, a: A, b: B) => B,
): (fa: Record<K, A>) => B
Details
- Added in 0.1.0
Example
import { reduceRightWithIndex } from '@fp-tx/core/Record'
import { Ord } from '@fp-tx/core/string'
const x = { c: 3, a: 'foo', b: false }
assert.deepStrictEqual(reduceRightWithIndex(Ord)([] as string[], (k, a, b) => [...b, `${k}-${a}`])(x), [
'c-3',
'b-false',
'a-foo',
])
License
- MIT – Copyright (c) 2017-present Giulio Canti
reduceWithIndex
Reduces a Record passing each key/value pair to the iterating function. Entries are processed in the order, sorted by key according to the given Ord.
Signature
export declare function reduceWithIndex(
O: Ord<string>,
): <K extends string, A, B>(b: B, f: (k: K, b: B, a: A) => B) => (fa: Record<K, A>) => B
export declare function reduceWithIndex<K extends string, A, B>(
b: B,
f: (k: K, b: B, a: A) => B,
): (fa: Record<K, A>) => B
Details
- Added in 0.1.0
Example
import { reduceWithIndex } from '@fp-tx/core/Record'
import { Ord } from '@fp-tx/core/string'
const x = { c: 3, a: 'foo', b: false }
assert.deepStrictEqual(reduceWithIndex(Ord)([] as string[], (k, b, a) => [...b, `${k}-${a}`])(x), [
'a-foo',
'b-false',
'c-3',
])
License
- MIT – Copyright (c) 2017-present Giulio Canti
sequence
Record sequencing, i.e., take a Record in which elements are monads and return a monad of a Record of the base types. The following example for instance shows sequencing a Record<string, Option<number>> into an Option<Record<string, number>>.
sequence in Record is equivalent to sequenceS in Apply.ts.
Signature
export declare function sequence<F extends URIS3>(
F: Applicative3<F>,
): <K extends string, R, E, A>(ta: Record<K, Kind3<F, R, E, A>>) => Kind3<F, R, E, Record<K, A>>
export declare function sequence<F extends URIS3, E>(
F: Applicative3C<F, E>,
): <K extends string, R, A>(ta: Record<K, Kind3<F, R, E, A>>) => Kind3<F, R, E, Record<K, A>>
export declare function sequence<F extends URIS2>(
F: Applicative2<F>,
): <K extends string, E, A>(ta: Record<K, Kind2<F, E, A>>) => Kind2<F, E, Record<K, A>>
export declare function sequence<F extends URIS2, E>(
F: Applicative2C<F, E>,
): <K extends string, A>(ta: Record<K, Kind2<F, E, A>>) => Kind2<F, E, Record<K, A>>
export declare function sequence<F extends URIS>(
F: Applicative1<F>,
): <K extends string, A>(ta: Record<K, Kind<F, A>>) => Kind<F, Record<K, A>>
export declare function sequence<F>(
F: Applicative<F>,
): <K extends string, A>(ta: Record<K, HKT<F, A>>) => HKT<F, Record<K, A>>
Details
- Added in 0.1.0
Example
import { sequence } from '@fp-tx/core/Record'
import { option } from 'fp-ts'
import { sequenceS } from '@fp-tx/core/Apply'
assert.deepStrictEqual(
sequence(option.Applicative)({ a: option.some(1), b: option.some(2) }),
option.some({ a: 1, b: 2 }),
)
assert.deepStrictEqual(sequence(option.Applicative)({ a: option.some(1), b: option.none }), option.none)
assert.deepStrictEqual(
sequence(option.Applicative)({ a: option.some(1), b: option.some(2) }),
sequenceS(option.Applicative)({ a: option.some(1), b: option.some(2) }),
)
License
- MIT – Copyright (c) 2017-present Giulio Canti
singleton
Create a Record with one key/value pair.
Signature
export declare const singleton: <A>(k: string, a: A) => Record<string, A>
Details
- Added in 0.1.0
Example
import { singleton } from '@fp-tx/core/Record'
assert.deepStrictEqual(singleton('a', 1), { a: 1 })
License
- MIT – Copyright (c) 2017-present Giulio Canti
size
Calculate the number of key/value pairs in a Record.
Signature
export declare const size: <A>(r: Record<string, A>) => number
Details
- Added in 0.1.0
Example
import { size } from '@fp-tx/core/Record'
assert.deepStrictEqual(size({ a: true, b: 2, c: 'three' }), 3)
License
- MIT – Copyright (c) 2017-present Giulio Canti
some
Test if at least one value in a Record satisfies the predicate.
Signature
export declare const some: <A>(predicate: (a: A) => boolean) => (r: Record<string, A>) => boolean
Details
- Added in 0.1.0
Example
import { some } from '@fp-tx/core/Record'
assert.deepStrictEqual(some((n: number) => n >= 0)({ a: 1, b: -2 }), true)
assert.deepStrictEqual(some((n: number) => n >= 0)({ a: -1, b: -2 }), false)
License
- MIT – Copyright (c) 2017-present Giulio Canti
toUnfoldable
Unfolds a Record into a list of key/value pairs.
Given an Unfoldable class type U such as array or readonlyArray, it uses the unfold function to create an instance of U, providing an iterating function that iterates over each key/value pair in the record sorted alphabetically by key.
Signature
export declare function toUnfoldable<F extends URIS>(
U: Unfoldable1<F>,
): <K extends string, A>(r: Record<K, A>) => Kind<F, [K, A]>
export declare function toUnfoldable<F>(U: Unfoldable<F>): <K extends string, A>(r: Record<K, A>) => HKT<F, [K, A]>
Details
- Added in 0.1.0
Example
import { array, readonlyArray } from 'fp-ts'
import { toUnfoldable } from '@fp-tx/core/Record'
assert.deepStrictEqual(toUnfoldable(array)({ b: 2, a: 1 }), [
['a', 1],
['b', 2],
])
assert.deepStrictEqual(toUnfoldable(readonlyArray)({ b: 2, a: 1 }), [
['a', 1],
['b', 2],
])
License
- MIT – Copyright (c) 2017-present Giulio Canti
traverse
Signature
export declare function traverse<F extends URIS4>(
F: Applicative4<F>,
): <S, R, E, A, B>(
f: (a: A) => Kind4<F, S, R, E, B>,
) => <K extends string>(ta: Record<K, A>) => Kind4<F, S, R, E, Record<K, B>>
export declare function traverse<F extends URIS3>(
F: Applicative3<F>,
): <R, E, A, B>(f: (a: A) => Kind3<F, R, E, B>) => <K extends string>(ta: Record<K, A>) => Kind3<F, R, E, Record<K, B>>
export declare function traverse<F extends URIS3, E>(
F: Applicative3C<F, E>,
): <R, A, B>(f: (a: A) => Kind3<F, R, E, B>) => <K extends string>(ta: Record<K, A>) => Kind3<F, R, E, Record<K, B>>
export declare function traverse<F extends URIS2>(
F: Applicative2<F>,
): <E, A, B>(f: (a: A) => Kind2<F, E, B>) => <K extends string>(ta: Record<K, A>) => Kind2<F, E, Record<K, B>>
export declare function traverse<F extends URIS2, E>(
F: Applicative2C<F, E>,
): <A, B>(f: (a: A) => Kind2<F, E, B>) => <K extends string>(ta: Record<K, A>) => Kind2<F, E, Record<K, B>>
export declare function traverse<F extends URIS>(
F: Applicative1<F>,
): <A, B>(f: (a: A) => Kind<F, B>) => <K extends string>(ta: Record<K, A>) => Kind<F, Record<K, B>>
export declare function traverse<F>(
F: Applicative<F>,
): <A, B>(f: (a: A) => HKT<F, B>) => <K extends string>(ta: Record<K, A>) => HKT<F, Record<K, B>>
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
traverseWithIndex
Signature
export declare function traverseWithIndex<F extends URIS4>(
F: Applicative4<F>,
): <K extends string, S, R, E, A, B>(
f: (k: K, a: A) => Kind4<F, S, R, E, B>,
) => (ta: Record<K, A>) => Kind4<F, S, R, E, Record<K, B>>
export declare function traverseWithIndex<F extends URIS3>(
F: Applicative3<F>,
): <K extends string, R, E, A, B>(
f: (k: K, a: A) => Kind3<F, R, E, B>,
) => (ta: Record<K, A>) => Kind3<F, R, E, Record<K, B>>
export declare function traverseWithIndex<F extends URIS3, E>(
F: Applicative3C<F, E>,
): <K extends string, R, A, B>(
f: (k: K, a: A) => Kind3<F, R, E, B>,
) => (ta: Record<K, A>) => Kind3<F, R, E, Record<K, B>>
export declare function traverseWithIndex<F extends URIS2>(
F: Applicative2<F>,
): <K extends string, E, A, B>(f: (k: K, a: A) => Kind2<F, E, B>) => (ta: Record<K, A>) => Kind2<F, E, Record<K, B>>
export declare function traverseWithIndex<F extends URIS2, E>(
F: Applicative2C<F, E>,
): <K extends string, A, B>(f: (k: K, a: A) => Kind2<F, E, B>) => (ta: Record<K, A>) => Kind2<F, E, Record<K, B>>
export declare function traverseWithIndex<F extends URIS>(
F: Applicative1<F>,
): <K extends string, A, B>(f: (k: K, a: A) => Kind<F, B>) => (ta: Record<K, A>) => Kind<F, Record<K, B>>
export declare function traverseWithIndex<F>(
F: Applicative<F>,
): <K extends string, A, B>(f: (k: K, a: A) => HKT<F, B>) => (ta: Record<K, A>) => HKT<F, Record<K, B>>
Details
- Added in 0.1.0
License
- MIT – Copyright (c) 2017-present Giulio Canti
union
Union of two Records. Takes two Records and produces a Record combining all the entries of the two inputs. It uses the concat function of the provided Magma to combine the elements with the same key.
Signature
export declare const union: <A>(
M: Magma<A>,
) => (second: Record<string, A>) => (first: Record<string, A>) => Record<string, A>
Details
- Added in 0.1.0
Example
import { union } from '@fp-tx/core/Record'
import { Magma } from '@fp-tx/core/Magma'
const m1: Magma<number> = { concat: (x: number, y: number) => x + y }
assert.deepStrictEqual(union(m1)({ a: 3, c: 3 })({ a: 1, b: 2 }), { a: 4, b: 2, c: 3 })
const m2: Magma<number> = { concat: (x: number) => x }
assert.deepStrictEqual(union(m2)({ a: 3, c: 3 })({ a: 1, b: 2 }), { a: 1, b: 2, c: 3 })
License
- MIT – Copyright (c) 2017-present Giulio Canti
updateAt
Replace a key/value pair in a Record.
Signature
export declare const updateAt: <A>(k: string, a: A) => <K extends string>(r: Record<K, A>) => Option<Record<K, A>>
Details
- Added in 0.1.0
Example
otherwise it returns `None`
License
- MIT – Copyright (c) 2017-present Giulio Canti
upsertAt
Insert or replace a key/value pair in a Record.
Signature
export declare const upsertAt: <A>(k: string, a: A) => (r: Record<string, A>) => Record<string, A>
Details
- Added in 0.1.0
Example
import { upsertAt } from '@fp-tx/core/Record'
assert.deepStrictEqual(upsertAt('a', 5)({ a: 1, b: 2 }), { a: 5, b: 2 })
assert.deepStrictEqual(upsertAt('c', 5)({ a: 1, b: 2 }), { a: 1, b: 2, c: 5 })
License
- MIT – Copyright (c) 2017-present Giulio Canti