版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

504 regels
12 KiB

  1. import { apFirst as apFirst_, apS as apS_, apSecond as apSecond_ } from './Apply';
  2. import { bind as bind_, chainFirst as chainFirst_ } from './Chain';
  3. import { compact as compact_, separate as separate_ } from './Compactable';
  4. import { filter as filter_, filterMap as filterMap_, partition as partition_, partitionMap as partitionMap_ } from './Filterable';
  5. import { chainEitherK as chainEitherK_, chainFirstEitherK as chainFirstEitherK_, fromEitherK as fromEitherK_ } from './FromEither';
  6. import { chainFirstIOK as chainFirstIOK_, chainIOK as chainIOK_, fromIOK as fromIOK_ } from './FromIO';
  7. import { flow, identity, pipe, SK } from './function';
  8. import { let as let__, bindTo as bindTo_, flap as flap_ } from './Functor';
  9. import * as _ from './internal';
  10. import * as O from './Option';
  11. import * as OT from './OptionT';
  12. import * as I from './IO';
  13. import { guard as guard_ } from './Zero';
  14. // -------------------------------------------------------------------------------------
  15. // constructors
  16. // -------------------------------------------------------------------------------------
  17. /**
  18. * @category constructors
  19. * @since 2.12.0
  20. */
  21. export var some = /*#__PURE__*/ OT.some(I.Pointed);
  22. /**
  23. * @category lifting
  24. * @since 2.12.0
  25. */
  26. export var fromPredicate = /*#__PURE__*/ OT.fromPredicate(I.Pointed);
  27. // -------------------------------------------------------------------------------------
  28. // conversions
  29. // -------------------------------------------------------------------------------------
  30. /**
  31. * @category conversions
  32. * @since 2.12.0
  33. */
  34. export var fromOption = I.of;
  35. /**
  36. * @category conversions
  37. * @since 2.12.0
  38. */
  39. export var fromEither = /*#__PURE__*/ OT.fromEither(I.Pointed);
  40. /**
  41. * @category conversions
  42. * @since 2.12.0
  43. */
  44. export var fromIO = /*#__PURE__*/ OT.fromF(I.Functor);
  45. /**
  46. * @category conversions
  47. * @since 2.12.0
  48. */
  49. export var fromIOEither = /*#__PURE__*/ I.map(O.fromEither);
  50. /**
  51. * @category pattern matching
  52. * @since 2.12.0
  53. */
  54. export var match = /*#__PURE__*/ OT.match(I.Functor);
  55. /**
  56. * Less strict version of [`match`](#match).
  57. *
  58. * The `W` suffix (short for **W**idening) means that the handler return types will be merged.
  59. *
  60. * @category pattern matching
  61. * @since 2.12.0
  62. */
  63. export var matchW = match;
  64. /**
  65. * The `E` suffix (short for **E**ffect) means that the handlers return an effect (`IO`).
  66. *
  67. * @category pattern matching
  68. * @since 2.12.0
  69. */
  70. export var matchE =
  71. /*#__PURE__*/ OT.matchE(I.Chain);
  72. /**
  73. * Alias of [`matchE`](#matche).
  74. *
  75. * @category pattern matching
  76. * @since 2.12.0
  77. */
  78. export var fold = matchE;
  79. /**
  80. * Less strict version of [`matchE`](#matche).
  81. *
  82. * The `W` suffix (short for **W**idening) means that the handler return types will be merged.
  83. *
  84. * @category pattern matching
  85. * @since 2.12.0
  86. */
  87. export var matchEW = matchE;
  88. /**
  89. * @category error handling
  90. * @since 2.12.0
  91. */
  92. export var getOrElse = /*#__PURE__*/ OT.getOrElse(I.Monad);
  93. /**
  94. * Less strict version of [`getOrElse`](#getorelse).
  95. *
  96. * The `W` suffix (short for **W**idening) means that the handler return type will be merged.
  97. *
  98. * @category error handling
  99. * @since 2.12.0
  100. */
  101. export var getOrElseW = getOrElse;
  102. /**
  103. * @category conversions
  104. * @since 2.12.0
  105. */
  106. export var toUndefined = I.map(O.toUndefined);
  107. /**
  108. * @category conversions
  109. * @since 2.12.0
  110. */
  111. export var toNullable = I.map(O.toNullable);
  112. /**
  113. * @category conversions
  114. * @since 2.12.0
  115. */
  116. export var fromNullable = /*#__PURE__*/ OT.fromNullable(I.Pointed);
  117. /**
  118. * @category lifting
  119. * @since 2.12.0
  120. */
  121. export var fromNullableK = /*#__PURE__*/ OT.fromNullableK(I.Pointed);
  122. /**
  123. * @category sequencing
  124. * @since 2.12.0
  125. */
  126. export var chainNullableK = /*#__PURE__*/ OT.chainNullableK(I.Monad);
  127. // -------------------------------------------------------------------------------------
  128. // combinators
  129. // -------------------------------------------------------------------------------------
  130. /**
  131. * @category lifting
  132. * @since 2.12.0
  133. */
  134. export var fromOptionK =
  135. /*#__PURE__*/ OT.fromOptionK(I.Pointed);
  136. /**
  137. * @category sequencing
  138. * @since 2.12.0
  139. */
  140. export var chainOptionK =
  141. /*#__PURE__*/ OT.chainOptionK(I.Monad);
  142. /**
  143. * `map` can be used to turn functions `(a: A) => B` into functions `(fa: F<A>) => F<B>` whose argument and return types
  144. * use the type constructor `F` to represent some computational context.
  145. *
  146. * @category mapping
  147. * @since 2.12.0
  148. */
  149. export var map = /*#__PURE__*/ OT.map(I.Functor);
  150. /**
  151. * @since 2.12.0
  152. */
  153. export var ap = /*#__PURE__*/ OT.ap(I.Apply);
  154. /**
  155. * @category constructors
  156. * @since 2.12.0
  157. */
  158. export var of = some;
  159. /**
  160. * @category sequencing
  161. * @since 2.12.0
  162. */
  163. export var chain = /*#__PURE__*/ OT.chain(I.Monad);
  164. /**
  165. * @category sequencing
  166. * @since 2.12.0
  167. */
  168. export var flatten = /*#__PURE__*/ chain(identity);
  169. /**
  170. * @category error handling
  171. * @since 2.12.0
  172. */
  173. export var alt = /*#__PURE__*/ OT.alt(I.Monad);
  174. /**
  175. * Less strict version of [`alt`](#alt).
  176. *
  177. * The `W` suffix (short for **W**idening) means that the return types will be merged.
  178. *
  179. * @category error handling
  180. * @since 2.12.0
  181. */
  182. export var altW = alt;
  183. /**
  184. * @since 2.12.0
  185. */
  186. export var zero = /*#__PURE__*/ OT.zero(I.Pointed);
  187. /**
  188. * @category constructors
  189. * @since 2.12.0
  190. */
  191. export var none = /*#__PURE__*/ zero();
  192. /**
  193. * @category filtering
  194. * @since 2.12.0
  195. */
  196. export var compact = /*#__PURE__*/ compact_(I.Functor, O.Compactable);
  197. /**
  198. * @category filtering
  199. * @since 2.12.0
  200. */
  201. export var separate = /*#__PURE__*/ separate_(I.Functor, O.Compactable, O.Functor);
  202. /**
  203. * @category filtering
  204. * @since 2.12.0
  205. */
  206. export var filter = /*#__PURE__*/ filter_(I.Functor, O.Filterable);
  207. /**
  208. * @category filtering
  209. * @since 2.12.0
  210. */
  211. export var filterMap = /*#__PURE__*/ filterMap_(I.Functor, O.Filterable);
  212. /**
  213. * @category filtering
  214. * @since 2.12.0
  215. */
  216. export var partition = /*#__PURE__*/ partition_(I.Functor, O.Filterable);
  217. /**
  218. * @category filtering
  219. * @since 2.12.0
  220. */
  221. export var partitionMap = /*#__PURE__*/ partitionMap_(I.Functor, O.Filterable);
  222. // -------------------------------------------------------------------------------------
  223. // instances
  224. // -------------------------------------------------------------------------------------
  225. var _map = function (fa, f) { return pipe(fa, map(f)); };
  226. /* istanbul ignore next */
  227. var _ap = function (fab, fa) { return pipe(fab, ap(fa)); };
  228. /* istanbul ignore next */
  229. var _chain = function (ma, f) { return pipe(ma, chain(f)); };
  230. /* istanbul ignore next */
  231. var _alt = function (fa, that) { return pipe(fa, alt(that)); };
  232. /* istanbul ignore next */
  233. var _filter = function (fa, predicate) { return pipe(fa, filter(predicate)); };
  234. /* istanbul ignore next */
  235. var _filterMap = function (fa, f) { return pipe(fa, filterMap(f)); };
  236. /* istanbul ignore next */
  237. var _partition = function (fa, predicate) {
  238. return pipe(fa, partition(predicate));
  239. };
  240. /* istanbul ignore next */
  241. var _partitionMap = function (fa, f) { return pipe(fa, partitionMap(f)); };
  242. /**
  243. * @category type lambdas
  244. * @since 2.12.0
  245. */
  246. export var URI = 'IOOption';
  247. /**
  248. * @category instances
  249. * @since 2.12.0
  250. */
  251. export var Functor = {
  252. URI: URI,
  253. map: _map
  254. };
  255. /**
  256. * @category mapping
  257. * @since 2.12.0
  258. */
  259. export var flap = /*#__PURE__*/ flap_(Functor);
  260. /**
  261. * @category instances
  262. * @since 2.12.0
  263. */
  264. export var Pointed = {
  265. URI: URI,
  266. of: of
  267. };
  268. /**
  269. * @category instances
  270. * @since 2.12.0
  271. */
  272. export var Apply = {
  273. URI: URI,
  274. map: _map,
  275. ap: _ap
  276. };
  277. /**
  278. * Combine two effectful actions, keeping only the result of the first.
  279. *
  280. * @since 2.12.0
  281. */
  282. export var apFirst = /*#__PURE__*/ apFirst_(Apply);
  283. /**
  284. * Combine two effectful actions, keeping only the result of the second.
  285. *
  286. * @since 2.12.0
  287. */
  288. export var apSecond = /*#__PURE__*/ apSecond_(Apply);
  289. /**
  290. * @category instances
  291. * @since 2.12.0
  292. */
  293. export var Applicative = {
  294. URI: URI,
  295. map: _map,
  296. ap: _ap,
  297. of: of
  298. };
  299. /**
  300. * @category instances
  301. * @since 2.12.0
  302. */
  303. export var Chain = {
  304. URI: URI,
  305. map: _map,
  306. ap: _ap,
  307. chain: _chain
  308. };
  309. /**
  310. * Composes computations in sequence, using the return value of one computation to determine the next computation and
  311. * keeping only the result of the first.
  312. *
  313. * @category sequencing
  314. * @since 2.12.0
  315. */
  316. export var chainFirst =
  317. /*#__PURE__*/ chainFirst_(Chain);
  318. /**
  319. * @category instances
  320. * @since 2.12.0
  321. */
  322. export var Alt = {
  323. URI: URI,
  324. map: _map,
  325. alt: _alt
  326. };
  327. /**
  328. * @category instances
  329. * @since 2.12.0
  330. */
  331. export var Zero = {
  332. URI: URI,
  333. zero: zero
  334. };
  335. /**
  336. * @category do notation
  337. * @since 2.12.0
  338. */
  339. export var guard = /*#__PURE__*/ guard_(Zero, Pointed);
  340. /**
  341. * @category instances
  342. * @since 2.12.0
  343. */
  344. export var Alternative = {
  345. URI: URI,
  346. map: _map,
  347. ap: _ap,
  348. of: of,
  349. alt: _alt,
  350. zero: zero
  351. };
  352. /**
  353. * @category instances
  354. * @since 2.12.0
  355. */
  356. export var Monad = {
  357. URI: URI,
  358. map: _map,
  359. ap: _ap,
  360. of: of,
  361. chain: _chain
  362. };
  363. /**
  364. * @category instances
  365. * @since 2.12.0
  366. */
  367. export var MonadIO = {
  368. URI: URI,
  369. map: _map,
  370. ap: _ap,
  371. of: of,
  372. chain: _chain,
  373. fromIO: fromIO
  374. };
  375. /**
  376. * @category instances
  377. * @since 2.12.0
  378. */
  379. export var Compactable = {
  380. URI: URI,
  381. compact: compact,
  382. separate: separate
  383. };
  384. /**
  385. * @category instances
  386. * @since 2.12.0
  387. */
  388. export var Filterable = {
  389. URI: URI,
  390. map: _map,
  391. compact: compact,
  392. separate: separate,
  393. filter: _filter,
  394. filterMap: _filterMap,
  395. partition: _partition,
  396. partitionMap: _partitionMap
  397. };
  398. /**
  399. * @category instances
  400. * @since 2.12.0
  401. */
  402. export var FromIO = {
  403. URI: URI,
  404. fromIO: fromIO
  405. };
  406. /**
  407. * @category lifting
  408. * @since 2.12.0
  409. */
  410. export var fromIOK =
  411. /*#__PURE__*/ fromIOK_(FromIO);
  412. /**
  413. * @category sequencing
  414. * @since 2.12.0
  415. */
  416. export var chainIOK = /*#__PURE__*/ chainIOK_(FromIO, Chain);
  417. /**
  418. * @category sequencing
  419. * @since 2.12.0
  420. */
  421. export var chainFirstIOK =
  422. /*#__PURE__*/ chainFirstIOK_(FromIO, Chain);
  423. /**
  424. * @category instances
  425. * @since 2.12.0
  426. */
  427. export var FromEither = {
  428. URI: URI,
  429. fromEither: fromEither
  430. };
  431. /**
  432. * @category lifting
  433. * @since 2.12.0
  434. */
  435. export var fromEitherK = /*#__PURE__*/ fromEitherK_(FromEither);
  436. /**
  437. * @category sequencing
  438. * @since 2.12.0
  439. */
  440. export var chainEitherK =
  441. /*#__PURE__*/ chainEitherK_(FromEither, Chain);
  442. /**
  443. * @category sequencing
  444. * @since 2.12.0
  445. */
  446. export var chainFirstEitherK =
  447. /*#__PURE__*/ chainFirstEitherK_(FromEither, Chain);
  448. // -------------------------------------------------------------------------------------
  449. // do notation
  450. // -------------------------------------------------------------------------------------
  451. /**
  452. * @category do notation
  453. * @since 2.12.0
  454. */
  455. export var Do = /*#__PURE__*/ of(_.emptyRecord);
  456. /**
  457. * @category do notation
  458. * @since 2.12.0
  459. */
  460. export var bindTo = /*#__PURE__*/ bindTo_(Functor);
  461. var let_ = /*#__PURE__*/ let__(Functor);
  462. export {
  463. /**
  464. * @category do notation
  465. * @since 2.13.0
  466. */
  467. let_ as let };
  468. /**
  469. * @category do notation
  470. * @since 2.12.0
  471. */
  472. export var bind = /*#__PURE__*/ bind_(Chain);
  473. /**
  474. * @category do notation
  475. * @since 2.12.0
  476. */
  477. export var apS = /*#__PURE__*/ apS_(Apply);
  478. /**
  479. * @since 2.12.0
  480. */
  481. export var ApT = /*#__PURE__*/ of(_.emptyReadonlyArray);
  482. // -------------------------------------------------------------------------------------
  483. // array utils
  484. // -------------------------------------------------------------------------------------
  485. /**
  486. * Equivalent to `ReadonlyNonEmptyArray#traverseWithIndex(Applicative)`.
  487. *
  488. * @category traversing
  489. * @since 2.12.0
  490. */
  491. export var traverseReadonlyNonEmptyArrayWithIndex = function (f) {
  492. return flow(I.traverseReadonlyNonEmptyArrayWithIndex(f), I.map(O.traverseReadonlyNonEmptyArrayWithIndex(SK)));
  493. };
  494. /**
  495. * Equivalent to `ReadonlyArray#traverseWithIndex(Applicative)`.
  496. *
  497. * @category traversing
  498. * @since 2.12.0
  499. */
  500. export var traverseReadonlyArrayWithIndex = function (f) {
  501. var g = traverseReadonlyNonEmptyArrayWithIndex(f);
  502. return function (as) { return (_.isNonEmpty(as) ? g(as) : ApT); };
  503. };