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

Traversable.js 1.3 KiB

1234567891011121314151617181920212223242526272829303132333435363738
  1. import { getFoldableComposition } from './Foldable';
  2. import { pipe } from './function';
  3. import { getFunctorComposition } from './Functor';
  4. export function traverse(T, G) {
  5. return function (F) {
  6. var traverseT = T.traverse(F);
  7. var traverseG = G.traverse(F);
  8. return function (f) { return function (fga) { return traverseT(fga, function (ga) { return traverseG(ga, f); }); }; };
  9. };
  10. }
  11. export function sequence(T, G) {
  12. return function (F) {
  13. var sequenceT = T.sequence(F);
  14. var sequenceG = G.sequence(F);
  15. return function (fgha) { return sequenceT(T.map(fgha, sequenceG)); };
  16. };
  17. }
  18. /** @deprecated */
  19. export function getTraversableComposition(F, G) {
  20. var map = getFunctorComposition(F, G).map;
  21. var FC = getFoldableComposition(F, G);
  22. var _traverse = traverse(F, G);
  23. var _sequence = sequence(F, G);
  24. return {
  25. map: map,
  26. reduce: FC.reduce,
  27. foldMap: FC.foldMap,
  28. reduceRight: FC.reduceRight,
  29. traverse: function (H) {
  30. var traverseH = _traverse(H);
  31. return function (fga, f) { return pipe(fga, traverseH(f)); };
  32. },
  33. sequence: function (H) {
  34. var sequenceH = _sequence(H);
  35. return function (fgha) { return pipe(fgha, sequenceH); };
  36. }
  37. };
  38. }