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

60 строки
2.3 KiB

  1. export function getWriterM(M) {
  2. var map = function (fa, f) {
  3. return function () {
  4. return M.map(fa(), function (_a) {
  5. var a = _a[0], w = _a[1];
  6. return [f(a), w];
  7. });
  8. };
  9. };
  10. return {
  11. map: map,
  12. evalWriter: function (fa) { return M.map(fa(), function (_a) {
  13. var a = _a[0];
  14. return a;
  15. }); },
  16. execWriter: function (fa) { return M.map(fa(), function (_a) {
  17. var _ = _a[0], w = _a[1];
  18. return w;
  19. }); },
  20. tell: function (w) { return function () { return M.of([undefined, w]); }; },
  21. listen: function (fa) { return function () { return M.map(fa(), function (_a) {
  22. var a = _a[0], w = _a[1];
  23. return [[a, w], w];
  24. }); }; },
  25. pass: function (fa) { return function () { return M.map(fa(), function (_a) {
  26. var _b = _a[0], a = _b[0], f = _b[1], w = _a[1];
  27. return [a, f(w)];
  28. }); }; },
  29. listens: function (fa, f) { return function () { return M.map(fa(), function (_a) {
  30. var a = _a[0], w = _a[1];
  31. return [[a, f(w)], w];
  32. }); }; },
  33. censor: function (fa, f) { return function () { return M.map(fa(), function (_a) {
  34. var a = _a[0], w = _a[1];
  35. return [a, f(w)];
  36. }); }; },
  37. getMonad: function (W) {
  38. return {
  39. _E: undefined,
  40. map: map,
  41. of: function (a) { return function () { return M.of([a, W.empty]); }; },
  42. ap: function (mab, ma) { return function () { return M.chain(mab(), function (_a) {
  43. var f = _a[0], w1 = _a[1];
  44. return M.map(ma(), function (_a) {
  45. var a = _a[0], w2 = _a[1];
  46. return [f(a), W.concat(w1, w2)];
  47. });
  48. }); }; },
  49. chain: function (ma, f) { return function () { return M.chain(ma(), function (_a) {
  50. var a = _a[0], w1 = _a[1];
  51. return M.map(f(a)(), function (_a) {
  52. var b = _a[0], w2 = _a[1];
  53. return [b, W.concat(w1, w2)];
  54. });
  55. }); }; }
  56. };
  57. }
  58. };
  59. }