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

453 строки
11 KiB

  1. import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT'
  2. /**
  3. * @category model
  4. * @since 2.0.0
  5. */
  6. export interface Functor<F> {
  7. readonly URI: F
  8. readonly map: <A, B>(fa: HKT<F, A>, f: (a: A) => B) => HKT<F, B>
  9. }
  10. /**
  11. * @category model
  12. * @since 2.0.0
  13. */
  14. export interface Functor1<F extends URIS> {
  15. readonly URI: F
  16. readonly map: <A, B>(fa: Kind<F, A>, f: (a: A) => B) => Kind<F, B>
  17. }
  18. /**
  19. * @category model
  20. * @since 2.0.0
  21. */
  22. export interface Functor2<F extends URIS2> {
  23. readonly URI: F
  24. readonly map: <E, A, B>(fa: Kind2<F, E, A>, f: (a: A) => B) => Kind2<F, E, B>
  25. }
  26. /**
  27. * @category model
  28. * @since 2.0.0
  29. */
  30. export interface Functor2C<F extends URIS2, E> {
  31. readonly URI: F
  32. readonly _E: E
  33. readonly map: <A, B>(fa: Kind2<F, E, A>, f: (a: A) => B) => Kind2<F, E, B>
  34. }
  35. /**
  36. * @category model
  37. * @since 2.0.0
  38. */
  39. export interface Functor3<F extends URIS3> {
  40. readonly URI: F
  41. readonly map: <R, E, A, B>(fa: Kind3<F, R, E, A>, f: (a: A) => B) => Kind3<F, R, E, B>
  42. }
  43. /**
  44. * @category model
  45. * @since 2.2.0
  46. */
  47. export interface Functor3C<F extends URIS3, E> {
  48. readonly URI: F
  49. readonly _E: E
  50. readonly map: <R, A, B>(fa: Kind3<F, R, E, A>, f: (a: A) => B) => Kind3<F, R, E, B>
  51. }
  52. /**
  53. * @category model
  54. * @since 2.0.0
  55. */
  56. export interface Functor4<F extends URIS4> {
  57. readonly URI: F
  58. readonly map: <S, R, E, A, B>(fa: Kind4<F, S, R, E, A>, f: (a: A) => B) => Kind4<F, S, R, E, B>
  59. }
  60. /**
  61. * `map` composition.
  62. *
  63. * @since 2.10.0
  64. */
  65. export declare function map<F extends URIS3, G extends URIS>(
  66. F: Functor3<F>,
  67. G: Functor1<G>
  68. ): <A, B>(f: (a: A) => B) => <R, E>(fa: Kind3<F, R, E, Kind<G, A>>) => Kind3<F, R, E, Kind<G, B>>
  69. export declare function map<F extends URIS2, G extends URIS2>(
  70. F: Functor2<F>,
  71. G: Functor2<G>
  72. ): <A, B>(f: (a: A) => B) => <EF, EG>(fa: Kind2<F, EF, Kind2<G, EG, A>>) => Kind2<F, EF, Kind2<G, EG, B>>
  73. export declare function map<F extends URIS2, G extends URIS>(
  74. F: Functor2<F>,
  75. G: Functor1<G>
  76. ): <A, B>(f: (a: A) => B) => <E>(fa: Kind2<F, E, Kind<G, A>>) => Kind2<F, E, Kind<G, B>>
  77. export declare function map<F extends URIS, G extends URIS3>(
  78. F: Functor1<F>,
  79. G: Functor3<G>
  80. ): <A, B>(f: (a: A) => B) => <R, E>(fa: Kind<F, Kind3<G, R, E, A>>) => Kind<F, Kind3<G, R, E, B>>
  81. export declare function map<F extends URIS, G extends URIS2>(
  82. F: Functor1<F>,
  83. G: Functor2<G>
  84. ): <A, B>(f: (a: A) => B) => <E>(fa: Kind<F, Kind2<G, E, A>>) => Kind<F, Kind2<G, E, B>>
  85. export declare function map<F extends URIS, G extends URIS>(
  86. F: Functor1<F>,
  87. G: Functor1<G>
  88. ): <A, B>(f: (a: A) => B) => (fa: Kind<F, Kind<G, A>>) => Kind<F, Kind<G, B>>
  89. export declare function map<F, G extends URIS2>(
  90. F: Functor<F>,
  91. G: Functor2<G>
  92. ): <A, B>(f: (a: A) => B) => <E>(fa: HKT<F, Kind2<G, E, A>>) => HKT<F, Kind2<G, E, B>>
  93. export declare function map<F, G extends URIS>(
  94. F: Functor<F>,
  95. G: Functor1<G>
  96. ): <A, B>(f: (a: A) => B) => (fa: HKT<F, Kind<G, A>>) => HKT<F, Kind<G, B>>
  97. export declare function map<F, G>(
  98. F: Functor<F>,
  99. G: Functor<G>
  100. ): <A, B>(f: (a: A) => B) => (fa: HKT<F, HKT<G, A>>) => HKT<F, HKT<G, B>>
  101. /**
  102. * @category mapping
  103. * @since 2.10.0
  104. */
  105. export declare function flap<F extends URIS4>(
  106. F: Functor4<F>
  107. ): <A>(a: A) => <S, R, E, B>(fab: Kind4<F, S, R, E, (a: A) => B>) => Kind4<F, S, R, E, B>
  108. export declare function flap<F extends URIS3>(
  109. F: Functor3<F>
  110. ): <A>(a: A) => <R, E, B>(fab: Kind3<F, R, E, (a: A) => B>) => Kind3<F, R, E, B>
  111. export declare function flap<F extends URIS2>(
  112. F: Functor2<F>
  113. ): <A>(a: A) => <E, B>(fab: Kind2<F, E, (a: A) => B>) => Kind2<F, E, B>
  114. export declare function flap<F extends URIS>(F: Functor1<F>): <A>(a: A) => <B>(fab: Kind<F, (a: A) => B>) => Kind<F, B>
  115. export declare function flap<F>(F: Functor<F>): <A>(a: A) => <B>(fab: HKT<F, (a: A) => B>) => HKT<F, B>
  116. /**
  117. * @since 2.10.0
  118. */
  119. export declare function bindTo<F extends URIS4>(
  120. F: Functor4<F>
  121. ): <N extends string>(
  122. name: N
  123. ) => <S, R, E, A>(
  124. fa: Kind4<F, S, R, E, A>
  125. ) => Kind4<
  126. F,
  127. S,
  128. R,
  129. E,
  130. {
  131. readonly [K in N]: A
  132. }
  133. >
  134. export declare function bindTo<F extends URIS3>(
  135. F: Functor3<F>
  136. ): <N extends string>(
  137. name: N
  138. ) => <R, E, A>(
  139. fa: Kind3<F, R, E, A>
  140. ) => Kind3<
  141. F,
  142. R,
  143. E,
  144. {
  145. readonly [K in N]: A
  146. }
  147. >
  148. export declare function bindTo<F extends URIS3, E>(
  149. F: Functor3C<F, E>
  150. ): <N extends string>(
  151. name: N
  152. ) => <R, A>(
  153. fa: Kind3<F, R, E, A>
  154. ) => Kind3<
  155. F,
  156. R,
  157. E,
  158. {
  159. readonly [K in N]: A
  160. }
  161. >
  162. export declare function bindTo<F extends URIS2>(
  163. F: Functor2<F>
  164. ): <N extends string>(
  165. name: N
  166. ) => <E, A>(
  167. fa: Kind2<F, E, A>
  168. ) => Kind2<
  169. F,
  170. E,
  171. {
  172. readonly [K in N]: A
  173. }
  174. >
  175. export declare function bindTo<F extends URIS2, E>(
  176. F: Functor2C<F, E>
  177. ): <N extends string>(
  178. name: N
  179. ) => <A>(fa: Kind2<F, E, A>) => Kind2<
  180. F,
  181. E,
  182. {
  183. readonly [K in N]: A
  184. }
  185. >
  186. export declare function bindTo<F extends URIS>(
  187. F: Functor1<F>
  188. ): <N extends string>(
  189. name: N
  190. ) => <A>(fa: Kind<F, A>) => Kind<
  191. F,
  192. {
  193. readonly [K in N]: A
  194. }
  195. >
  196. export declare function bindTo<F>(F: Functor<F>): <N extends string>(
  197. name: N
  198. ) => <A>(fa: HKT<F, A>) => HKT<
  199. F,
  200. {
  201. readonly [K in N]: A
  202. }
  203. >
  204. /**
  205. * @since 2.13.0
  206. */
  207. declare function let_<F extends URIS4>(
  208. F: Functor4<F>
  209. ): <N extends string, A, B>(
  210. name: Exclude<N, keyof A>,
  211. f: (a: A) => B
  212. ) => <S, R, E>(
  213. fa: Kind4<F, S, R, E, A>
  214. ) => Kind4<
  215. F,
  216. S,
  217. R,
  218. E,
  219. {
  220. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  221. }
  222. >
  223. declare function let_<F extends URIS3>(
  224. F: Functor3<F>
  225. ): <N extends string, A, B>(
  226. name: Exclude<N, keyof A>,
  227. f: (a: A) => B
  228. ) => <R, E>(
  229. fa: Kind3<F, R, E, A>
  230. ) => Kind3<
  231. F,
  232. R,
  233. E,
  234. {
  235. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  236. }
  237. >
  238. declare function let_<F extends URIS3, E>(
  239. F: Functor3C<F, E>
  240. ): <N extends string, A, B>(
  241. name: Exclude<N, keyof A>,
  242. f: (a: A) => B
  243. ) => <R>(fa: Kind3<F, R, E, A>) => Kind3<
  244. F,
  245. R,
  246. E,
  247. {
  248. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  249. }
  250. >
  251. declare function let_<F extends URIS2>(
  252. F: Functor2<F>
  253. ): <N extends string, A, B>(
  254. name: Exclude<N, keyof A>,
  255. f: (a: A) => B
  256. ) => <E>(fa: Kind2<F, E, A>) => Kind2<
  257. F,
  258. E,
  259. {
  260. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  261. }
  262. >
  263. declare function let_<F extends URIS2, E>(
  264. F: Functor2C<F, E>
  265. ): <N extends string, A, B>(
  266. name: Exclude<N, keyof A>,
  267. f: (a: A) => B
  268. ) => (fa: Kind2<F, E, A>) => Kind2<
  269. F,
  270. E,
  271. {
  272. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  273. }
  274. >
  275. declare function let_<F extends URIS>(
  276. F: Functor1<F>
  277. ): <N extends string, A, B>(
  278. name: Exclude<N, keyof A>,
  279. f: (a: A) => B
  280. ) => (fa: Kind<F, A>) => Kind<
  281. F,
  282. {
  283. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  284. }
  285. >
  286. declare function let_<F>(F: Functor<F>): <N extends string, A, B>(
  287. name: Exclude<N, keyof A>,
  288. f: (a: A) => B
  289. ) => (fa: HKT<F, A>) => HKT<
  290. F,
  291. {
  292. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  293. }
  294. >
  295. export {
  296. /**
  297. * @since 2.13.0
  298. */
  299. let_ as let
  300. }
  301. /**
  302. * @category zone of death
  303. * @since 2.0.0
  304. * @deprecated
  305. */
  306. export interface FunctorComposition<F, G> {
  307. readonly map: <A, B>(fa: HKT<F, HKT<G, A>>, f: (a: A) => B) => HKT<F, HKT<G, B>>
  308. }
  309. /**
  310. * @category zone of death
  311. * @since 2.0.0
  312. * @deprecated
  313. */
  314. export interface FunctorCompositionHKT1<F, G extends URIS> {
  315. readonly map: <A, B>(fa: HKT<F, Kind<G, A>>, f: (a: A) => B) => HKT<F, Kind<G, B>>
  316. }
  317. /**
  318. * @category zone of death
  319. * @since 2.0.0
  320. * @deprecated
  321. */
  322. export interface FunctorCompositionHKT2<F, G extends URIS2> {
  323. readonly map: <E, A, B>(fa: HKT<F, Kind2<G, E, A>>, f: (a: A) => B) => HKT<F, Kind2<G, E, B>>
  324. }
  325. /**
  326. * @category zone of death
  327. * @since 2.0.0
  328. * @deprecated
  329. */
  330. export interface FunctorCompositionHKT2C<F, G extends URIS2, E> {
  331. readonly map: <A, B>(fa: HKT<F, Kind2<G, E, A>>, f: (a: A) => B) => HKT<F, Kind2<G, E, B>>
  332. }
  333. /**
  334. * @category zone of death
  335. * @since 2.0.0
  336. * @deprecated
  337. */
  338. export interface FunctorComposition11<F extends URIS, G extends URIS> {
  339. readonly map: <A, B>(fa: Kind<F, Kind<G, A>>, f: (a: A) => B) => Kind<F, Kind<G, B>>
  340. }
  341. /**
  342. * @category zone of death
  343. * @since 2.0.0
  344. * @deprecated
  345. */
  346. export interface FunctorComposition12<F extends URIS, G extends URIS2> {
  347. readonly map: <E, A, B>(fa: Kind<F, Kind2<G, E, A>>, f: (a: A) => B) => Kind<F, Kind2<G, E, B>>
  348. }
  349. /**
  350. * @category zone of death
  351. * @since 2.0.0
  352. * @deprecated
  353. */
  354. export interface FunctorComposition12C<F extends URIS, G extends URIS2, E> {
  355. readonly map: <A, B>(fa: Kind<F, Kind2<G, E, A>>, f: (a: A) => B) => Kind<F, Kind2<G, E, B>>
  356. }
  357. /**
  358. * @category zone of death
  359. * @since 2.0.0
  360. * @deprecated
  361. */
  362. export interface FunctorComposition21<F extends URIS2, G extends URIS> {
  363. readonly map: <E, A, B>(fa: Kind2<F, E, Kind<G, A>>, f: (a: A) => B) => Kind2<F, E, Kind<G, B>>
  364. }
  365. /**
  366. * @category zone of death
  367. * @since 2.0.0
  368. * @deprecated
  369. */
  370. export interface FunctorComposition2C1<F extends URIS2, G extends URIS, E> {
  371. readonly map: <A, B>(fa: Kind2<F, E, Kind<G, A>>, f: (a: A) => B) => Kind2<F, E, Kind<G, B>>
  372. }
  373. /**
  374. * @category zone of death
  375. * @since 2.0.0
  376. * @deprecated
  377. */
  378. export interface FunctorComposition22<F extends URIS2, G extends URIS2> {
  379. readonly map: <FE, GE, A, B>(fa: Kind2<F, FE, Kind2<G, GE, A>>, f: (a: A) => B) => Kind2<F, FE, Kind2<G, GE, B>>
  380. }
  381. /**
  382. * @category zone of death
  383. * @since 2.0.0
  384. * @deprecated
  385. */
  386. export interface FunctorComposition22C<F extends URIS2, G extends URIS2, E> {
  387. readonly map: <FE, A, B>(fa: Kind2<F, FE, Kind2<G, E, A>>, f: (a: A) => B) => Kind2<F, FE, Kind2<G, E, B>>
  388. }
  389. /**
  390. * @category zone of death
  391. * @since 2.2.0
  392. * @deprecated
  393. */
  394. export interface FunctorComposition23<F extends URIS2, G extends URIS3> {
  395. readonly map: <FE, R, E, A, B>(fa: Kind2<F, FE, Kind3<G, R, E, A>>, f: (a: A) => B) => Kind2<F, FE, Kind3<G, R, E, B>>
  396. }
  397. /**
  398. * @category zone of death
  399. * @since 2.2.0
  400. * @deprecated
  401. */
  402. export interface FunctorComposition23C<F extends URIS2, G extends URIS3, E> {
  403. readonly map: <FE, R, A, B>(fa: Kind2<F, FE, Kind3<G, R, E, A>>, f: (a: A) => B) => Kind2<F, FE, Kind3<G, R, E, B>>
  404. }
  405. /**
  406. * Use [`map`](#map) instead.
  407. *
  408. * @category zone of death
  409. * @since 2.0.0
  410. * @deprecated
  411. */
  412. export declare function getFunctorComposition<F extends URIS2, G extends URIS3, E>(
  413. F: Functor2<F>,
  414. G: Functor3C<G, E>
  415. ): FunctorComposition23C<F, G, E>
  416. /** @deprecated */
  417. export declare function getFunctorComposition<F extends URIS2, G extends URIS2, E>(
  418. F: Functor2<F>,
  419. G: Functor2C<G, E>
  420. ): FunctorComposition22C<F, G, E>
  421. /** @deprecated */
  422. export declare function getFunctorComposition<F extends URIS2, G extends URIS2>(
  423. F: Functor2<F>,
  424. G: Functor2<G>
  425. ): FunctorComposition22<F, G>
  426. /** @deprecated */
  427. export declare function getFunctorComposition<F extends URIS2, G extends URIS, E>(
  428. F: Functor2C<F, E>,
  429. G: Functor1<G>
  430. ): FunctorComposition2C1<F, G, E>
  431. /** @deprecated */
  432. export declare function getFunctorComposition<F extends URIS2, G extends URIS>(
  433. F: Functor2<F>,
  434. G: Functor1<G>
  435. ): FunctorComposition21<F, G>
  436. /** @deprecated */
  437. export declare function getFunctorComposition<F extends URIS, G extends URIS2, E>(
  438. F: Functor1<F>,
  439. G: Functor2C<G, E>
  440. ): FunctorComposition12C<F, G, E>
  441. /** @deprecated */
  442. export declare function getFunctorComposition<F extends URIS, G extends URIS2>(
  443. F: Functor1<F>,
  444. G: Functor2<G>
  445. ): FunctorComposition12<F, G>
  446. /** @deprecated */
  447. export declare function getFunctorComposition<F extends URIS, G extends URIS>(
  448. F: Functor1<F>,
  449. G: Functor1<G>
  450. ): FunctorComposition11<F, G>
  451. /** @deprecated */
  452. export declare function getFunctorComposition<F, G>(F: Functor<F>, G: Functor<G>): FunctorComposition<F, G>