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

65 строки
2.4 KiB

  1. import { pipe } from './function';
  2. import { snd } from './ReadonlyTuple';
  3. export function of(F) {
  4. return function (a) { return function (s) { return F.of([a, s]); }; };
  5. }
  6. export function map(F) {
  7. return function (f) { return function (fa) { return function (s) { return F.map(fa(s), function (_a) {
  8. var a = _a[0], s1 = _a[1];
  9. return [f(a), s1];
  10. }); }; }; };
  11. }
  12. export function ap(M) {
  13. return function (fa) { return function (fab) { return function (s) { return M.chain(fab(s), function (_a) {
  14. var f = _a[0], s = _a[1];
  15. return M.map(fa(s), function (_a) {
  16. var a = _a[0], s = _a[1];
  17. return [f(a), s];
  18. });
  19. }); }; }; };
  20. }
  21. export function chain(M) {
  22. return function (f) { return function (ma) { return function (s) { return M.chain(ma(s), function (_a) {
  23. var a = _a[0], s1 = _a[1];
  24. return f(a)(s1);
  25. }); }; }; };
  26. }
  27. export function fromState(F) {
  28. return function (sa) { return function (s) { return F.of(sa(s)); }; };
  29. }
  30. export function fromF(F) {
  31. return function (ma) { return function (s) { return F.map(ma, function (a) { return [a, s]; }); }; };
  32. }
  33. export function evaluate(F) {
  34. return function (s) { return function (ma) { return F.map(ma(s), function (_a) {
  35. var a = _a[0];
  36. return a;
  37. }); }; };
  38. }
  39. export function execute(F) {
  40. return function (s) { return function (ma) { return F.map(ma(s), snd); }; };
  41. }
  42. /** @deprecated */
  43. /* istanbul ignore next */
  44. export function getStateM(M) {
  45. var _ap = ap(M);
  46. var _map = map(M);
  47. var _chain = chain(M);
  48. var _evaluate = evaluate(M);
  49. var _execute = execute(M);
  50. return {
  51. map: function (fa, f) { return pipe(fa, _map(f)); },
  52. ap: function (fab, fa) { return pipe(fab, _ap(fa)); },
  53. of: of(M),
  54. chain: function (ma, f) { return pipe(ma, _chain(f)); },
  55. get: function () { return function (s) { return M.of([s, s]); }; },
  56. put: function (s) { return function () { return M.of([undefined, s]); }; },
  57. modify: function (f) { return function (s) { return M.of([undefined, f(s)]); }; },
  58. gets: function (f) { return function (s) { return M.of([f(s), s]); }; },
  59. fromState: fromState(M),
  60. fromM: fromF(M),
  61. evalState: function (fa, s) { return pipe(fa, _evaluate(s)); },
  62. execState: function (fa, s) { return pipe(fa, _execute(s)); }
  63. };
  64. }