版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

62 строки
1.6 KiB

  1. /**
  2. * @since 2.10.0
  3. */
  4. import * as _ from './internal';
  5. // -------------------------------------------------------------------------------------
  6. // instances
  7. // -------------------------------------------------------------------------------------
  8. /**
  9. * Return a semigroup which works like `Object.assign`.
  10. *
  11. * @example
  12. * import { getAssignSemigroup } from 'fp-ts/struct'
  13. *
  14. * interface Person {
  15. * readonly name: string
  16. * readonly age: number
  17. * }
  18. *
  19. * const S = getAssignSemigroup<Person>()
  20. * assert.deepStrictEqual(S.concat({ name: 'name', age: 23 }, { name: 'name', age: 24 }), { name: 'name', age: 24 })
  21. *
  22. * @category instances
  23. * @since 2.10.0
  24. */
  25. export var getAssignSemigroup = function () { return ({
  26. concat: function (first, second) { return Object.assign({}, first, second); }
  27. }); };
  28. // -------------------------------------------------------------------------------------
  29. // utils
  30. // -------------------------------------------------------------------------------------
  31. /**
  32. * Creates a new object by recursively evolving a shallow copy of `a`, according to the `transformation` functions.
  33. *
  34. * @example
  35. * import { pipe } from 'fp-ts/function'
  36. * import { evolve } from 'fp-ts/struct'
  37. *
  38. * assert.deepStrictEqual(
  39. * pipe(
  40. * { a: 'a', b: 1 },
  41. * evolve({
  42. * a: (a) => a.length,
  43. * b: (b) => b * 2
  44. * })
  45. * ),
  46. * { a: 1, b: 2 }
  47. * )
  48. *
  49. * @since 2.11.0
  50. */
  51. export var evolve = function (transformations) {
  52. return function (a) {
  53. var out = {};
  54. for (var k in a) {
  55. if (_.has.call(a, k)) {
  56. out[k] = transformations[k](a[k]);
  57. }
  58. }
  59. return out;
  60. };
  61. };