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

92 строки
3.0 KiB

  1. /**
  2. * @since 2.4.0
  3. */
  4. import { ap as ap_ } from './Apply';
  5. import { flow, pipe } from './function';
  6. import { map as map_ } from './Functor';
  7. import * as T from './These';
  8. export function right(F) {
  9. return flow(T.right, F.of);
  10. }
  11. export function left(F) {
  12. return flow(T.left, F.of);
  13. }
  14. export function both(F) {
  15. return flow(T.both, F.of);
  16. }
  17. export function rightF(F) {
  18. return function (fa) { return F.map(fa, T.right); };
  19. }
  20. export function leftF(F) {
  21. return function (fe) { return F.map(fe, T.left); };
  22. }
  23. export function map(F) {
  24. return map_(F, T.Functor);
  25. }
  26. export function ap(F, S) {
  27. return ap_(F, T.getApply(S));
  28. }
  29. export function chain(M, S) {
  30. var _left = left(M);
  31. return function (f) { return function (ma) {
  32. return M.chain(ma, T.match(_left, f, function (e1, a) {
  33. return M.map(f(a), T.match(function (e2) { return T.left(S.concat(e1, e2)); }, function (b) { return T.both(e1, b); }, function (e2, b) { return T.both(S.concat(e1, e2), b); }));
  34. }));
  35. }; };
  36. }
  37. export function bimap(F) {
  38. return function (f, g) { return function (fea) { return F.map(fea, T.bimap(f, g)); }; };
  39. }
  40. export function mapLeft(F) {
  41. return function (f) { return function (fea) { return F.map(fea, T.mapLeft(f)); }; };
  42. }
  43. export function match(F) {
  44. return function (onLeft, onRight, onBoth) { return function (ma) { return F.map(ma, T.match(onLeft, onRight, onBoth)); }; };
  45. }
  46. export function matchE(M) {
  47. return function (onLeft, onRight, onBoth) { return function (ma) { return M.chain(ma, T.match(onLeft, onRight, onBoth)); }; };
  48. }
  49. export function swap(F) {
  50. return function (ma) { return F.map(ma, T.swap); };
  51. }
  52. export function toTuple2(F) {
  53. return function (e, a) { return function (fa) { return F.map(fa, T.toTuple2(e, a)); }; };
  54. }
  55. /** @deprecated */
  56. /* istanbul ignore next */
  57. export function getTheseM(M) {
  58. var _map = map(M);
  59. var _bimap = bimap(M);
  60. var _mapLeft = mapLeft(M);
  61. var _fold = matchE(M);
  62. var _toTuple2 = toTuple2(M);
  63. var of = right(M);
  64. var mapT = function (fa, f) { return pipe(fa, _map(f)); };
  65. return {
  66. map: mapT,
  67. bimap: function (fea, f, g) { return pipe(fea, _bimap(f, g)); },
  68. mapLeft: function (fea, f) { return pipe(fea, _mapLeft(f)); },
  69. fold: function (fa, onLeft, onRight, onBoth) { return pipe(fa, _fold(onLeft, onRight, onBoth)); },
  70. swap: swap(M),
  71. rightM: rightF(M),
  72. leftM: leftF(M),
  73. left: left(M),
  74. right: right(M),
  75. both: both(M),
  76. toTuple: function (fa, e, a) {
  77. return pipe(fa, _toTuple2(function () { return e; }, function () { return a; }));
  78. },
  79. getMonad: function (S) {
  80. var _ap = ap(M, S);
  81. var _chain = chain(M, S);
  82. return {
  83. _E: undefined,
  84. map: mapT,
  85. of: of,
  86. ap: function (fab, fa) { return pipe(fab, _ap(fa)); },
  87. chain: function (ma, f) { return pipe(ma, _chain(f)); }
  88. };
  89. }
  90. };
  91. }