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

65 строки
2.4 KiB

  1. import { constant, pipe } from './function';
  2. export function reduce(F, G) {
  3. return function (b, f) { return function (fga) { return F.reduce(fga, b, function (b, ga) { return G.reduce(ga, b, f); }); }; };
  4. }
  5. export function foldMap(F, G) {
  6. return function (M) {
  7. var foldMapF = F.foldMap(M);
  8. var foldMapG = G.foldMap(M);
  9. return function (f) { return function (fga) { return foldMapF(fga, function (ga) { return foldMapG(ga, f); }); }; };
  10. };
  11. }
  12. export function reduceRight(F, G) {
  13. return function (b, f) { return function (fga) { return F.reduceRight(fga, b, function (ga, b) { return G.reduceRight(ga, b, f); }); }; };
  14. }
  15. export function reduceM(M, F) {
  16. return function (b, f) { return function (fa) { return F.reduce(fa, M.of(b), function (mb, a) { return M.chain(mb, function (b) { return f(b, a); }); }); }; };
  17. }
  18. export function intercalate(M, F) {
  19. return function (middle, fm) {
  20. var go = function (_a, x) {
  21. var init = _a.init, acc = _a.acc;
  22. return init ? { init: false, acc: x } : { init: false, acc: M.concat(M.concat(acc, middle), x) };
  23. };
  24. return F.reduce(fm, { init: true, acc: M.empty }, go).acc;
  25. };
  26. }
  27. export function toReadonlyArray(F) {
  28. return function (fa) {
  29. return F.reduce(fa, [], function (acc, a) {
  30. acc.push(a);
  31. return acc;
  32. });
  33. };
  34. }
  35. export function traverse_(M, F) {
  36. var applyFirst = function (mu, mb) { return M.ap(M.map(mu, constant), mb); };
  37. var mu = M.of(undefined);
  38. return function (fa, f) { return F.reduce(fa, mu, function (mu, a) { return applyFirst(mu, f(a)); }); };
  39. }
  40. export function foldM(M, F) {
  41. return function (fa, b, f) { return F.reduce(fa, M.of(b), function (mb, a) { return M.chain(mb, function (b) { return f(b, a); }); }); };
  42. }
  43. /**
  44. * Use [`toReadonlyArray`](#toreadonlyarray) instead
  45. *
  46. * @category zone of death
  47. * @since 2.8.0
  48. * @deprecated
  49. */
  50. export var toArray = toReadonlyArray;
  51. /** @deprecated */
  52. export function getFoldableComposition(F, G) {
  53. var _reduce = reduce(F, G);
  54. var _foldMap = foldMap(F, G);
  55. var _reduceRight = reduceRight(F, G);
  56. return {
  57. reduce: function (fga, b, f) { return pipe(fga, _reduce(b, f)); },
  58. foldMap: function (M) {
  59. var foldMapM = _foldMap(M);
  60. return function (fga, f) { return pipe(fga, foldMapM(f)); };
  61. },
  62. reduceRight: function (fga, b, f) { return pipe(fga, _reduceRight(b, f)); }
  63. };
  64. }