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

458 строки
11 KiB

  1. import { getApplySemigroup } from './Apply';
  2. import { fromOption as fromOption_, fromOptionK as fromOptionK_, fromPredicate as fromPredicate_ } from './FromEither';
  3. import { fromIOK as fromIOK_ } from './FromIO';
  4. import { fromTaskK as fromTaskK_ } from './FromTask';
  5. import { fromTheseK as fromTheseK_ } from './FromThese';
  6. import { flow, pipe, SK } from './function';
  7. import { flap as flap_ } from './Functor';
  8. import * as _ from './internal';
  9. import * as T from './Task';
  10. import * as TH from './These';
  11. import * as TT from './TheseT';
  12. /**
  13. * @category constructors
  14. * @since 2.4.0
  15. */
  16. export var left = /*#__PURE__*/ TT.left(T.Pointed);
  17. /**
  18. * @category constructors
  19. * @since 2.4.0
  20. */
  21. export var right = /*#__PURE__*/ TT.right(T.Pointed);
  22. /**
  23. * @category constructors
  24. * @since 2.4.0
  25. */
  26. export var both = /*#__PURE__*/ TT.both(T.Pointed);
  27. /**
  28. * @category constructors
  29. * @since 2.4.0
  30. */
  31. export var rightTask = /*#__PURE__*/ TT.rightF(T.Functor);
  32. /**
  33. * @category constructors
  34. * @since 2.4.0
  35. */
  36. export var leftTask = /*#__PURE__*/ TT.leftF(T.Functor);
  37. /**
  38. * @category constructors
  39. * @since 2.4.0
  40. */
  41. export var rightIO = /*#__PURE__*/ flow(T.fromIO, rightTask);
  42. /**
  43. * @category constructors
  44. * @since 2.4.0
  45. */
  46. export var leftIO = /*#__PURE__*/ flow(T.fromIO, leftTask);
  47. // -------------------------------------------------------------------------------------
  48. // conversions
  49. // -------------------------------------------------------------------------------------
  50. /**
  51. * @category conversions
  52. * @since 2.10.0
  53. */
  54. export var fromEither = T.of;
  55. /**
  56. * @category conversions
  57. * @since 2.11.0
  58. */
  59. export var fromThese = T.of;
  60. /**
  61. * @category conversions
  62. * @since 2.7.0
  63. */
  64. export var fromIO = rightIO;
  65. /**
  66. * @category conversions
  67. * @since 2.4.0
  68. */
  69. export var fromIOEither = /*#__PURE__*/ T.fromIO;
  70. /**
  71. * @category conversions
  72. * @since 2.7.0
  73. */
  74. export var fromTask = rightTask;
  75. /**
  76. * @category pattern matching
  77. * @since 2.10.0
  78. */
  79. export var match = /*#__PURE__*/ TT.match(T.Functor);
  80. /**
  81. * Less strict version of [`match`](#match).
  82. *
  83. * The `W` suffix (short for **W**idening) means that the handler return types will be merged.
  84. *
  85. * @category pattern matching
  86. * @since 2.10.0
  87. */
  88. export var matchW = match;
  89. /**
  90. * The `E` suffix (short for **E**ffect) means that the handlers return an effect (`Task`).
  91. *
  92. * @category pattern matching
  93. * @since 2.10.0
  94. */
  95. export var matchE = /*#__PURE__*/ TT.matchE(T.Monad);
  96. /**
  97. * Alias of [`matchE`](#matche).
  98. *
  99. * @category pattern matching
  100. * @since 2.4.0
  101. */
  102. export var fold = matchE;
  103. /**
  104. * Less strict version of [`matchE`](#matche).
  105. *
  106. * The `W` suffix (short for **W**idening) means that the handler return types will be merged.
  107. *
  108. * @category pattern matching
  109. * @since 2.10.0
  110. */
  111. export var matchEW = fold;
  112. /**
  113. * Alias of [`matchEW`](#matchew).
  114. *
  115. * @category pattern matching
  116. * @since 2.10.0
  117. */
  118. export var foldW = matchEW;
  119. /**
  120. * @since 2.4.0
  121. */
  122. export var swap = /*#__PURE__*/ TT.swap(T.Functor);
  123. var _map = function (fa, f) { return pipe(fa, map(f)); };
  124. /* istanbul ignore next */
  125. var _bimap = function (fa, f, g) { return pipe(fa, bimap(f, g)); };
  126. /* istanbul ignore next */
  127. var _mapLeft = function (fa, f) { return pipe(fa, mapLeft(f)); };
  128. /**
  129. * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F<A>) => F<B>` whose argument and return types
  130. * use the type constructor `F` to represent some computational context.
  131. *
  132. * @category mapping
  133. * @since 2.4.0
  134. */
  135. export var map = /*#__PURE__*/ TT.map(T.Functor);
  136. /**
  137. * Map a pair of functions over the two type arguments of the bifunctor.
  138. *
  139. * @category mapping
  140. * @since 2.4.0
  141. */
  142. export var bimap =
  143. /*#__PURE__*/ TT.bimap(T.Functor);
  144. /**
  145. * Map a function over the first type argument of a bifunctor.
  146. *
  147. * @category error handling
  148. * @since 2.4.0
  149. */
  150. export var mapLeft = /*#__PURE__*/ TT.mapLeft(T.Functor);
  151. /**
  152. * @category constructors
  153. * @since 2.7.0
  154. */
  155. export var of = right;
  156. /**
  157. * @category type lambdas
  158. * @since 2.4.0
  159. */
  160. export var URI = 'TaskThese';
  161. /**
  162. * @category instances
  163. * @since 2.10.0
  164. */
  165. export var getApply = function (A, S) {
  166. var ap = TT.ap(A, S);
  167. return {
  168. URI: URI,
  169. _E: undefined,
  170. map: _map,
  171. ap: function (fab, fa) { return pipe(fab, ap(fa)); }
  172. };
  173. };
  174. /**
  175. * @category instances
  176. * @since 2.7.0
  177. */
  178. export function getApplicative(A, S) {
  179. var ap = getApply(A, S).ap;
  180. return {
  181. URI: URI,
  182. _E: undefined,
  183. map: _map,
  184. ap: ap,
  185. of: of
  186. };
  187. }
  188. /**
  189. * @category instances
  190. * @since 2.10.0
  191. */
  192. export function getChain(S) {
  193. var A = getApply(T.ApplicativePar, S);
  194. var chain = TT.chain(T.Monad, S);
  195. return {
  196. URI: URI,
  197. _E: undefined,
  198. map: _map,
  199. ap: A.ap,
  200. chain: function (ma, f) { return pipe(ma, chain(f)); }
  201. };
  202. }
  203. /**
  204. * @category instances
  205. * @since 2.4.0
  206. */
  207. export function getMonad(S) {
  208. var A = getApplicative(T.ApplicativePar, S);
  209. var C = getChain(S);
  210. return {
  211. URI: URI,
  212. _E: undefined,
  213. map: _map,
  214. ap: A.ap,
  215. of: of,
  216. chain: C.chain,
  217. fromIO: fromIO,
  218. fromTask: fromTask
  219. };
  220. }
  221. /**
  222. * @category instances
  223. * @since 2.10.0
  224. */
  225. export var Functor = {
  226. URI: URI,
  227. map: _map
  228. };
  229. /**
  230. * @category mapping
  231. * @since 2.10.0
  232. */
  233. export var flap = /*#__PURE__*/ flap_(Functor);
  234. /**
  235. * @category instances
  236. * @since 2.10.0
  237. */
  238. export var Pointed = {
  239. URI: URI,
  240. of: of
  241. };
  242. /**
  243. * @category instances
  244. * @since 2.10.0
  245. */
  246. export var Bifunctor = {
  247. URI: URI,
  248. bimap: _bimap,
  249. mapLeft: _mapLeft
  250. };
  251. /**
  252. * @category instances
  253. * @since 2.10.0
  254. */
  255. export var FromEither = {
  256. URI: URI,
  257. fromEither: fromEither
  258. };
  259. /**
  260. * @category conversions
  261. * @since 2.10.0
  262. */
  263. export var fromOption =
  264. /*#__PURE__*/ fromOption_(FromEither);
  265. /**
  266. * @category lifting
  267. * @since 2.10.0
  268. */
  269. export var fromOptionK =
  270. /*#__PURE__*/ fromOptionK_(FromEither);
  271. /**
  272. * @category lifting
  273. * @since 2.10.0
  274. */
  275. export var fromPredicate = /*#__PURE__*/ fromPredicate_(FromEither);
  276. /**
  277. * @category instances
  278. * @since 2.11.0
  279. */
  280. export var FromThese = {
  281. URI: URI,
  282. fromThese: fromThese
  283. };
  284. /**
  285. * @category lifting
  286. * @since 2.11.0
  287. */
  288. export var fromTheseK = /*#__PURE__*/ fromTheseK_(FromThese);
  289. /**
  290. * @category instances
  291. * @since 2.10.0
  292. */
  293. export var FromIO = {
  294. URI: URI,
  295. fromIO: fromIO
  296. };
  297. /**
  298. * @category lifting
  299. * @since 2.10.0
  300. */
  301. export var fromIOK = /*#__PURE__*/ fromIOK_(FromIO);
  302. /**
  303. * @category instances
  304. * @since 2.10.0
  305. */
  306. export var FromTask = {
  307. URI: URI,
  308. fromIO: fromIO,
  309. fromTask: fromTask
  310. };
  311. /**
  312. * @category lifting
  313. * @since 2.10.0
  314. */
  315. export var fromTaskK = /*#__PURE__*/ fromTaskK_(FromTask);
  316. // -------------------------------------------------------------------------------------
  317. // utils
  318. // -------------------------------------------------------------------------------------
  319. /**
  320. * @since 2.10.0
  321. */
  322. export var toTuple2 =
  323. /*#__PURE__*/ TT.toTuple2(T.Functor);
  324. /**
  325. * @since 2.11.0
  326. */
  327. export var ApT = /*#__PURE__*/ of(_.emptyReadonlyArray);
  328. // -------------------------------------------------------------------------------------
  329. // array utils
  330. // -------------------------------------------------------------------------------------
  331. /**
  332. * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(getApplicative(T.ApplicativePar, S))`.
  333. *
  334. * @category traversing
  335. * @since 2.11.0
  336. */
  337. export var traverseReadonlyNonEmptyArrayWithIndex = function (S) {
  338. var g = TH.traverseReadonlyNonEmptyArrayWithIndex(S);
  339. return function (f) { return flow(T.traverseReadonlyNonEmptyArrayWithIndex(f), T.map(g(SK))); };
  340. };
  341. /**
  342. * Equivalent to `ReadonlyArray#traverseWithIndex(getApplicative(T.ApplicativePar, S))`.
  343. *
  344. * @category traversing
  345. * @since 2.11.0
  346. */
  347. export var traverseReadonlyArrayWithIndex = function (S) {
  348. return function (f) {
  349. var g = traverseReadonlyNonEmptyArrayWithIndex(S)(f);
  350. return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); };
  351. };
  352. };
  353. /**
  354. * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(getApplicative(T.ApplicativeSeq, S))`.
  355. *
  356. * @category traversing
  357. * @since 2.11.0
  358. */
  359. export var traverseReadonlyNonEmptyArrayWithIndexSeq = function (S) {
  360. return function (f) {
  361. return function (as) {
  362. return function () {
  363. return _.tail(as).reduce(function (acc, a, i) {
  364. return acc.then(function (ebs) {
  365. return TH.isLeft(ebs)
  366. ? acc
  367. : f(i + 1, a)().then(function (eb) {
  368. if (TH.isLeft(eb)) {
  369. return eb;
  370. }
  371. if (TH.isBoth(eb)) {
  372. var right_1 = ebs.right;
  373. right_1.push(eb.right);
  374. return TH.isBoth(ebs) ? TH.both(S.concat(ebs.left, eb.left), right_1) : TH.both(eb.left, right_1);
  375. }
  376. ebs.right.push(eb.right);
  377. return ebs;
  378. });
  379. });
  380. }, f(0, _.head(as))().then(TH.map(_.singleton)));
  381. };
  382. };
  383. };
  384. };
  385. /**
  386. * Equivalent to `ReadonlyArray#traverseWithIndex(getApplicative(T.ApplicativeSeq, S))`.
  387. *
  388. * @category traversing
  389. * @since 2.11.0
  390. */
  391. export var traverseReadonlyArrayWithIndexSeq = function (S) {
  392. return function (f) {
  393. var g = traverseReadonlyNonEmptyArrayWithIndexSeq(S)(f);
  394. return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); };
  395. };
  396. };
  397. // -------------------------------------------------------------------------------------
  398. // deprecated
  399. // -------------------------------------------------------------------------------------
  400. /**
  401. * Use [`Functor`](#functor) instead.
  402. *
  403. * @category zone of death
  404. * @since 2.7.0
  405. * @deprecated
  406. */
  407. export var functorTaskThese = {
  408. URI: URI,
  409. map: _map
  410. };
  411. /**
  412. * Use [`Bifunctor`](#bifunctor) instead.
  413. *
  414. * @category zone of death
  415. * @since 2.7.0
  416. * @deprecated
  417. */
  418. export var bifunctorTaskThese = {
  419. URI: URI,
  420. bimap: _bimap,
  421. mapLeft: _mapLeft
  422. };
  423. /**
  424. * Use [`toTuple2`](#totuple2) instead.
  425. *
  426. * @category zone of death
  427. * @since 2.4.0
  428. * @deprecated
  429. */
  430. export var toTuple = function (e, a) {
  431. return toTuple2(function () { return e; }, function () { return a; });
  432. };
  433. /**
  434. * This instance is deprecated, use small, specific instances instead.
  435. * For example if a function needs a `Functor` instance, pass `TT.Functor` instead of `TT.taskThese`
  436. * (where `TT` is from `import TT from 'fp-ts/TaskThese'`)
  437. *
  438. * @category zone of death
  439. * @since 2.4.0
  440. * @deprecated
  441. */
  442. export var taskThese = {
  443. URI: URI,
  444. map: _map,
  445. bimap: _bimap,
  446. mapLeft: _mapLeft
  447. };
  448. /**
  449. * Use [`getApplySemigroup`](./Apply.ts.html#getapplysemigroup) instead.
  450. *
  451. * @category zone of death
  452. * @since 2.4.0
  453. * @deprecated
  454. */
  455. export var getSemigroup = function (SE, SA) {
  456. return getApplySemigroup(T.ApplySeq)(TH.getSemigroup(SE, SA));
  457. };