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

1 год назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348
  1. "use strict";
  2. Object.defineProperty(exports, "__esModule", { value: true });
  3. exports.getEndomorphismMonoid = exports.not = exports.SK = exports.hole = exports.pipe = exports.untupled = exports.tupled = exports.absurd = exports.decrement = exports.increment = exports.tuple = exports.flow = exports.flip = exports.constVoid = exports.constUndefined = exports.constNull = exports.constFalse = exports.constTrue = exports.constant = exports.unsafeCoerce = exports.identity = exports.apply = exports.getRing = exports.getSemiring = exports.getMonoid = exports.getSemigroup = exports.getBooleanAlgebra = void 0;
  4. // -------------------------------------------------------------------------------------
  5. // instances
  6. // -------------------------------------------------------------------------------------
  7. /**
  8. * @category instances
  9. * @since 2.10.0
  10. */
  11. var getBooleanAlgebra = function (B) {
  12. return function () { return ({
  13. meet: function (x, y) { return function (a) { return B.meet(x(a), y(a)); }; },
  14. join: function (x, y) { return function (a) { return B.join(x(a), y(a)); }; },
  15. zero: function () { return B.zero; },
  16. one: function () { return B.one; },
  17. implies: function (x, y) { return function (a) { return B.implies(x(a), y(a)); }; },
  18. not: function (x) { return function (a) { return B.not(x(a)); }; }
  19. }); };
  20. };
  21. exports.getBooleanAlgebra = getBooleanAlgebra;
  22. /**
  23. * Unary functions form a semigroup as long as you can provide a semigroup for the codomain.
  24. *
  25. * @example
  26. * import { Predicate, getSemigroup } from 'fp-ts/function'
  27. * import * as B from 'fp-ts/boolean'
  28. *
  29. * const f: Predicate<number> = (n) => n <= 2
  30. * const g: Predicate<number> = (n) => n >= 0
  31. *
  32. * const S1 = getSemigroup(B.SemigroupAll)<number>()
  33. *
  34. * assert.deepStrictEqual(S1.concat(f, g)(1), true)
  35. * assert.deepStrictEqual(S1.concat(f, g)(3), false)
  36. *
  37. * const S2 = getSemigroup(B.SemigroupAny)<number>()
  38. *
  39. * assert.deepStrictEqual(S2.concat(f, g)(1), true)
  40. * assert.deepStrictEqual(S2.concat(f, g)(3), true)
  41. *
  42. * @category instances
  43. * @since 2.10.0
  44. */
  45. var getSemigroup = function (S) {
  46. return function () { return ({
  47. concat: function (f, g) { return function (a) { return S.concat(f(a), g(a)); }; }
  48. }); };
  49. };
  50. exports.getSemigroup = getSemigroup;
  51. /**
  52. * Unary functions form a monoid as long as you can provide a monoid for the codomain.
  53. *
  54. * @example
  55. * import { Predicate } from 'fp-ts/Predicate'
  56. * import { getMonoid } from 'fp-ts/function'
  57. * import * as B from 'fp-ts/boolean'
  58. *
  59. * const f: Predicate<number> = (n) => n <= 2
  60. * const g: Predicate<number> = (n) => n >= 0
  61. *
  62. * const M1 = getMonoid(B.MonoidAll)<number>()
  63. *
  64. * assert.deepStrictEqual(M1.concat(f, g)(1), true)
  65. * assert.deepStrictEqual(M1.concat(f, g)(3), false)
  66. *
  67. * const M2 = getMonoid(B.MonoidAny)<number>()
  68. *
  69. * assert.deepStrictEqual(M2.concat(f, g)(1), true)
  70. * assert.deepStrictEqual(M2.concat(f, g)(3), true)
  71. *
  72. * @category instances
  73. * @since 2.10.0
  74. */
  75. var getMonoid = function (M) {
  76. var getSemigroupM = (0, exports.getSemigroup)(M);
  77. return function () { return ({
  78. concat: getSemigroupM().concat,
  79. empty: function () { return M.empty; }
  80. }); };
  81. };
  82. exports.getMonoid = getMonoid;
  83. /**
  84. * @category instances
  85. * @since 2.10.0
  86. */
  87. var getSemiring = function (S) { return ({
  88. add: function (f, g) { return function (x) { return S.add(f(x), g(x)); }; },
  89. zero: function () { return S.zero; },
  90. mul: function (f, g) { return function (x) { return S.mul(f(x), g(x)); }; },
  91. one: function () { return S.one; }
  92. }); };
  93. exports.getSemiring = getSemiring;
  94. /**
  95. * @category instances
  96. * @since 2.10.0
  97. */
  98. var getRing = function (R) {
  99. var S = (0, exports.getSemiring)(R);
  100. return {
  101. add: S.add,
  102. mul: S.mul,
  103. one: S.one,
  104. zero: S.zero,
  105. sub: function (f, g) { return function (x) { return R.sub(f(x), g(x)); }; }
  106. };
  107. };
  108. exports.getRing = getRing;
  109. // -------------------------------------------------------------------------------------
  110. // utils
  111. // -------------------------------------------------------------------------------------
  112. /**
  113. * @since 2.11.0
  114. */
  115. var apply = function (a) {
  116. return function (f) {
  117. return f(a);
  118. };
  119. };
  120. exports.apply = apply;
  121. /**
  122. * @since 2.0.0
  123. */
  124. function identity(a) {
  125. return a;
  126. }
  127. exports.identity = identity;
  128. /**
  129. * @since 2.0.0
  130. */
  131. exports.unsafeCoerce = identity;
  132. /**
  133. * @since 2.0.0
  134. */
  135. function constant(a) {
  136. return function () { return a; };
  137. }
  138. exports.constant = constant;
  139. /**
  140. * A thunk that returns always `true`.
  141. *
  142. * @since 2.0.0
  143. */
  144. exports.constTrue = constant(true);
  145. /**
  146. * A thunk that returns always `false`.
  147. *
  148. * @since 2.0.0
  149. */
  150. exports.constFalse = constant(false);
  151. /**
  152. * A thunk that returns always `null`.
  153. *
  154. * @since 2.0.0
  155. */
  156. exports.constNull = constant(null);
  157. /**
  158. * A thunk that returns always `undefined`.
  159. *
  160. * @since 2.0.0
  161. */
  162. exports.constUndefined = constant(undefined);
  163. /**
  164. * A thunk that returns always `void`.
  165. *
  166. * @since 2.0.0
  167. */
  168. exports.constVoid = exports.constUndefined;
  169. function flip(f) {
  170. return function () {
  171. var args = [];
  172. for (var _i = 0; _i < arguments.length; _i++) {
  173. args[_i] = arguments[_i];
  174. }
  175. if (args.length > 1) {
  176. return f(args[1], args[0]);
  177. }
  178. return function (a) { return f(a)(args[0]); };
  179. };
  180. }
  181. exports.flip = flip;
  182. function flow(ab, bc, cd, de, ef, fg, gh, hi, ij) {
  183. switch (arguments.length) {
  184. case 1:
  185. return ab;
  186. case 2:
  187. return function () {
  188. return bc(ab.apply(this, arguments));
  189. };
  190. case 3:
  191. return function () {
  192. return cd(bc(ab.apply(this, arguments)));
  193. };
  194. case 4:
  195. return function () {
  196. return de(cd(bc(ab.apply(this, arguments))));
  197. };
  198. case 5:
  199. return function () {
  200. return ef(de(cd(bc(ab.apply(this, arguments)))));
  201. };
  202. case 6:
  203. return function () {
  204. return fg(ef(de(cd(bc(ab.apply(this, arguments))))));
  205. };
  206. case 7:
  207. return function () {
  208. return gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))));
  209. };
  210. case 8:
  211. return function () {
  212. return hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments))))))));
  213. };
  214. case 9:
  215. return function () {
  216. return ij(hi(gh(fg(ef(de(cd(bc(ab.apply(this, arguments)))))))));
  217. };
  218. }
  219. return;
  220. }
  221. exports.flow = flow;
  222. /**
  223. * @since 2.0.0
  224. */
  225. function tuple() {
  226. var t = [];
  227. for (var _i = 0; _i < arguments.length; _i++) {
  228. t[_i] = arguments[_i];
  229. }
  230. return t;
  231. }
  232. exports.tuple = tuple;
  233. /**
  234. * @since 2.0.0
  235. */
  236. function increment(n) {
  237. return n + 1;
  238. }
  239. exports.increment = increment;
  240. /**
  241. * @since 2.0.0
  242. */
  243. function decrement(n) {
  244. return n - 1;
  245. }
  246. exports.decrement = decrement;
  247. /**
  248. * @since 2.0.0
  249. */
  250. function absurd(_) {
  251. throw new Error('Called `absurd` function which should be uncallable');
  252. }
  253. exports.absurd = absurd;
  254. /**
  255. * Creates a tupled version of this function: instead of `n` arguments, it accepts a single tuple argument.
  256. *
  257. * @example
  258. * import { tupled } from 'fp-ts/function'
  259. *
  260. * const add = tupled((x: number, y: number): number => x + y)
  261. *
  262. * assert.strictEqual(add([1, 2]), 3)
  263. *
  264. * @since 2.4.0
  265. */
  266. function tupled(f) {
  267. return function (a) { return f.apply(void 0, a); };
  268. }
  269. exports.tupled = tupled;
  270. /**
  271. * Inverse function of `tupled`
  272. *
  273. * @since 2.4.0
  274. */
  275. function untupled(f) {
  276. return function () {
  277. var a = [];
  278. for (var _i = 0; _i < arguments.length; _i++) {
  279. a[_i] = arguments[_i];
  280. }
  281. return f(a);
  282. };
  283. }
  284. exports.untupled = untupled;
  285. function pipe(a, ab, bc, cd, de, ef, fg, gh, hi) {
  286. switch (arguments.length) {
  287. case 1:
  288. return a;
  289. case 2:
  290. return ab(a);
  291. case 3:
  292. return bc(ab(a));
  293. case 4:
  294. return cd(bc(ab(a)));
  295. case 5:
  296. return de(cd(bc(ab(a))));
  297. case 6:
  298. return ef(de(cd(bc(ab(a)))));
  299. case 7:
  300. return fg(ef(de(cd(bc(ab(a))))));
  301. case 8:
  302. return gh(fg(ef(de(cd(bc(ab(a)))))));
  303. case 9:
  304. return hi(gh(fg(ef(de(cd(bc(ab(a))))))));
  305. default: {
  306. var ret = arguments[0];
  307. for (var i = 1; i < arguments.length; i++) {
  308. ret = arguments[i](ret);
  309. }
  310. return ret;
  311. }
  312. }
  313. }
  314. exports.pipe = pipe;
  315. /**
  316. * Type hole simulation
  317. *
  318. * @since 2.7.0
  319. */
  320. exports.hole = absurd;
  321. /**
  322. * @since 2.11.0
  323. */
  324. var SK = function (_, b) { return b; };
  325. exports.SK = SK;
  326. /**
  327. * Use `Predicate` module instead.
  328. *
  329. * @category zone of death
  330. * @since 2.0.0
  331. * @deprecated
  332. */
  333. function not(predicate) {
  334. return function (a) { return !predicate(a); };
  335. }
  336. exports.not = not;
  337. /**
  338. * Use `Endomorphism` module instead.
  339. *
  340. * @category zone of death
  341. * @since 2.10.0
  342. * @deprecated
  343. */
  344. var getEndomorphismMonoid = function () { return ({
  345. concat: function (first, second) { return flow(first, second); },
  346. empty: identity
  347. }); };
  348. exports.getEndomorphismMonoid = getEndomorphismMonoid;