/** * @since 2.5.0 */ import { Applicative, Applicative1, Applicative2, Applicative2C, Applicative3, Applicative3C } from './Applicative' import { Compactable1, Separated } from './Compactable' import { Either } from './Either' import { Eq } from './Eq' import { Filterable1 } from './Filterable' import { FilterableWithIndex1, PredicateWithIndex, RefinementWithIndex } from './FilterableWithIndex' import { Foldable as FoldableHKT, Foldable1, Foldable2, Foldable3 } from './Foldable' import { FoldableWithIndex1 } from './FoldableWithIndex' import { Predicate, Refinement } from './function' import { Functor1 } from './Functor' import { FunctorWithIndex1 } from './FunctorWithIndex' import { HKT, Kind, Kind2, Kind3, URIS, URIS2, URIS3 } from './HKT' import { Magma } from './Magma' import { Monoid } from './Monoid' import { Option } from './Option' import { Semigroup } from './Semigroup' import { Show } from './Show' import { Traversable1 } from './Traversable' import { TraversableWithIndex1 } from './TraversableWithIndex' import { Unfoldable, Unfoldable1 } from './Unfoldable' import { PipeableWilt1, PipeableWither1, Witherable1 } from './Witherable' /** * @category model * @since 2.5.0 */ export declare type ReadonlyRecord = Readonly> /** * @category constructors * @since 2.5.0 */ export declare function fromRecord(r: Record): ReadonlyRecord /** * @category destructors * @since 2.5.0 */ export declare function toRecord(r: ReadonlyRecord): Record /** * @category instances * @since 2.5.0 */ export declare function getShow(S: Show): Show> /** * Calculate the number of key/value pairs in a record * * @since 2.5.0 */ export declare function size(r: ReadonlyRecord): number /** * Test whether a record is empty * * @since 2.5.0 */ export declare function isEmpty(r: ReadonlyRecord): boolean /** * @since 2.5.0 */ export declare function keys(r: ReadonlyRecord): ReadonlyArray /** * Map a record into an array * * @example * import {collect} from 'fp-ts/ReadonlyRecord' * * const x: { a: string, b: boolean } = { a: 'foo', b: false } * assert.deepStrictEqual( * collect((key, val) => ({key: key, value: val}))(x), * [{key: 'a', value: 'foo'}, {key: 'b', value: false}] * ) * * @since 2.5.0 */ export declare function collect( f: (k: K, a: A) => B ): (r: ReadonlyRecord) => ReadonlyArray /** * @category destructors * @since 2.5.0 */ export declare const toReadonlyArray: (r: ReadonlyRecord) => ReadonlyArray /** * Unfolds a record into a list of key/value pairs * * @category destructors * @since 2.5.0 */ export declare function toUnfoldable( U: Unfoldable1 ): (r: ReadonlyRecord) => Kind export declare function toUnfoldable( U: Unfoldable ): (r: ReadonlyRecord) => HKT /** * Insert or replace a key/value pair in a record * * @category combinators * @since 2.5.0 */ export declare function insertAt( k: K, a: A ): (r: ReadonlyRecord) => ReadonlyRecord /** * @since 2.5.0 */ export declare function hasOwnProperty(k: string, r: ReadonlyRecord): k is K /** * Delete a key and value from a map * * @category combinators * @since 2.5.0 */ export declare function deleteAt( k: K ): (r: ReadonlyRecord) => ReadonlyRecord, A> /** * @since 2.5.0 */ export declare function updateAt( k: string, a: A ): (r: ReadonlyRecord) => Option> /** * @since 2.5.0 */ export declare function modifyAt( k: string, f: (a: A) => A ): (r: ReadonlyRecord) => Option> /** * Delete a key and value from a map, returning the value as well as the subsequent map * * @since 2.5.0 */ export declare function pop( k: K ): ( r: ReadonlyRecord ) => Option, A>]> /** * Test whether one record contains all of the keys and values contained in another record * * @since 2.5.0 */ export declare function isSubrecord( E: Eq ): { (that: ReadonlyRecord): (me: ReadonlyRecord) => boolean (me: ReadonlyRecord, that: ReadonlyRecord): boolean } /** * @category instances * @since 2.5.0 */ export declare function getEq(E: Eq): Eq> /** * Returns a `Monoid` instance for records given a `Semigroup` instance for their values * * @example * import { semigroupSum } from 'fp-ts/Semigroup' * import { getMonoid } from 'fp-ts/ReadonlyRecord' * * const M = getMonoid(semigroupSum) * assert.deepStrictEqual(M.concat({ foo: 123 }, { foo: 456 }), { foo: 579 }) * * @category instances * @since 2.5.0 */ export declare function getMonoid(S: Semigroup): Monoid> /** * Lookup the value for a key in a record * * @since 2.5.0 */ export declare function lookup(k: string): (r: ReadonlyRecord) => Option export declare function lookup(k: string, r: ReadonlyRecord): Option /** * @since 2.5.0 */ export declare const empty: ReadonlyRecord /** * Map a record passing the keys to the iterating function * * @category combinators * @since 2.5.0 */ export declare function mapWithIndex( f: (k: K, a: A) => B ): (fa: ReadonlyRecord) => ReadonlyRecord /** * Map a record passing the values to the iterating function * * @category combinators * @since 2.5.0 */ export declare function map(f: (a: A) => B): (fa: ReadonlyRecord) => ReadonlyRecord /** * @since 2.5.0 */ export declare function reduceWithIndex( b: B, f: (k: K, b: B, a: A) => B ): (fa: ReadonlyRecord) => B /** * @since 2.5.0 */ export declare function foldMapWithIndex( M: Monoid ): (f: (k: K, a: A) => M) => (fa: ReadonlyRecord) => M /** * @since 2.5.0 */ export declare function reduceRightWithIndex( b: B, f: (k: K, a: A, b: B) => B ): (fa: ReadonlyRecord) => B /** * Create a record with one key/value pair * * @category constructors * @since 2.5.0 */ export declare function singleton(k: K, a: A): ReadonlyRecord /** * @since 2.5.0 */ export declare function traverseWithIndex( F: Applicative3 ): ( f: (k: K, a: A) => Kind3 ) => (ta: ReadonlyRecord) => Kind3> export declare function traverseWithIndex( F: Applicative3C ): ( f: (k: K, a: A) => Kind3 ) => (ta: ReadonlyRecord) => Kind3> export declare function traverseWithIndex( F: Applicative2 ): ( f: (k: K, a: A) => Kind2 ) => (ta: ReadonlyRecord) => Kind2> export declare function traverseWithIndex( F: Applicative2C ): ( f: (k: K, a: A) => Kind2 ) => (ta: ReadonlyRecord) => Kind2> export declare function traverseWithIndex( F: Applicative1 ): ( f: (k: K, a: A) => Kind ) => (ta: ReadonlyRecord) => Kind> export declare function traverseWithIndex( F: Applicative ): (f: (k: K, a: A) => HKT) => (ta: ReadonlyRecord) => HKT> /** * @since 2.5.0 */ export declare function traverse( F: Applicative3 ): ( f: (a: A) => Kind3 ) => (ta: ReadonlyRecord) => Kind3> export declare function traverse( F: Applicative3C ): ( f: (a: A) => Kind3 ) => (ta: ReadonlyRecord) => Kind3> export declare function traverse( F: Applicative2 ): ( f: (a: A) => Kind2 ) => (ta: ReadonlyRecord) => Kind2> export declare function traverse( F: Applicative2C ): ( f: (a: A) => Kind2 ) => (ta: ReadonlyRecord) => Kind2> export declare function traverse( F: Applicative1 ): (f: (a: A) => Kind) => (ta: ReadonlyRecord) => Kind> export declare function traverse( F: Applicative ): (f: (a: A) => HKT) => (ta: ReadonlyRecord) => HKT> /** * @since 2.5.0 */ export declare function sequence( F: Applicative3 ): (ta: ReadonlyRecord>) => Kind3> export declare function sequence( F: Applicative3C ): (ta: ReadonlyRecord>) => Kind3> export declare function sequence( F: Applicative2 ): (ta: ReadonlyRecord>) => Kind2> export declare function sequence( F: Applicative2C ): (ta: ReadonlyRecord>) => Kind2> export declare function sequence( F: Applicative1 ): (ta: ReadonlyRecord>) => Kind> export declare function sequence( F: Applicative ): (ta: ReadonlyRecord>) => HKT> /** * @category Witherable * @since 2.6.5 */ export declare const wither: PipeableWither1 /** * @category Witherable * @since 2.6.5 */ export declare const wilt: PipeableWilt1 /** * @since 2.5.0 */ export declare function partitionMapWithIndex( f: (key: K, a: A) => Either ): (fa: ReadonlyRecord) => Separated, ReadonlyRecord> /** * @since 2.5.0 */ export declare function partitionWithIndex( refinementWithIndex: RefinementWithIndex ): (fa: ReadonlyRecord) => Separated, ReadonlyRecord> export declare function partitionWithIndex( predicateWithIndex: PredicateWithIndex ): (fa: ReadonlyRecord) => Separated, ReadonlyRecord> /** * @category combinators * @since 2.5.0 */ export declare function filterMapWithIndex( f: (key: K, a: A) => Option ): (fa: ReadonlyRecord) => ReadonlyRecord /** * @since 2.5.0 */ export declare function filterWithIndex( refinementWithIndex: RefinementWithIndex ): (fa: ReadonlyRecord) => ReadonlyRecord export declare function filterWithIndex( predicateWithIndex: PredicateWithIndex ): (fa: ReadonlyRecord) => ReadonlyRecord /** * Create a record from a foldable collection of key/value pairs, using the * specified `Magma` to combine values for duplicate keys. * * @since 2.5.0 */ export declare function fromFoldable( M: Magma, F: Foldable3 ): (fka: Kind3) => ReadonlyRecord export declare function fromFoldable( M: Magma, F: Foldable2 ): (fka: Kind2) => ReadonlyRecord export declare function fromFoldable( M: Magma, F: Foldable1 ): (fka: Kind) => ReadonlyRecord export declare function fromFoldable( M: Magma, F: FoldableHKT ): (fka: HKT) => ReadonlyRecord /** * Create a record from a foldable collection using the specified functions to * * - map to key/value pairs * - combine values for duplicate keys. * * @example * import { getLastSemigroup } from 'fp-ts/Semigroup' * import { readonlyArray, zip } from 'fp-ts/ReadonlyArray' * import { identity } from 'fp-ts/function' * import { ReadonlyRecord, fromFoldableMap } from 'fp-ts/ReadonlyRecord' * * // like lodash `zipObject` or ramda `zipObj` * export const zipObject = (keys: ReadonlyArray, values: ReadonlyArray): ReadonlyRecord => * fromFoldableMap(getLastSemigroup(), readonlyArray)(zip(keys, values), identity) * * assert.deepStrictEqual(zipObject(['a', 'b'], [1, 2, 3]), { a: 1, b: 2 }) * * // build a record from a field * interface User { * id: string * name: string * } * * const users: ReadonlyArray = [ * { id: 'id1', name: 'name1' }, * { id: 'id2', name: 'name2' }, * { id: 'id1', name: 'name3' } * ] * * assert.deepStrictEqual(fromFoldableMap(getLastSemigroup(), readonlyArray)(users, user => [user.id, user]), { * id1: { id: 'id1', name: 'name3' }, * id2: { id: 'id2', name: 'name2' } * }) * * @since 2.5.0 */ export declare function fromFoldableMap( M: Magma, F: Foldable3 ): (fa: Kind3, f: (a: A) => readonly [K, B]) => ReadonlyRecord export declare function fromFoldableMap( M: Magma, F: Foldable2 ): (fa: Kind2, f: (a: A) => readonly [K, B]) => ReadonlyRecord export declare function fromFoldableMap( M: Magma, F: Foldable1 ): (fa: Kind, f: (a: A) => readonly [K, B]) => ReadonlyRecord export declare function fromFoldableMap( M: Magma, F: FoldableHKT ): (fa: HKT, f: (a: A) => readonly [K, B]) => ReadonlyRecord /** * @since 2.5.0 */ export declare function every(predicate: Predicate): (r: ReadonlyRecord) => boolean /** * @since 2.5.0 */ export declare function some(predicate: (a: A) => boolean): (r: ReadonlyRecord) => boolean /** * @since 2.5.0 */ export declare function elem( E: Eq ): { (a: A): (fa: ReadonlyRecord) => boolean (a: A, fa: ReadonlyRecord): boolean } /** * @category Filterable * @since 2.5.0 */ export declare const filter: { (refinement: Refinement): (fa: Readonly>) => Readonly> (predicate: Predicate): (fa: Readonly>) => Readonly> } /** * @category Filterable * @since 2.5.0 */ export declare const filterMap: ( f: (a: A) => Option ) => (fa: Readonly>) => Readonly> /** * @category Filterable * @since 2.5.0 */ export declare const partition: { (refinement: Refinement): ( fa: Readonly> ) => Separated>, Readonly>> (predicate: Predicate): ( fa: Readonly> ) => Separated>, Readonly>> } /** * @category Filterable * @since 2.5.0 */ export declare const partitionMap: ( f: (a: A) => Either ) => (fa: Readonly>) => Separated>, Readonly>> /** * @category Foldable * @since 2.5.0 */ export declare const reduce: (b: B, f: (b: B, a: A) => B) => (fa: Readonly>) => B /** * @category Foldable * @since 2.5.0 */ export declare const foldMap: (M: Monoid) => (f: (a: A) => M) => (fa: Readonly>) => M /** * @category Foldable * @since 2.5.0 */ export declare const reduceRight: (b: B, f: (a: A, b: B) => B) => (fa: Readonly>) => B /** * @category Compactable * @since 2.5.0 */ export declare const compact: (fa: Readonly>>) => Readonly> /** * @category Compactable * @since 2.5.0 */ export declare const separate: ( fa: Readonly>> ) => Separated>, Readonly>> /** * @category instances * @since 2.5.0 */ export declare const URI = 'ReadonlyRecord' /** * @category instances * @since 2.5.0 */ export declare type URI = typeof URI declare module './HKT' { interface URItoKind { readonly [URI]: ReadonlyRecord } } /** * @category instances * @since 2.7.0 */ export declare const Functor: Functor1 /** * @category instances * @since 2.7.0 */ export declare const FunctorWithIndex: FunctorWithIndex1 /** * @category instances * @since 2.7.0 */ export declare const Foldable: Foldable1 /** * @category instances * @since 2.7.0 */ export declare const FoldableWithIndex: FoldableWithIndex1 /** * @category instances * @since 2.7.0 */ export declare const Compactable: Compactable1 /** * @category instances * @since 2.7.0 */ export declare const Filterable: Filterable1 /** * @category instances * @since 2.7.0 */ export declare const FilterableWithIndex: FilterableWithIndex1 /** * @category instances * @since 2.7.0 */ export declare const Traversable: Traversable1 /** * @category instances * @since 2.7.0 */ export declare const TraversableWithIndex: TraversableWithIndex1 /** * @category instances * @since 2.7.0 */ export declare const Witherable: Witherable1 /** * @category instances * @since 2.5.0 */ export declare const readonlyRecord: FunctorWithIndex1 & FoldableWithIndex1 & FilterableWithIndex1 & TraversableWithIndex1 & Witherable1