版博士V2.0程序
No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.
 
 
 
 

77 líneas
2.5 KiB

  1. /**
  2. * The `Ring` class is for types that support addition, multiplication, and subtraction operations.
  3. *
  4. * Instances must satisfy the following law in addition to the `Semiring` laws:
  5. *
  6. * - Additive inverse: `a - a <-> (zero - a) + a <-> zero`
  7. *
  8. * Adapted from https://github.com/purescript/purescript-prelude/blob/master/src/Data/Ring.purs
  9. *
  10. * @since 2.0.0
  11. */
  12. import { getRing } from './function';
  13. // -------------------------------------------------------------------------------------
  14. // combinators
  15. // -------------------------------------------------------------------------------------
  16. /**
  17. * Given a tuple of `Ring`s returns a `Ring` for the tuple
  18. *
  19. * @example
  20. * import { tuple } from 'fp-ts/Ring'
  21. * import * as N from 'fp-ts/number'
  22. *
  23. * const R = tuple(N.Field, N.Field, N.Field)
  24. * assert.deepStrictEqual(R.add([1, 2, 3], [4, 5, 6]), [5, 7, 9])
  25. * assert.deepStrictEqual(R.mul([1, 2, 3], [4, 5, 6]), [4, 10, 18])
  26. * assert.deepStrictEqual(R.one, [1, 1, 1])
  27. * assert.deepStrictEqual(R.sub([1, 2, 3], [4, 5, 6]), [-3, -3, -3])
  28. * assert.deepStrictEqual(R.zero, [0, 0, 0])
  29. *
  30. * @since 2.10.0
  31. */
  32. export var tuple = function () {
  33. var rings = [];
  34. for (var _i = 0; _i < arguments.length; _i++) {
  35. rings[_i] = arguments[_i];
  36. }
  37. return ({
  38. add: function (x, y) { return rings.map(function (R, i) { return R.add(x[i], y[i]); }); },
  39. zero: rings.map(function (R) { return R.zero; }),
  40. mul: function (x, y) { return rings.map(function (R, i) { return R.mul(x[i], y[i]); }); },
  41. one: rings.map(function (R) { return R.one; }),
  42. sub: function (x, y) { return rings.map(function (R, i) { return R.sub(x[i], y[i]); }); }
  43. });
  44. };
  45. // -------------------------------------------------------------------------------------
  46. // utils
  47. // -------------------------------------------------------------------------------------
  48. /**
  49. * `negate x` can be used as a shorthand for `zero - x`
  50. *
  51. * @since 2.0.0
  52. */
  53. export var negate = function (R) {
  54. return function (a) {
  55. return R.sub(R.zero, a);
  56. };
  57. };
  58. // -------------------------------------------------------------------------------------
  59. // deprecated
  60. // -------------------------------------------------------------------------------------
  61. /**
  62. * Use [`tuple`](#tuple) instead.
  63. *
  64. * @category zone of death
  65. * @since 2.0.0
  66. * @deprecated
  67. */
  68. export var getTupleRing = tuple;
  69. /**
  70. * Use [`getRing`](./function.ts.html#getring) instead.
  71. *
  72. * @category zone of death
  73. * @since 2.0.0
  74. * @deprecated
  75. */
  76. export var getFunctionRing = getRing;