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

291 строка
12 KiB

  1. /**
  2. * A `Foldable` with an additional index.
  3. * A `FoldableWithIndex` instance must be compatible with its `Foldable` instance
  4. *
  5. * ```ts
  6. * reduce(fa, b, f) = reduceWithIndex(fa, b, (_, b, a) => f(b, a))
  7. * foldMap(M)(fa, f) = foldMapWithIndex(M)(fa, (_, a) => f(a))
  8. * reduceRight(fa, b, f) = reduceRightWithIndex(fa, b, (_, a, b) => f(a, b))
  9. * ```
  10. *
  11. * @since 2.0.0
  12. */
  13. import {
  14. Foldable,
  15. Foldable1,
  16. Foldable2,
  17. Foldable2C,
  18. Foldable3,
  19. Foldable3C,
  20. Foldable4,
  21. FoldableComposition,
  22. FoldableComposition11,
  23. FoldableComposition12,
  24. FoldableComposition12C,
  25. FoldableComposition21,
  26. FoldableComposition22,
  27. FoldableComposition22C,
  28. FoldableComposition2C1
  29. } from './Foldable'
  30. import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT'
  31. import { Monoid } from './Monoid'
  32. /**
  33. * @category model
  34. * @since 2.0.0
  35. */
  36. export interface FoldableWithIndex<F, I> extends Foldable<F> {
  37. readonly reduceWithIndex: <A, B>(fa: HKT<F, A>, b: B, f: (i: I, b: B, a: A) => B) => B
  38. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <A>(fa: HKT<F, A>, f: (i: I, a: A) => M) => M
  39. readonly reduceRightWithIndex: <A, B>(fa: HKT<F, A>, b: B, f: (i: I, a: A, b: B) => B) => B
  40. }
  41. /**
  42. * @category model
  43. * @since 2.0.0
  44. */
  45. export interface FoldableWithIndex1<F extends URIS, I> extends Foldable1<F> {
  46. readonly reduceWithIndex: <A, B>(fa: Kind<F, A>, b: B, f: (i: I, b: B, a: A) => B) => B
  47. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <A>(fa: Kind<F, A>, f: (i: I, a: A) => M) => M
  48. readonly reduceRightWithIndex: <A, B>(fa: Kind<F, A>, b: B, f: (i: I, a: A, b: B) => B) => B
  49. }
  50. /**
  51. * @category model
  52. * @since 2.0.0
  53. */
  54. export interface FoldableWithIndex2<F extends URIS2, I> extends Foldable2<F> {
  55. readonly reduceWithIndex: <E, A, B>(fa: Kind2<F, E, A>, b: B, f: (i: I, b: B, a: A) => B) => B
  56. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <E, A>(fa: Kind2<F, E, A>, f: (i: I, a: A) => M) => M
  57. readonly reduceRightWithIndex: <E, A, B>(fa: Kind2<F, E, A>, b: B, f: (i: I, a: A, b: B) => B) => B
  58. }
  59. /**
  60. * @category model
  61. * @since 2.0.0
  62. */
  63. export interface FoldableWithIndex2C<F extends URIS2, I, E> extends Foldable2C<F, E> {
  64. readonly reduceWithIndex: <A, B>(fa: Kind2<F, E, A>, b: B, f: (i: I, b: B, a: A) => B) => B
  65. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <A>(fa: Kind2<F, E, A>, f: (i: I, a: A) => M) => M
  66. readonly reduceRightWithIndex: <A, B>(fa: Kind2<F, E, A>, b: B, f: (i: I, a: A, b: B) => B) => B
  67. }
  68. /**
  69. * @category model
  70. * @since 2.0.0
  71. */
  72. export interface FoldableWithIndex3<F extends URIS3, I> extends Foldable3<F> {
  73. readonly reduceWithIndex: <R, E, A, B>(fa: Kind3<F, R, E, A>, b: B, f: (i: I, b: B, a: A) => B) => B
  74. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <R, E, A>(fa: Kind3<F, R, E, A>, f: (i: I, a: A) => M) => M
  75. readonly reduceRightWithIndex: <R, E, A, B>(fa: Kind3<F, R, E, A>, b: B, f: (i: I, a: A, b: B) => B) => B
  76. }
  77. /**
  78. * @category model
  79. * @since 2.2.0
  80. */
  81. export interface FoldableWithIndex3C<F extends URIS3, I, E> extends Foldable3C<F, E> {
  82. readonly reduceWithIndex: <R, A, B>(fa: Kind3<F, R, E, A>, b: B, f: (i: I, b: B, a: A) => B) => B
  83. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <R, A>(fa: Kind3<F, R, E, A>, f: (i: I, a: A) => M) => M
  84. readonly reduceRightWithIndex: <R, A, B>(fa: Kind3<F, R, E, A>, b: B, f: (i: I, a: A, b: B) => B) => B
  85. }
  86. /**
  87. * @category model
  88. * @since 2.0.0
  89. */
  90. export interface FoldableWithIndex4<F extends URIS4, I> extends Foldable4<F> {
  91. readonly reduceWithIndex: <S, R, E, A, B>(fa: Kind4<F, S, R, E, A>, b: B, f: (i: I, b: B, a: A) => B) => B
  92. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <S, R, E, A>(fa: Kind4<F, S, R, E, A>, f: (i: I, a: A) => M) => M
  93. readonly reduceRightWithIndex: <S, R, E, A, B>(fa: Kind4<F, S, R, E, A>, b: B, f: (i: I, a: A, b: B) => B) => B
  94. }
  95. /**
  96. * `reduceWithIndex` composition.
  97. *
  98. * @since 2.10.0
  99. */
  100. export declare function reduceWithIndex<F extends URIS, I, G extends URIS, J>(
  101. F: FoldableWithIndex1<F, I>,
  102. G: FoldableWithIndex1<G, J>
  103. ): <B, A>(b: B, f: (ij: readonly [I, J], b: B, a: A) => B) => (fga: Kind<F, Kind<G, A>>) => B
  104. export declare function reduceWithIndex<F, I, G, J>(
  105. F: FoldableWithIndex<F, I>,
  106. G: FoldableWithIndex<G, J>
  107. ): <B, A>(b: B, f: (ij: readonly [I, J], b: B, a: A) => B) => (fga: HKT<F, HKT<G, A>>) => B
  108. /**
  109. * `foldMapWithIndex` composition.
  110. *
  111. * @since 2.10.0
  112. */
  113. export declare function foldMapWithIndex<F extends URIS, I, G extends URIS, J>(
  114. F: FoldableWithIndex1<F, I>,
  115. G: FoldableWithIndex1<G, J>
  116. ): <M>(M: Monoid<M>) => <A>(f: (ij: readonly [I, J], a: A) => M) => (fga: Kind<F, Kind<G, A>>) => M
  117. export declare function foldMapWithIndex<F, I, G, J>(
  118. F: FoldableWithIndex<F, I>,
  119. G: FoldableWithIndex<G, J>
  120. ): <M>(M: Monoid<M>) => <A>(f: (ij: readonly [I, J], a: A) => M) => (fga: HKT<F, HKT<G, A>>) => M
  121. /**
  122. * `reduceRightWithIndex` composition.
  123. *
  124. * @since 2.10.0
  125. */
  126. export declare function reduceRightWithIndex<F extends URIS, I, G extends URIS, J>(
  127. F: FoldableWithIndex1<F, I>,
  128. G: FoldableWithIndex1<G, J>
  129. ): <B, A>(b: B, f: (ij: readonly [I, J], a: A, b: B) => B) => (fga: Kind<F, Kind<G, A>>) => B
  130. export declare function reduceRightWithIndex<F, I, G, J>(
  131. F: FoldableWithIndex<F, I>,
  132. G: FoldableWithIndex<G, J>
  133. ): <B, A>(b: B, f: (ij: readonly [I, J], a: A, b: B) => B) => (fga: HKT<F, HKT<G, A>>) => B
  134. /**
  135. * @category zone of death
  136. * @since 2.0.0
  137. * @deprecated
  138. */
  139. export interface FoldableWithIndexComposition<F, FI, G, GI> extends FoldableComposition<F, G> {
  140. readonly reduceWithIndex: <A, B>(fga: HKT<F, HKT<G, A>>, b: B, f: (i: [FI, GI], b: B, a: A) => B) => B
  141. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <A>(fga: HKT<F, HKT<G, A>>, f: (i: [FI, GI], a: A) => M) => M
  142. readonly reduceRightWithIndex: <A, B>(fga: HKT<F, HKT<G, A>>, b: B, f: (i: [FI, GI], a: A, b: B) => B) => B
  143. }
  144. /**
  145. * @category zone of death
  146. * @since 2.0.0
  147. * @deprecated
  148. */
  149. export interface FoldableWithIndexComposition11<F extends URIS, FI, G extends URIS, GI>
  150. extends FoldableComposition11<F, G> {
  151. readonly reduceWithIndex: <A, B>(fga: Kind<F, Kind<G, A>>, b: B, f: (i: [FI, GI], b: B, a: A) => B) => B
  152. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <A>(fga: Kind<F, Kind<G, A>>, f: (i: [FI, GI], a: A) => M) => M
  153. readonly reduceRightWithIndex: <A, B>(fga: Kind<F, Kind<G, A>>, b: B, f: (i: [FI, GI], a: A, b: B) => B) => B
  154. }
  155. /**
  156. * @category zone of death
  157. * @since 2.0.0
  158. * @deprecated
  159. */
  160. export interface FoldableWithIndexComposition12<F extends URIS, FI, G extends URIS2, GI>
  161. extends FoldableComposition12<F, G> {
  162. readonly reduceWithIndex: <E, A, B>(fga: Kind<F, Kind2<G, E, A>>, b: B, f: (i: [FI, GI], b: B, a: A) => B) => B
  163. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <E, A>(fga: Kind<F, Kind2<G, E, A>>, f: (i: [FI, GI], a: A) => M) => M
  164. readonly reduceRightWithIndex: <E, A, B>(fga: Kind<F, Kind2<G, E, A>>, b: B, f: (i: [FI, GI], a: A, b: B) => B) => B
  165. }
  166. /**
  167. * @category zone of death
  168. * @since 2.0.0
  169. * @deprecated
  170. */
  171. export interface FoldableWithIndexComposition12C<F extends URIS, FI, G extends URIS2, GI, E>
  172. extends FoldableComposition12C<F, G, E> {
  173. readonly reduceWithIndex: <A, B>(fga: Kind<F, Kind2<G, E, A>>, b: B, f: (i: [FI, GI], b: B, a: A) => B) => B
  174. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <A>(fga: Kind<F, Kind2<G, E, A>>, f: (i: [FI, GI], a: A) => M) => M
  175. readonly reduceRightWithIndex: <A, B>(fga: Kind<F, Kind2<G, E, A>>, b: B, f: (i: [FI, GI], a: A, b: B) => B) => B
  176. }
  177. /**
  178. * @category zone of death
  179. * @since 2.0.0
  180. * @deprecated
  181. */
  182. export interface FoldableWithIndexComposition21<F extends URIS2, FI, G extends URIS, GI>
  183. extends FoldableComposition21<F, G> {
  184. readonly reduceWithIndex: <FE, A, B>(fga: Kind2<F, FE, Kind<G, A>>, b: B, f: (i: [FI, GI], b: B, a: A) => B) => B
  185. readonly foldMapWithIndex: <M>(
  186. M: Monoid<M>
  187. ) => <FE, A>(fga: Kind2<F, FE, Kind<G, A>>, f: (i: [FI, GI], a: A) => M) => M
  188. readonly reduceRightWithIndex: <FE, A, B>(fga: Kind2<F, FE, Kind<G, A>>, b: B, f: (i: [FI, GI], a: A, b: B) => B) => B
  189. }
  190. /**
  191. * @category zone of death
  192. * @since 2.0.0
  193. * @deprecated
  194. */
  195. export interface FoldableWithIndexComposition2C1<F extends URIS2, FI, G extends URIS, GI, FE>
  196. extends FoldableComposition2C1<F, G, FE> {
  197. readonly reduceWithIndex: <A, B>(fga: Kind2<F, FE, Kind<G, A>>, b: B, f: (i: [FI, GI], b: B, a: A) => B) => B
  198. readonly foldMapWithIndex: <M>(M: Monoid<M>) => <A>(fga: Kind2<F, FE, Kind<G, A>>, f: (i: [FI, GI], a: A) => M) => M
  199. readonly reduceRightWithIndex: <A, B>(fga: Kind2<F, FE, Kind<G, A>>, b: B, f: (i: [FI, GI], a: A, b: B) => B) => B
  200. }
  201. /**
  202. * @category zone of death
  203. * @since 2.0.0
  204. * @deprecated
  205. */
  206. export interface FoldableWithIndexComposition22<F extends URIS2, FI, G extends URIS2, GI>
  207. extends FoldableComposition22<F, G> {
  208. readonly reduceWithIndex: <FE, GE, A, B>(
  209. fga: Kind2<F, FE, Kind2<G, GE, A>>,
  210. b: B,
  211. f: (i: [FI, GI], b: B, a: A) => B
  212. ) => B
  213. readonly foldMapWithIndex: <M>(
  214. M: Monoid<M>
  215. ) => <FE, GE, A>(fga: Kind2<F, FE, Kind2<G, GE, A>>, f: (i: [FI, GI], a: A) => M) => M
  216. readonly reduceRightWithIndex: <FE, GE, A, B>(
  217. fga: Kind2<F, FE, Kind2<G, GE, A>>,
  218. b: B,
  219. f: (i: [FI, GI], a: A, b: B) => B
  220. ) => B
  221. }
  222. /**
  223. * @category zone of death
  224. * @since 2.0.0
  225. * @deprecated
  226. */
  227. export interface FoldableWithIndexComposition22C<F extends URIS2, FI, G extends URIS2, GI, E>
  228. extends FoldableComposition22C<F, G, E> {
  229. readonly reduceWithIndex: <FE, A, B>(fga: Kind2<F, FE, Kind2<G, E, A>>, b: B, f: (i: [FI, GI], b: B, a: A) => B) => B
  230. readonly foldMapWithIndex: <M>(
  231. M: Monoid<M>
  232. ) => <FE, A>(fga: Kind2<F, FE, Kind2<G, E, A>>, f: (i: [FI, GI], a: A) => M) => M
  233. readonly reduceRightWithIndex: <FE, A, B>(
  234. fga: Kind2<F, FE, Kind2<G, E, A>>,
  235. b: B,
  236. f: (i: [FI, GI], a: A, b: B) => B
  237. ) => B
  238. }
  239. /**
  240. * Use
  241. *
  242. * - [reduceWithIndex](#reducewithindex)
  243. * - [foldMapWithIndex](#foldmapwithindex)
  244. * - [reduceRightWithIndex](#reducerightwithindex)
  245. *
  246. * instead.
  247. *
  248. * @category zone of death
  249. * @since 2.0.0
  250. * @deprecated
  251. */
  252. export declare function getFoldableWithIndexComposition<F extends URIS2, FI, G extends URIS2, GI, E>(
  253. F: FoldableWithIndex2<F, FI>,
  254. G: FoldableWithIndex2C<G, GI, E>
  255. ): FoldableWithIndexComposition22C<F, FI, G, GI, E>
  256. /** @deprecated */
  257. export declare function getFoldableWithIndexComposition<F extends URIS2, FI, G extends URIS2, GI>(
  258. F: FoldableWithIndex2<F, FI>,
  259. G: FoldableWithIndex2<G, GI>
  260. ): FoldableWithIndexComposition22<F, FI, G, GI>
  261. /** @deprecated */
  262. export declare function getFoldableWithIndexComposition<F extends URIS2, FI, G extends URIS, GI, E>(
  263. F: FoldableWithIndex2C<F, FI, E>,
  264. G: FoldableWithIndex1<G, GI>
  265. ): FoldableWithIndexComposition2C1<F, FI, G, GI, E>
  266. /** @deprecated */
  267. export declare function getFoldableWithIndexComposition<F extends URIS2, FI, G extends URIS, GI>(
  268. F: FoldableWithIndex2<F, FI>,
  269. G: FoldableWithIndex1<G, GI>
  270. ): FoldableWithIndexComposition21<F, FI, G, GI>
  271. /** @deprecated */
  272. export declare function getFoldableWithIndexComposition<F extends URIS, FI, G extends URIS2, GI>(
  273. F: FoldableWithIndex1<F, FI>,
  274. G: FoldableWithIndex2<G, GI>
  275. ): FoldableWithIndexComposition12<F, FI, G, GI>
  276. /** @deprecated */
  277. export declare function getFoldableWithIndexComposition<F extends URIS, FI, G extends URIS2, GI>(
  278. F: FoldableWithIndex1<F, FI>,
  279. G: FoldableWithIndex2<G, GI>
  280. ): FoldableWithIndexComposition12<F, FI, G, GI>
  281. /** @deprecated */
  282. export declare function getFoldableWithIndexComposition<F extends URIS, FI, G extends URIS, GI>(
  283. F: FoldableWithIndex1<F, FI>,
  284. G: FoldableWithIndex1<G, GI>
  285. ): FoldableWithIndexComposition11<F, FI, G, GI>
  286. /** @deprecated */
  287. export declare function getFoldableWithIndexComposition<F, FI, G, GI>(
  288. F: FoldableWithIndex<F, FI>,
  289. G: FoldableWithIndex<G, GI>
  290. ): FoldableWithIndexComposition<F, FI, G, GI>