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

175 строки
6.1 KiB

  1. "use strict";
  2. var __createBinding = (this && this.__createBinding) || (Object.create ? (function(o, m, k, k2) {
  3. if (k2 === undefined) k2 = k;
  4. var desc = Object.getOwnPropertyDescriptor(m, k);
  5. if (!desc || ("get" in desc ? !m.__esModule : desc.writable || desc.configurable)) {
  6. desc = { enumerable: true, get: function() { return m[k]; } };
  7. }
  8. Object.defineProperty(o, k2, desc);
  9. }) : (function(o, m, k, k2) {
  10. if (k2 === undefined) k2 = k;
  11. o[k2] = m[k];
  12. }));
  13. var __setModuleDefault = (this && this.__setModuleDefault) || (Object.create ? (function(o, v) {
  14. Object.defineProperty(o, "default", { enumerable: true, value: v });
  15. }) : function(o, v) {
  16. o["default"] = v;
  17. });
  18. var __importStar = (this && this.__importStar) || function (mod) {
  19. if (mod && mod.__esModule) return mod;
  20. var result = {};
  21. if (mod != null) for (var k in mod) if (k !== "default" && Object.prototype.hasOwnProperty.call(mod, k)) __createBinding(result, mod, k);
  22. __setModuleDefault(result, mod);
  23. return result;
  24. };
  25. Object.defineProperty(exports, "__esModule", { value: true });
  26. exports.sequenceS = exports.sequenceT = exports.getApplySemigroup = exports.apS = exports.apSecond = exports.apFirst = exports.ap = void 0;
  27. var function_1 = require("./function");
  28. var _ = __importStar(require("./internal"));
  29. function ap(F, G) {
  30. return function (fa) {
  31. return function (fab) {
  32. return F.ap(F.map(fab, function (gab) { return function (ga) { return G.ap(gab, ga); }; }), fa);
  33. };
  34. };
  35. }
  36. exports.ap = ap;
  37. function apFirst(A) {
  38. return function (second) { return function (first) {
  39. return A.ap(A.map(first, function (a) { return function () { return a; }; }), second);
  40. }; };
  41. }
  42. exports.apFirst = apFirst;
  43. function apSecond(A) {
  44. return function (second) {
  45. return function (first) {
  46. return A.ap(A.map(first, function () { return function (b) { return b; }; }), second);
  47. };
  48. };
  49. }
  50. exports.apSecond = apSecond;
  51. function apS(F) {
  52. return function (name, fb) {
  53. return function (fa) {
  54. return F.ap(F.map(fa, function (a) { return function (b) {
  55. var _a;
  56. return Object.assign({}, a, (_a = {}, _a[name] = b, _a));
  57. }; }), fb);
  58. };
  59. };
  60. }
  61. exports.apS = apS;
  62. function getApplySemigroup(F) {
  63. return function (S) { return ({
  64. concat: function (first, second) {
  65. return F.ap(F.map(first, function (x) { return function (y) { return S.concat(x, y); }; }), second);
  66. }
  67. }); };
  68. }
  69. exports.getApplySemigroup = getApplySemigroup;
  70. function curried(f, n, acc) {
  71. return function (x) {
  72. var combined = Array(acc.length + 1);
  73. for (var i = 0; i < acc.length; i++) {
  74. combined[i] = acc[i];
  75. }
  76. combined[acc.length] = x;
  77. return n === 0 ? f.apply(null, combined) : curried(f, n - 1, combined);
  78. };
  79. }
  80. var tupleConstructors = {
  81. 1: function (a) { return [a]; },
  82. 2: function (a) { return function (b) { return [a, b]; }; },
  83. 3: function (a) { return function (b) { return function (c) { return [a, b, c]; }; }; },
  84. 4: function (a) { return function (b) { return function (c) { return function (d) { return [a, b, c, d]; }; }; }; },
  85. 5: function (a) { return function (b) { return function (c) { return function (d) { return function (e) { return [a, b, c, d, e]; }; }; }; }; }
  86. };
  87. function getTupleConstructor(len) {
  88. if (!_.has.call(tupleConstructors, len)) {
  89. tupleConstructors[len] = curried(function_1.tuple, len - 1, []);
  90. }
  91. return tupleConstructors[len];
  92. }
  93. function sequenceT(F) {
  94. return function () {
  95. var args = [];
  96. for (var _i = 0; _i < arguments.length; _i++) {
  97. args[_i] = arguments[_i];
  98. }
  99. var len = args.length;
  100. var f = getTupleConstructor(len);
  101. var fas = F.map(args[0], f);
  102. for (var i = 1; i < len; i++) {
  103. fas = F.ap(fas, args[i]);
  104. }
  105. return fas;
  106. };
  107. }
  108. exports.sequenceT = sequenceT;
  109. function getRecordConstructor(keys) {
  110. var len = keys.length;
  111. switch (len) {
  112. case 1:
  113. return function (a) {
  114. var _a;
  115. return (_a = {}, _a[keys[0]] = a, _a);
  116. };
  117. case 2:
  118. return function (a) { return function (b) {
  119. var _a;
  120. return (_a = {}, _a[keys[0]] = a, _a[keys[1]] = b, _a);
  121. }; };
  122. case 3:
  123. return function (a) { return function (b) { return function (c) {
  124. var _a;
  125. return (_a = {}, _a[keys[0]] = a, _a[keys[1]] = b, _a[keys[2]] = c, _a);
  126. }; }; };
  127. case 4:
  128. return function (a) { return function (b) { return function (c) { return function (d) {
  129. var _a;
  130. return (_a = {},
  131. _a[keys[0]] = a,
  132. _a[keys[1]] = b,
  133. _a[keys[2]] = c,
  134. _a[keys[3]] = d,
  135. _a);
  136. }; }; }; };
  137. case 5:
  138. return function (a) { return function (b) { return function (c) { return function (d) { return function (e) {
  139. var _a;
  140. return (_a = {},
  141. _a[keys[0]] = a,
  142. _a[keys[1]] = b,
  143. _a[keys[2]] = c,
  144. _a[keys[3]] = d,
  145. _a[keys[4]] = e,
  146. _a);
  147. }; }; }; }; };
  148. default:
  149. return curried(function () {
  150. var args = [];
  151. for (var _i = 0; _i < arguments.length; _i++) {
  152. args[_i] = arguments[_i];
  153. }
  154. var r = {};
  155. for (var i = 0; i < len; i++) {
  156. r[keys[i]] = args[i];
  157. }
  158. return r;
  159. }, len - 1, []);
  160. }
  161. }
  162. function sequenceS(F) {
  163. return function (r) {
  164. var keys = Object.keys(r);
  165. var len = keys.length;
  166. var f = getRecordConstructor(keys);
  167. var fr = F.map(r[keys[0]], f);
  168. for (var i = 1; i < len; i++) {
  169. fr = F.ap(fr, r[keys[i]]);
  170. }
  171. return fr;
  172. };
  173. }
  174. exports.sequenceS = sequenceS;