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

624 строки
15 KiB

  1. /**
  2. * @since 2.3.0
  3. */
  4. import { getApplicativeMonoid } from './Applicative';
  5. import { apFirst as apFirst_, apS as apS_, apSecond as apSecond_, getApplySemigroup as getApplySemigroup_ } from './Apply';
  6. import { bind as bind_, chainFirst as chainFirst_ } from './Chain';
  7. import { chainFirstIOK as chainFirstIOK_, chainIOK as chainIOK_, fromIOK as fromIOK_ } from './FromIO';
  8. import { ask as ask_, asks as asks_, chainFirstReaderK as chainFirstReaderK_, chainReaderK as chainReaderK_, fromReaderK as fromReaderK_ } from './FromReader';
  9. import { chainFirstTaskK as chainFirstTaskK_, chainTaskK as chainTaskK_, fromTaskK as fromTaskK_ } from './FromTask';
  10. import { flow, identity, pipe, SK } from './function';
  11. import { let as let__, bindTo as bindTo_, flap as flap_ } from './Functor';
  12. import * as _ from './internal';
  13. import * as R from './Reader';
  14. import * as RT from './ReaderT';
  15. import * as T from './Task';
  16. // -------------------------------------------------------------------------------------
  17. // conversions
  18. // -------------------------------------------------------------------------------------
  19. /**
  20. * @category conversions
  21. * @since 2.3.0
  22. */
  23. export var fromReader = /*#__PURE__*/ RT.fromReader(T.Pointed);
  24. /**
  25. * @category conversions
  26. * @since 2.3.0
  27. */
  28. export var fromTask = /*#__PURE__*/ R.of;
  29. /**
  30. * @category conversions
  31. * @since 2.3.0
  32. */
  33. export var fromIO = /*#__PURE__*/ flow(T.fromIO, fromTask);
  34. /**
  35. * @category conversions
  36. * @since 2.13.0
  37. */
  38. export var fromReaderIO = R.map(T.fromIO);
  39. // -------------------------------------------------------------------------------------
  40. // combinators
  41. // -------------------------------------------------------------------------------------
  42. /**
  43. * Changes the value of the local context during the execution of the action `ma` (similar to `Contravariant`'s
  44. * `contramap`).
  45. *
  46. * @since 2.3.0
  47. */
  48. export var local = R.local;
  49. /**
  50. * Less strict version of [`asksReaderTask`](#asksreadertask).
  51. *
  52. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  53. *
  54. * @category constructors
  55. * @since 2.11.0
  56. */
  57. export var asksReaderTaskW = R.asksReaderW;
  58. /**
  59. * Effectfully accesses the environment.
  60. *
  61. * @category constructors
  62. * @since 2.11.0
  63. */
  64. export var asksReaderTask = asksReaderTaskW;
  65. var _map = function (fa, f) { return pipe(fa, map(f)); };
  66. var _apPar = function (fab, fa) { return pipe(fab, ap(fa)); };
  67. var _apSeq = function (fab, fa) {
  68. return pipe(fab, chain(function (f) { return pipe(fa, map(f)); }));
  69. };
  70. var _chain = function (ma, f) { return pipe(ma, chain(f)); };
  71. /**
  72. * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F<A>) => F<B>` whose argument and return types
  73. * use the type constructor `F` to represent some computational context.
  74. *
  75. * @category mapping
  76. * @since 2.3.0
  77. */
  78. export var map = /*#__PURE__*/ RT.map(T.Functor);
  79. /**
  80. * @since 2.3.0
  81. */
  82. export var ap =
  83. /*#__PURE__*/ RT.ap(T.ApplyPar);
  84. /**
  85. * Less strict version of [`ap`](#ap).
  86. *
  87. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  88. *
  89. * @since 2.8.0
  90. */
  91. export var apW = ap;
  92. /**
  93. * @category constructors
  94. * @since 2.3.0
  95. */
  96. export var of = /*#__PURE__*/ RT.of(T.Pointed);
  97. /**
  98. * Composes computations in sequence, using the return value of one computation to determine the next computation.
  99. *
  100. * @category sequencing
  101. * @since 2.3.0
  102. */
  103. export var chain =
  104. /*#__PURE__*/ RT.chain(T.Monad);
  105. /**
  106. * Less strict version of [`chain`](#chain).
  107. *
  108. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  109. *
  110. * @category sequencing
  111. * @since 2.6.7
  112. */
  113. export var chainW = chain;
  114. /**
  115. * Less strict version of [`flatten`](#flatten).
  116. *
  117. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  118. *
  119. * @category sequencing
  120. * @since 2.11.0
  121. */
  122. export var flattenW =
  123. /*#__PURE__*/ chainW(identity);
  124. /**
  125. * @category sequencing
  126. * @since 2.3.0
  127. */
  128. export var flatten = flattenW;
  129. /**
  130. * @category type lambdas
  131. * @since 2.3.0
  132. */
  133. export var URI = 'ReaderTask';
  134. /**
  135. * @category instances
  136. * @since 2.7.0
  137. */
  138. export var Functor = {
  139. URI: URI,
  140. map: _map
  141. };
  142. /**
  143. * @category mapping
  144. * @since 2.10.0
  145. */
  146. export var flap = /*#__PURE__*/ flap_(Functor);
  147. /**
  148. * @category instances
  149. * @since 2.10.0
  150. */
  151. export var Pointed = {
  152. URI: URI,
  153. of: of
  154. };
  155. /**
  156. * Runs computations in parallel.
  157. *
  158. * @category instances
  159. * @since 2.10.0
  160. */
  161. export var ApplyPar = {
  162. URI: URI,
  163. map: _map,
  164. ap: _apPar
  165. };
  166. /**
  167. * Combine two effectful actions, keeping only the result of the first.
  168. *
  169. * @since 2.3.0
  170. */
  171. export var apFirst = /*#__PURE__*/ apFirst_(ApplyPar);
  172. /**
  173. * Combine two effectful actions, keeping only the result of the second.
  174. *
  175. * @since 2.3.0
  176. */
  177. export var apSecond = /*#__PURE__*/ apSecond_(ApplyPar);
  178. /**
  179. * Runs computations in parallel.
  180. *
  181. * @category instances
  182. * @since 2.7.0
  183. */
  184. export var ApplicativePar = {
  185. URI: URI,
  186. map: _map,
  187. ap: _apPar,
  188. of: of
  189. };
  190. /**
  191. * Runs computations sequentially.
  192. *
  193. * @category instances
  194. * @since 2.10.0
  195. */
  196. export var ApplySeq = {
  197. URI: URI,
  198. map: _map,
  199. ap: _apSeq
  200. };
  201. /**
  202. * Runs computations sequentially.
  203. *
  204. * @category instances
  205. * @since 2.7.0
  206. */
  207. export var ApplicativeSeq = {
  208. URI: URI,
  209. map: _map,
  210. ap: _apSeq,
  211. of: of
  212. };
  213. /**
  214. * @category instances
  215. * @since 2.10.0
  216. */
  217. export var Chain = {
  218. URI: URI,
  219. map: _map,
  220. ap: _apPar,
  221. chain: _chain
  222. };
  223. /**
  224. * @category instances
  225. * @since 2.10.0
  226. */
  227. export var Monad = {
  228. URI: URI,
  229. map: _map,
  230. of: of,
  231. ap: _apPar,
  232. chain: _chain
  233. };
  234. /**
  235. * @category instances
  236. * @since 2.10.0
  237. */
  238. export var MonadIO = {
  239. URI: URI,
  240. map: _map,
  241. of: of,
  242. ap: _apPar,
  243. chain: _chain,
  244. fromIO: fromIO
  245. };
  246. /**
  247. * @category instances
  248. * @since 2.10.0
  249. */
  250. export var MonadTask = {
  251. URI: URI,
  252. map: _map,
  253. of: of,
  254. ap: _apPar,
  255. chain: _chain,
  256. fromIO: fromIO,
  257. fromTask: fromTask
  258. };
  259. /**
  260. * Composes computations in sequence, using the return value of one computation to determine the next computation and
  261. * keeping only the result of the first.
  262. *
  263. * @category sequencing
  264. * @since 2.3.0
  265. */
  266. export var chainFirst =
  267. /*#__PURE__*/ chainFirst_(Chain);
  268. /**
  269. * Less strict version of [`chainFirst`](#chainfirst).
  270. *
  271. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  272. *
  273. * @category sequencing
  274. * @since 2.11.0
  275. */
  276. export var chainFirstW = chainFirst;
  277. /**
  278. * @category instances
  279. * @since 2.10.0
  280. */
  281. export var FromIO = {
  282. URI: URI,
  283. fromIO: fromIO
  284. };
  285. /**
  286. * @category lifting
  287. * @since 2.4.0
  288. */
  289. export var fromIOK = /*#__PURE__*/ fromIOK_(FromIO);
  290. /**
  291. * @category sequencing
  292. * @since 2.4.0
  293. */
  294. export var chainIOK =
  295. /*#__PURE__*/ chainIOK_(FromIO, Chain);
  296. /**
  297. * @category sequencing
  298. * @since 2.10.0
  299. */
  300. export var chainFirstIOK =
  301. /*#__PURE__*/ chainFirstIOK_(FromIO, Chain);
  302. /**
  303. * @category instances
  304. * @since 2.11.0
  305. */
  306. export var FromReader = {
  307. URI: URI,
  308. fromReader: fromReader
  309. };
  310. /**
  311. * Reads the current context.
  312. *
  313. * @category constructors
  314. * @since 2.3.0
  315. */
  316. export var ask = /*#__PURE__*/ ask_(FromReader);
  317. /**
  318. * Projects a value from the global context in a `ReaderTask`.
  319. *
  320. * @category constructors
  321. * @since 2.3.0
  322. */
  323. export var asks = /*#__PURE__*/ asks_(FromReader);
  324. /**
  325. * @category lifting
  326. * @since 2.11.0
  327. */
  328. export var fromReaderK = /*#__PURE__*/ fromReaderK_(FromReader);
  329. /**
  330. * @category sequencing
  331. * @since 2.11.0
  332. */
  333. export var chainReaderK =
  334. /*#__PURE__*/ chainReaderK_(FromReader, Chain);
  335. /**
  336. * Less strict version of [`chainReaderK`](#chainreaderk).
  337. *
  338. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  339. *
  340. * @category sequencing
  341. * @since 2.11.0
  342. */
  343. export var chainReaderKW = chainReaderK;
  344. /**
  345. * @category sequencing
  346. * @since 2.11.0
  347. */
  348. export var chainFirstReaderK =
  349. /*#__PURE__*/ chainFirstReaderK_(FromReader, Chain);
  350. /**
  351. * Less strict version of [`chainFirstReaderK`](#chainfirstreaderk).
  352. *
  353. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  354. *
  355. * @category sequencing
  356. * @since 2.11.0
  357. */
  358. export var chainFirstReaderKW = chainFirstReaderK;
  359. /**
  360. * @category lifting
  361. * @since 2.13.0
  362. */
  363. export var fromReaderIOK = function (f) {
  364. return function () {
  365. var a = [];
  366. for (var _i = 0; _i < arguments.length; _i++) {
  367. a[_i] = arguments[_i];
  368. }
  369. return fromReaderIO(f.apply(void 0, a));
  370. };
  371. };
  372. /**
  373. * Less strict version of [`chainReaderIOK`](#chainreaderiok).
  374. *
  375. * @category sequencing
  376. * @since 2.13.0
  377. */
  378. export var chainReaderIOKW = function (f) { return chainW(fromReaderIOK(f)); };
  379. /**
  380. * @category sequencing
  381. * @since 2.13.0
  382. */
  383. export var chainReaderIOK = chainReaderIOKW;
  384. /**
  385. * Less strict version of [`chainFirstReaderIOK`](#chainfirstreaderiok).
  386. *
  387. * @category sequencing
  388. * @since 2.13.0
  389. */
  390. export var chainFirstReaderIOKW = function (f) { return chainFirstW(fromReaderIOK(f)); };
  391. /**
  392. * @category sequencing
  393. * @since 2.13.0
  394. */
  395. export var chainFirstReaderIOK = chainFirstReaderIOKW;
  396. /**
  397. * @category instances
  398. * @since 2.10.0
  399. */
  400. export var FromTask = {
  401. URI: URI,
  402. fromIO: fromIO,
  403. fromTask: fromTask
  404. };
  405. /**
  406. * @category lifting
  407. * @since 2.4.0
  408. */
  409. export var fromTaskK = /*#__PURE__*/ fromTaskK_(FromTask);
  410. /**
  411. * @category sequencing
  412. * @since 2.4.0
  413. */
  414. export var chainTaskK =
  415. /*#__PURE__*/ chainTaskK_(FromTask, Chain);
  416. /**
  417. * @category sequencing
  418. * @since 2.10.0
  419. */
  420. export var chainFirstTaskK =
  421. /*#__PURE__*/ chainFirstTaskK_(FromTask, Chain);
  422. // -------------------------------------------------------------------------------------
  423. // do notation
  424. // -------------------------------------------------------------------------------------
  425. /**
  426. * @category do notation
  427. * @since 2.9.0
  428. */
  429. export var Do = /*#__PURE__*/ of(_.emptyRecord);
  430. /**
  431. * @category do notation
  432. * @since 2.8.0
  433. */
  434. export var bindTo = /*#__PURE__*/ bindTo_(Functor);
  435. var let_ = /*#__PURE__*/ let__(Functor);
  436. export {
  437. /**
  438. * @category do notation
  439. * @since 2.13.0
  440. */
  441. let_ as let };
  442. /**
  443. * @category do notation
  444. * @since 2.8.0
  445. */
  446. export var bind = /*#__PURE__*/ bind_(Chain);
  447. /**
  448. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  449. *
  450. * @category do notation
  451. * @since 2.8.0
  452. */
  453. export var bindW = bind;
  454. /**
  455. * @category do notation
  456. * @since 2.8.0
  457. */
  458. export var apS = /*#__PURE__*/ apS_(ApplyPar);
  459. /**
  460. * Less strict version of [`apS`](#aps).
  461. *
  462. * The `W` suffix (short for **W**idening) means that the environment types will be merged.
  463. *
  464. * @category do notation
  465. * @since 2.8.0
  466. */
  467. export var apSW = apS;
  468. /**
  469. * @since 2.11.0
  470. */
  471. export var ApT = /*#__PURE__*/ of(_.emptyReadonlyArray);
  472. // -------------------------------------------------------------------------------------
  473. // array utils
  474. // -------------------------------------------------------------------------------------
  475. /**
  476. * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(Applicative)`.
  477. *
  478. * @category traversing
  479. * @since 2.11.0
  480. */
  481. export var traverseReadonlyNonEmptyArrayWithIndex = function (f) {
  482. return flow(R.traverseReadonlyNonEmptyArrayWithIndex(f), R.map(T.traverseReadonlyNonEmptyArrayWithIndex(SK)));
  483. };
  484. /**
  485. * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`.
  486. *
  487. * @category traversing
  488. * @since 2.11.0
  489. */
  490. export var traverseReadonlyArrayWithIndex = function (f) {
  491. var g = traverseReadonlyNonEmptyArrayWithIndex(f);
  492. return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); };
  493. };
  494. /**
  495. * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(ApplicativeSeq)`.
  496. *
  497. * @category traversing
  498. * @since 2.11.0
  499. */
  500. export var traverseReadonlyNonEmptyArrayWithIndexSeq = function (f) {
  501. return flow(R.traverseReadonlyNonEmptyArrayWithIndex(f), R.map(T.traverseReadonlyNonEmptyArrayWithIndexSeq(SK)));
  502. };
  503. /**
  504. * Equivalent to `ReadonlyArray#traverseWithIndex(ApplicativeSeq)`.
  505. *
  506. * @category traversing
  507. * @since 2.11.0
  508. */
  509. export var traverseReadonlyArrayWithIndexSeq = function (f) {
  510. var g = traverseReadonlyNonEmptyArrayWithIndexSeq(f);
  511. return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); };
  512. };
  513. /**
  514. * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`.
  515. *
  516. * @category traversing
  517. * @since 2.9.0
  518. */
  519. export var traverseArrayWithIndex = traverseReadonlyArrayWithIndex;
  520. /**
  521. * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`.
  522. *
  523. * @category traversing
  524. * @since 2.9.0
  525. */
  526. export var traverseArray = function (f) { return traverseReadonlyArrayWithIndex(function (_, a) { return f(a); }); };
  527. /**
  528. * Equivalent to `ReadonlyArray#sequence(Applicative)`.
  529. *
  530. * @category traversing
  531. * @since 2.9.0
  532. */
  533. export var sequenceArray =
  534. /*#__PURE__*/ traverseArray(identity);
  535. /**
  536. * Equivalent to `ReadonlyArray#traverseWithIndex(ApplicativeSeq)`.
  537. *
  538. * @category traversing
  539. * @since 2.10.0
  540. */
  541. export var traverseSeqArrayWithIndex = traverseReadonlyArrayWithIndexSeq;
  542. /**
  543. * Equivalent to `ReadonlyArray#traverse(ApplicativeSeq)`.
  544. *
  545. * @category traversing
  546. * @since 2.10.0
  547. */
  548. export var traverseSeqArray = function (f) { return traverseReadonlyArrayWithIndexSeq(function (_, a) { return f(a); }); };
  549. // -------------------------------------------------------------------------------------
  550. // deprecated
  551. // -------------------------------------------------------------------------------------
  552. /**
  553. * Use `traverseReadonlyArrayWithIndexSeq` instead.
  554. *
  555. * @category zone of death
  556. * @since 2.10.0
  557. * @deprecated
  558. */
  559. export var sequenceSeqArray =
  560. /*#__PURE__*/ traverseSeqArray(identity);
  561. /**
  562. * This instance is deprecated, use small, specific instances instead.
  563. * For example if a function needs a `Functor` instance, pass `RT.Functor` instead of `RT.readerTask`
  564. * (where `RT` is from `import RT from 'fp-ts/ReaderTask'`)
  565. *
  566. * @category zone of death
  567. * @since 2.3.0
  568. * @deprecated
  569. */
  570. export var readerTask = {
  571. URI: URI,
  572. map: _map,
  573. of: of,
  574. ap: _apPar,
  575. chain: _chain,
  576. fromIO: fromIO,
  577. fromTask: fromTask
  578. };
  579. /**
  580. * This instance is deprecated, use small, specific instances instead.
  581. * For example if a function needs a `Functor` instance, pass `RT.Functor` instead of `RT.readerTaskSeq`
  582. * (where `RT` is from `import RT from 'fp-ts/ReaderTask'`)
  583. *
  584. * @category zone of death
  585. * @since 2.3.0
  586. * @deprecated
  587. */
  588. export var readerTaskSeq = {
  589. URI: URI,
  590. map: _map,
  591. of: of,
  592. ap: _apSeq,
  593. chain: _chain,
  594. fromIO: fromIO,
  595. fromTask: fromTask
  596. };
  597. /**
  598. * Use [`getApplySemigroup`](./Apply.ts.html#getapplysemigroup) instead.
  599. *
  600. * @category zone of death
  601. * @since 2.3.0
  602. * @deprecated
  603. */
  604. export var getSemigroup =
  605. /*#__PURE__*/ getApplySemigroup_(ApplySeq);
  606. /**
  607. * Use [`getApplicativeMonoid`](./Applicative.ts.html#getapplicativemonoid) instead.
  608. *
  609. * @category zone of death
  610. * @since 2.3.0
  611. * @deprecated
  612. */
  613. export var getMonoid =
  614. /*#__PURE__*/ getApplicativeMonoid(ApplicativeSeq);
  615. /**
  616. * @category zone of death
  617. * @since 2.4.0
  618. * @deprecated
  619. */
  620. /* istanbul ignore next */
  621. export function run(ma, r) {
  622. return ma(r)();
  623. }