版博士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.
 
 
 
 

107 líneas
2.9 KiB

  1. "use strict";
  2. /**
  3. * ```ts
  4. * interface Separated<E, A> {
  5. * readonly left: E
  6. * readonly right: A
  7. * }
  8. * ```
  9. *
  10. * Represents a result of separating a whole into two parts.
  11. *
  12. * @since 2.10.0
  13. */
  14. Object.defineProperty(exports, "__esModule", { value: true });
  15. exports.right = exports.left = exports.flap = exports.Functor = exports.Bifunctor = exports.URI = exports.bimap = exports.mapLeft = exports.map = exports.separated = void 0;
  16. var function_1 = require("./function");
  17. var Functor_1 = require("./Functor");
  18. // -------------------------------------------------------------------------------------
  19. // constructors
  20. // -------------------------------------------------------------------------------------
  21. /**
  22. * @category constructors
  23. * @since 2.10.0
  24. */
  25. var separated = function (left, right) { return ({ left: left, right: right }); };
  26. exports.separated = separated;
  27. var _map = function (fa, f) { return (0, function_1.pipe)(fa, (0, exports.map)(f)); };
  28. var _mapLeft = function (fa, f) { return (0, function_1.pipe)(fa, (0, exports.mapLeft)(f)); };
  29. var _bimap = function (fa, g, f) { return (0, function_1.pipe)(fa, (0, exports.bimap)(g, f)); };
  30. /**
  31. * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F<A>) => F<B>` whose argument and return types
  32. * use the type constructor `F` to represent some computational context.
  33. *
  34. * @category mapping
  35. * @since 2.10.0
  36. */
  37. var map = function (f) {
  38. return function (fa) {
  39. return (0, exports.separated)((0, exports.left)(fa), f((0, exports.right)(fa)));
  40. };
  41. };
  42. exports.map = map;
  43. /**
  44. * Map a function over the first type argument of a bifunctor.
  45. *
  46. * @category error handling
  47. * @since 2.10.0
  48. */
  49. var mapLeft = function (f) {
  50. return function (fa) {
  51. return (0, exports.separated)(f((0, exports.left)(fa)), (0, exports.right)(fa));
  52. };
  53. };
  54. exports.mapLeft = mapLeft;
  55. /**
  56. * Map a pair of functions over the two type arguments of the bifunctor.
  57. *
  58. * @category mapping
  59. * @since 2.10.0
  60. */
  61. var bimap = function (f, g) {
  62. return function (fa) {
  63. return (0, exports.separated)(f((0, exports.left)(fa)), g((0, exports.right)(fa)));
  64. };
  65. };
  66. exports.bimap = bimap;
  67. /**
  68. * @category type lambdas
  69. * @since 2.10.0
  70. */
  71. exports.URI = 'Separated';
  72. /**
  73. * @category instances
  74. * @since 2.10.0
  75. */
  76. exports.Bifunctor = {
  77. URI: exports.URI,
  78. mapLeft: _mapLeft,
  79. bimap: _bimap
  80. };
  81. /**
  82. * @category instances
  83. * @since 2.10.0
  84. */
  85. exports.Functor = {
  86. URI: exports.URI,
  87. map: _map
  88. };
  89. /**
  90. * @category mapping
  91. * @since 2.10.0
  92. */
  93. exports.flap = (0, Functor_1.flap)(exports.Functor);
  94. // -------------------------------------------------------------------------------------
  95. // utils
  96. // -------------------------------------------------------------------------------------
  97. /**
  98. * @since 2.10.0
  99. */
  100. var left = function (s) { return s.left; };
  101. exports.left = left;
  102. /**
  103. * @since 2.10.0
  104. */
  105. var right = function (s) { return s.right; };
  106. exports.right = right;