import { type Semigroup } from "./Semigroup.js";
/**
 * Return a semigroup which works like `Object.assign`.
 *
 * @remarks
 * Added in 1.0.0
 * @remarks
 * Category: Instances
 * @remarks
 * Original License: MIT – Copyright (c) 2017-present Giulio Canti
 * @example
 *
 * ```typescript
 * import { getAssignSemigroup } from '@fp-tx/core/struct'
 *
 * interface Person {
 *   readonly name: string
 *   readonly age: number
 * }
 *
 * const S = getAssignSemigroup<Person>()
 * assert.deepStrictEqual(S.concat({ name: 'name', age: 23 }, { name: 'name', age: 24 }), { name: 'name', age: 24 })
 * ```
 *
 * @public
 */
export declare const getAssignSemigroup: <A extends object = never>() => Semigroup<A>;
/**
 * Creates a new object by recursively evolving a shallow copy of `a`, according to the `transformation` functions.
 *
 * @remarks
 * Added in 1.0.0
 * @remarks
 * Original License: MIT – Copyright (c) 2017-present Giulio Canti
 * @example
 *
 * ```typescript
 * import { pipe } from '@fp-tx/core/function'
 * import { evolve } from '@fp-tx/core/struct'
 *
 * assert.deepStrictEqual(
 *   pipe(
 *     { a: 'a', b: 1 },
 *     evolve({
 *       a: a => a.length,
 *       b: b => b * 2,
 *     }),
 *   ),
 *   { a: 1, b: 2 },
 * )
 * ```
 *
 * @public
 */
export declare const evolve: <A, F extends { [K in keyof A]: (a: A[K]) => unknown; }>(transformations: F) => (a: A) => { [K_1 in keyof F]: ReturnType<F[K_1]>; };
//# sourceMappingURL=struct.d.ts.map