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

192 строки
7.1 KiB

  1. /**
  2. * A `Traversable` with an additional index.
  3. * A `TraversableWithIndex` instance must be compatible with its `Traversable` instance
  4. *
  5. * ```ts
  6. * traverse(F)(ta, f) = traverseWithIndex(F)(ta, (_, a) => f(a))
  7. * ```
  8. *
  9. * with its `FoldableWithIndex` instance
  10. *
  11. * ```ts
  12. * foldMapWithIndex(M)(ta, f) = traverseWithIndex(getApplicative(M))(ta, (i, a) => new Const(f(i, a))).value
  13. * ```
  14. *
  15. * and with its `FunctorWithIndex` instance
  16. *
  17. * ```purescript
  18. * mapWithIndex(ta, f) = traverseWithIndex(identity)(ta, (i, a) => new Identity(f(i, a))).value
  19. * ```
  20. *
  21. * @since 2.0.0
  22. */
  23. import { Applicative, Applicative1, Applicative2, Applicative2C, Applicative3, Applicative3C } from './Applicative'
  24. import { FoldableWithIndex, FoldableWithIndex1, FoldableWithIndex2, FoldableWithIndex2C } from './FoldableWithIndex'
  25. import { FunctorWithIndex, FunctorWithIndex1, FunctorWithIndex2, FunctorWithIndex2C } from './FunctorWithIndex'
  26. import { HKT, Kind, Kind2, Kind3, URIS, URIS2, URIS3 } from './HKT'
  27. import { Traversable, Traversable1, Traversable2, Traversable2C } from './Traversable'
  28. /**
  29. * @since 2.0.0
  30. */
  31. export interface TraversableWithIndex<T, I> extends FunctorWithIndex<T, I>, FoldableWithIndex<T, I>, Traversable<T> {
  32. readonly traverseWithIndex: TraverseWithIndex<T, I>
  33. }
  34. /**
  35. * @since 2.0.0
  36. */
  37. export interface TraversableWithIndex1<T extends URIS, I>
  38. extends FunctorWithIndex1<T, I>,
  39. FoldableWithIndex1<T, I>,
  40. Traversable1<T> {
  41. readonly traverseWithIndex: TraverseWithIndex1<T, I>
  42. }
  43. /**
  44. * @since 2.0.0
  45. */
  46. export interface TraversableWithIndex2<T extends URIS2, I>
  47. extends FunctorWithIndex2<T, I>,
  48. FoldableWithIndex2<T, I>,
  49. Traversable2<T> {
  50. readonly traverseWithIndex: TraverseWithIndex2<T, I>
  51. }
  52. /**
  53. * @since 2.0.0
  54. */
  55. export interface TraversableWithIndex2C<T extends URIS2, I, E>
  56. extends FunctorWithIndex2C<T, I, E>,
  57. FoldableWithIndex2C<T, I, E>,
  58. Traversable2C<T, E> {
  59. readonly traverseWithIndex: TraverseWithIndex2C<T, I, E>
  60. }
  61. /**
  62. * @since 2.0.0
  63. */
  64. export interface TraverseWithIndex<T, I> {
  65. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  66. ta: HKT<T, A>,
  67. f: (i: I, a: A) => Kind3<F, R, E, B>
  68. ) => Kind3<F, R, E, HKT<T, B>>
  69. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  70. ta: HKT<T, A>,
  71. f: (i: I, a: A) => Kind3<F, R, E, B>
  72. ) => Kind3<F, R, E, HKT<T, B>>
  73. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  74. ta: HKT<T, A>,
  75. f: (i: I, a: A) => Kind2<F, E, B>
  76. ) => Kind2<F, E, HKT<T, B>>
  77. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  78. ta: HKT<T, A>,
  79. f: (i: I, a: A) => Kind2<F, E, B>
  80. ) => Kind2<F, E, HKT<T, B>>
  81. <F extends URIS>(F: Applicative1<F>): <A, B>(ta: HKT<T, A>, f: (i: I, a: A) => Kind<F, B>) => Kind<F, HKT<T, B>>
  82. <F>(F: Applicative<F>): <A, B>(ta: HKT<T, A>, f: (i: I, a: A) => HKT<F, B>) => HKT<F, HKT<T, B>>
  83. }
  84. /**
  85. * @since 2.0.0
  86. */
  87. export interface TraverseWithIndex1<T extends URIS, I> {
  88. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  89. ta: Kind<T, A>,
  90. f: (i: I, a: A) => Kind3<F, R, E, B>
  91. ) => Kind3<F, R, E, Kind<T, B>>
  92. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  93. ta: Kind<T, A>,
  94. f: (i: I, a: A) => Kind3<F, R, E, B>
  95. ) => Kind3<F, R, E, Kind<T, B>>
  96. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  97. ta: Kind<T, A>,
  98. f: (i: I, a: A) => Kind2<F, E, B>
  99. ) => Kind2<F, E, Kind<T, B>>
  100. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  101. ta: Kind<T, A>,
  102. f: (i: I, a: A) => Kind2<F, E, B>
  103. ) => Kind2<F, E, Kind<T, B>>
  104. <F extends URIS>(F: Applicative1<F>): <A, B>(ta: Kind<T, A>, f: (i: I, a: A) => Kind<F, B>) => Kind<F, Kind<T, B>>
  105. <F>(F: Applicative<F>): <A, B>(ta: Kind<T, A>, f: (i: I, a: A) => HKT<F, B>) => HKT<F, Kind<T, B>>
  106. }
  107. /**
  108. * @since 2.0.0
  109. */
  110. export interface TraverseWithIndex2<T extends URIS2, I> {
  111. <F extends URIS3>(F: Applicative3<F>): <TE, A, R, FE, B>(
  112. ta: Kind2<T, TE, A>,
  113. f: (i: I, a: A) => Kind3<F, R, FE, B>
  114. ) => Kind3<F, R, FE, Kind2<T, TE, B>>
  115. <F extends URIS2>(F: Applicative2<F>): <TE, A, FE, B>(
  116. ta: Kind2<T, TE, A>,
  117. f: (i: I, a: A) => Kind2<F, FE, B>
  118. ) => Kind2<F, FE, Kind2<T, TE, B>>
  119. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <TE, A, B>(
  120. ta: Kind2<T, TE, A>,
  121. f: (i: I, a: A) => Kind2<F, FE, B>
  122. ) => Kind2<F, FE, Kind2<T, TE, B>>
  123. <F extends URIS>(F: Applicative1<F>): <E, A, B>(
  124. ta: Kind2<T, E, A>,
  125. f: (i: I, a: A) => Kind<F, B>
  126. ) => Kind<F, Kind2<T, E, B>>
  127. <F>(F: Applicative<F>): <E, A, B>(ta: Kind2<T, E, A>, f: (i: I, a: A) => HKT<F, B>) => HKT<F, Kind2<T, E, B>>
  128. }
  129. /**
  130. * @since 2.0.0
  131. */
  132. export interface TraverseWithIndex2C<T extends URIS2, I, E> {
  133. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B>(
  134. ta: Kind2<T, E, A>,
  135. f: (i: I, a: A) => Kind3<F, R, FE, B>
  136. ) => Kind3<F, R, FE, Kind2<T, E, B>>
  137. <F extends URIS3>(F: Applicative3C<F, E>): <A, R, B>(
  138. ta: Kind2<T, E, A>,
  139. f: (i: I, a: A) => Kind3<F, R, E, B>
  140. ) => Kind3<F, R, E, Kind2<T, E, B>>
  141. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  142. ta: Kind2<T, E, A>,
  143. f: (i: I, a: A) => Kind2<F, FE, B>
  144. ) => Kind2<F, FE, Kind2<T, E, B>>
  145. <F extends URIS2>(F: Applicative2C<F, E>): <A, B>(
  146. ta: Kind2<T, E, A>,
  147. f: (i: I, a: A) => Kind2<F, E, B>
  148. ) => Kind2<F, E, Kind2<T, E, B>>
  149. <F extends URIS>(F: Applicative1<F>): <A, B>(
  150. ta: Kind2<T, E, A>,
  151. f: (i: I, a: A) => Kind<F, B>
  152. ) => Kind<F, Kind2<T, E, B>>
  153. <F>(F: Applicative<F>): <A, B>(ta: Kind2<T, E, A>, f: (i: I, a: A) => HKT<F, B>) => HKT<F, Kind2<T, E, B>>
  154. }
  155. /**
  156. * @since 2.6.3
  157. */
  158. export interface PipeableTraverseWithIndex1<T extends URIS, I> {
  159. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  160. f: (i: I, a: A) => Kind3<F, R, E, B>
  161. ) => (ta: Kind<T, A>) => Kind3<F, R, E, Kind<T, B>>
  162. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  163. f: (i: I, a: A) => Kind3<F, R, E, B>
  164. ) => (ta: Kind<T, A>) => Kind3<F, R, E, Kind<T, B>>
  165. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  166. f: (i: I, a: A) => Kind2<F, E, B>
  167. ) => (ta: Kind<T, A>) => Kind2<F, E, Kind<T, B>>
  168. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  169. f: (i: I, a: A) => Kind2<F, E, B>
  170. ) => (ta: Kind<T, A>) => Kind2<F, E, Kind<T, B>>
  171. <F extends URIS>(F: Applicative1<F>): <A, B>(f: (i: I, a: A) => Kind<F, B>) => (ta: Kind<T, A>) => Kind<F, Kind<T, B>>
  172. <F>(F: Applicative<F>): <A, B>(f: (i: I, a: A) => HKT<F, B>) => (ta: Kind<T, A>) => HKT<F, Kind<T, B>>
  173. }
  174. /**
  175. * @since 2.6.3
  176. */
  177. export interface PipeableTraverseWithIndex2<T extends URIS2, I> {
  178. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B>(
  179. f: (i: I, a: A) => Kind3<F, R, FE, B>
  180. ) => <TE>(ta: Kind2<T, TE, A>) => Kind3<F, R, FE, Kind2<T, TE, B>>
  181. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  182. f: (i: I, a: A) => Kind2<F, FE, B>
  183. ) => <TE>(ta: Kind2<T, TE, A>) => Kind2<F, FE, Kind2<T, TE, B>>
  184. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  185. f: (i: I, a: A) => Kind2<F, FE, B>
  186. ) => <TE>(ta: Kind2<T, TE, A>) => Kind2<F, FE, Kind2<T, TE, B>>
  187. <F extends URIS>(F: Applicative1<F>): <A, B>(
  188. f: (i: I, a: A) => Kind<F, B>
  189. ) => <E>(ta: Kind2<T, E, A>) => Kind<F, Kind2<T, E, B>>
  190. <F>(F: Applicative<F>): <A, B>(f: (i: I, a: A) => HKT<F, B>) => <E>(ta: Kind2<T, E, A>) => HKT<F, Kind2<T, E, B>>
  191. }