版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

103 lines
2.6 KiB

  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.traced = exports.flap = exports.Functor = exports.URI = exports.map = exports.getComonad = exports.censor = exports.listens = exports.listen = exports.tracks = void 0;
  4. var Functor_1 = require("./Functor");
  5. var function_1 = require("./function");
  6. // TODO: curry in v3
  7. /**
  8. * Extracts a value at a relative position which depends on the current value.
  9. *
  10. * @since 2.0.0
  11. */
  12. function tracks(M, f) {
  13. return function (wa) { return wa(f(wa(M.empty))); };
  14. }
  15. exports.tracks = tracks;
  16. /**
  17. * Get the current position
  18. *
  19. * @since 2.0.0
  20. */
  21. function listen(wa) {
  22. return function (e) { return [wa(e), e]; };
  23. }
  24. exports.listen = listen;
  25. /**
  26. * Get a value which depends on the current position
  27. *
  28. * @since 2.0.0
  29. */
  30. function listens(f) {
  31. return function (wa) { return function (e) { return [wa(e), f(e)]; }; };
  32. }
  33. exports.listens = listens;
  34. /**
  35. * Apply a function to the current position
  36. *
  37. * @since 2.0.0
  38. */
  39. function censor(f) {
  40. return function (wa) { return function (e) { return wa(f(e)); }; };
  41. }
  42. exports.censor = censor;
  43. /**
  44. * @category instances
  45. * @since 2.0.0
  46. */
  47. function getComonad(monoid) {
  48. function extend(wa, f) {
  49. return function (p1) { return f(function (p2) { return wa(monoid.concat(p1, p2)); }); };
  50. }
  51. function extract(wa) {
  52. return wa(monoid.empty);
  53. }
  54. return {
  55. URI: exports.URI,
  56. _E: undefined,
  57. map: _map,
  58. extend: extend,
  59. extract: extract
  60. };
  61. }
  62. exports.getComonad = getComonad;
  63. /* istanbul ignore next */
  64. var _map = function (fa, f) { return (0, function_1.pipe)(fa, (0, exports.map)(f)); };
  65. /**
  66. * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F<A>) => F<B>` whose argument and return types
  67. * use the type constructor `F` to represent some computational context.
  68. *
  69. * @category mapping
  70. * @since 2.0.0
  71. */
  72. var map = function (f) { return function (fa) { return function (p) { return f(fa(p)); }; }; };
  73. exports.map = map;
  74. /**
  75. * @category type lambdas
  76. * @since 2.0.0
  77. */
  78. exports.URI = 'Traced';
  79. /**
  80. * @category instances
  81. * @since 2.7.0
  82. */
  83. exports.Functor = {
  84. URI: exports.URI,
  85. map: _map
  86. };
  87. /**
  88. * @category mapping
  89. * @since 2.10.0
  90. */
  91. exports.flap = (0, Functor_1.flap)(exports.Functor);
  92. // -------------------------------------------------------------------------------------
  93. // deprecated
  94. // -------------------------------------------------------------------------------------
  95. /**
  96. * Use [`Functor`](#functor) instead.
  97. *
  98. * @category zone of death
  99. * @since 2.0.0
  100. * @deprecated
  101. */
  102. exports.traced = exports.Functor;