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

1 год назад
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550
  1. /**
  2. * `Traversable` represents data structures which can be _traversed_ accumulating results and effects in some
  3. * `Applicative` functor.
  4. *
  5. * - `traverse` runs an action for every element in a data structure, and accumulates the results.
  6. * - `sequence` runs the actions _contained_ in a data structure, and accumulates the results.
  7. *
  8. * The `traverse` and `sequence` functions should be compatible in the following sense:
  9. *
  10. * - `traverse(A)(xs, f) <-> sequence(A)(A.map(xs, f))`
  11. * - `sequence(A)(xs) <-> traverse(A)(xs, identity)`
  12. *
  13. * where `A` is an `Applicative` instance
  14. *
  15. * `Traversable` instances should also be compatible with the corresponding `Foldable` instances, in the following sense:
  16. *
  17. * ```ts
  18. * import { getApplicative, make } from 'fp-ts/Const'
  19. *
  20. * const A = getApplicative(M)
  21. *
  22. * foldMap(M)(xs, f) = traverse(A)(xs, a => make(f(a)))
  23. * ```
  24. *
  25. * where `M` is a `Monoid` instance
  26. *
  27. * @since 2.0.0
  28. */
  29. import {
  30. Applicative,
  31. Applicative1,
  32. Applicative2,
  33. Applicative2C,
  34. Applicative3,
  35. Applicative3C,
  36. Applicative4
  37. } from './Applicative'
  38. import {
  39. Foldable,
  40. Foldable1,
  41. Foldable2,
  42. Foldable2C,
  43. Foldable3,
  44. FoldableComposition,
  45. FoldableComposition11
  46. } from './Foldable'
  47. import { Functor, Functor1, Functor2, Functor2C, Functor3, FunctorComposition, FunctorComposition11 } from './Functor'
  48. import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT'
  49. /**
  50. * @category model
  51. * @since 2.0.0
  52. */
  53. export interface Traversable<T> extends Functor<T>, Foldable<T> {
  54. /**
  55. * Runs an action for every element in a data structure and accumulates the results
  56. */
  57. readonly traverse: Traverse<T>
  58. readonly sequence: Sequence<T>
  59. }
  60. /**
  61. * @category model
  62. * @since 2.0.0
  63. */
  64. export interface Traversable1<T extends URIS> extends Functor1<T>, Foldable1<T> {
  65. readonly traverse: Traverse1<T>
  66. readonly sequence: Sequence1<T>
  67. }
  68. /**
  69. * @category model
  70. * @since 2.0.0
  71. */
  72. export interface Traversable2<T extends URIS2> extends Functor2<T>, Foldable2<T> {
  73. readonly traverse: Traverse2<T>
  74. readonly sequence: Sequence2<T>
  75. }
  76. /**
  77. * @category model
  78. * @since 2.0.0
  79. */
  80. export interface Traversable2C<T extends URIS2, TL> extends Functor2C<T, TL>, Foldable2C<T, TL> {
  81. readonly traverse: Traverse2C<T, TL>
  82. readonly sequence: Sequence2C<T, TL>
  83. }
  84. /**
  85. * @category model
  86. * @since 2.0.0
  87. */
  88. export interface Traversable3<T extends URIS3> extends Functor3<T>, Foldable3<T> {
  89. readonly traverse: Traverse3<T>
  90. readonly sequence: Sequence3<T>
  91. }
  92. /**
  93. * @since 2.0.0
  94. */
  95. export interface Traverse<T> {
  96. <F extends URIS4>(F: Applicative4<F>): <A, S, R, E, B>(
  97. ta: HKT<T, A>,
  98. f: (a: A) => Kind4<F, S, R, E, B>
  99. ) => Kind4<F, S, R, E, HKT<T, B>>
  100. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  101. ta: HKT<T, A>,
  102. f: (a: A) => Kind3<F, R, E, B>
  103. ) => Kind3<F, R, E, HKT<T, B>>
  104. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  105. ta: HKT<T, A>,
  106. f: (a: A) => Kind3<F, R, E, B>
  107. ) => Kind3<F, R, E, HKT<T, B>>
  108. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(ta: HKT<T, A>, f: (a: A) => Kind2<F, E, B>) => Kind2<F, E, HKT<T, B>>
  109. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  110. ta: HKT<T, A>,
  111. f: (a: A) => Kind2<F, E, B>
  112. ) => Kind2<F, E, HKT<T, B>>
  113. <F extends URIS>(F: Applicative1<F>): <A, B>(ta: HKT<T, A>, f: (a: A) => Kind<F, B>) => Kind<F, HKT<T, B>>
  114. <F>(F: Applicative<F>): <A, B>(ta: HKT<T, A>, f: (a: A) => HKT<F, B>) => HKT<F, HKT<T, B>>
  115. }
  116. /**
  117. * @since 2.0.0
  118. */
  119. export interface Traverse1<T extends URIS> {
  120. <F extends URIS4>(F: Applicative4<F>): <A, S, R, E, B>(
  121. ta: Kind<T, A>,
  122. f: (a: A) => Kind4<F, S, R, E, B>
  123. ) => Kind4<F, S, R, E, Kind<T, B>>
  124. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  125. ta: Kind<T, A>,
  126. f: (a: A) => Kind3<F, R, E, B>
  127. ) => Kind3<F, R, E, Kind<T, B>>
  128. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  129. ta: Kind<T, A>,
  130. f: (a: A) => Kind3<F, R, E, B>
  131. ) => Kind3<F, R, E, Kind<T, B>>
  132. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  133. ta: Kind<T, A>,
  134. f: (a: A) => Kind2<F, E, B>
  135. ) => Kind2<F, E, Kind<T, B>>
  136. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  137. ta: Kind<T, A>,
  138. f: (a: A) => Kind2<F, E, B>
  139. ) => Kind2<F, E, Kind<T, B>>
  140. <F extends URIS>(F: Applicative1<F>): <A, B>(ta: Kind<T, A>, f: (a: A) => Kind<F, B>) => Kind<F, Kind<T, B>>
  141. <F>(F: Applicative<F>): <A, B>(ta: Kind<T, A>, f: (a: A) => HKT<F, B>) => HKT<F, Kind<T, B>>
  142. }
  143. /**
  144. * @since 2.0.0
  145. */
  146. export interface Traverse2<T extends URIS2> {
  147. <F extends URIS4>(F: Applicative4<F>): <TE, A, S, R, FE, B>(
  148. ta: Kind2<T, TE, A>,
  149. f: (a: A) => Kind4<F, S, R, FE, B>
  150. ) => Kind4<F, S, R, FE, Kind2<T, TE, B>>
  151. <F extends URIS3>(F: Applicative3<F>): <TE, A, R, FE, B>(
  152. ta: Kind2<T, TE, A>,
  153. f: (a: A) => Kind3<F, R, FE, B>
  154. ) => Kind3<F, R, FE, Kind2<T, TE, B>>
  155. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <TE, A, R, B>(
  156. ta: Kind2<T, TE, A>,
  157. f: (a: A) => Kind3<F, R, FE, B>
  158. ) => Kind3<F, R, FE, Kind2<T, TE, B>>
  159. <F extends URIS2>(F: Applicative2<F>): <TE, A, FE, B>(
  160. ta: Kind2<T, TE, A>,
  161. f: (a: A) => Kind2<F, FE, B>
  162. ) => Kind2<F, FE, Kind2<T, TE, B>>
  163. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <TE, A, B>(
  164. ta: Kind2<T, TE, A>,
  165. f: (a: A) => Kind2<F, FE, B>
  166. ) => Kind2<F, FE, Kind2<T, TE, B>>
  167. <F extends URIS>(F: Applicative1<F>): <E, A, B>(
  168. ta: Kind2<T, E, A>,
  169. f: (a: A) => Kind<F, B>
  170. ) => Kind<F, Kind2<T, E, B>>
  171. <F>(F: Applicative<F>): <E, A, B>(ta: Kind2<T, E, A>, f: (a: A) => HKT<F, B>) => HKT<F, Kind2<T, E, B>>
  172. }
  173. /**
  174. * @since 2.0.0
  175. */
  176. export interface Traverse2C<T extends URIS2, E> {
  177. <F extends URIS4>(F: Applicative4<F>): <A, S, R, FE, B>(
  178. ta: Kind2<T, E, A>,
  179. f: (a: A) => Kind4<F, S, R, FE, B>
  180. ) => Kind4<F, S, R, FE, Kind2<T, E, B>>
  181. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B>(
  182. ta: Kind2<T, E, A>,
  183. f: (a: A) => Kind3<F, R, FE, B>
  184. ) => Kind3<F, R, FE, Kind2<T, E, B>>
  185. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <A, R, B>(
  186. ta: Kind2<T, E, A>,
  187. f: (a: A) => Kind3<F, R, FE, B>
  188. ) => Kind3<F, R, FE, Kind2<T, E, B>>
  189. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  190. ta: Kind2<T, E, A>,
  191. f: (a: A) => Kind2<F, FE, B>
  192. ) => Kind2<F, FE, Kind2<T, E, B>>
  193. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  194. ta: Kind2<T, E, A>,
  195. f: (a: A) => Kind2<F, FE, B>
  196. ) => Kind2<F, FE, Kind2<T, E, B>>
  197. <F extends URIS>(F: Applicative1<F>): <A, B>(ta: Kind2<T, E, A>, f: (a: A) => Kind<F, B>) => Kind<F, Kind2<T, E, B>>
  198. <F>(F: Applicative<F>): <A, B>(ta: Kind2<T, E, A>, f: (a: A) => HKT<F, B>) => HKT<F, Kind2<T, E, B>>
  199. }
  200. /**
  201. * @since 2.0.0
  202. */
  203. export interface Traverse3<T extends URIS3> {
  204. <F extends URIS4>(F: Applicative4<F>): <TR, TE, A, S, FR, FE, B>(
  205. ta: Kind3<T, TR, TE, A>,
  206. f: (a: A) => Kind4<F, S, FR, FE, B>
  207. ) => Kind4<F, S, FR, FE, Kind3<T, TR, TE, B>>
  208. <F extends URIS3>(F: Applicative3<F>): <TR, TE, A, FR, FE, B>(
  209. ta: Kind3<T, TR, TE, A>,
  210. f: (a: A) => Kind3<F, FR, FE, B>
  211. ) => Kind3<F, FR, FE, Kind3<T, TR, TE, B>>
  212. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <TR, TE, A, FR, B>(
  213. ta: Kind3<T, TR, TE, A>,
  214. f: (a: A) => Kind3<F, FR, FE, B>
  215. ) => Kind3<F, FR, FE, Kind3<T, TR, TE, B>>
  216. <F extends URIS2>(F: Applicative2<F>): <TR, A, TE, FE, B>(
  217. ta: Kind3<T, TR, TE, A>,
  218. f: (a: A) => Kind2<F, FE, B>
  219. ) => Kind2<F, FE, Kind3<T, TR, TE, B>>
  220. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <R, TE, A, B>(
  221. ta: Kind3<T, R, TE, A>,
  222. f: (a: A) => Kind2<F, FE, B>
  223. ) => Kind2<F, FE, Kind3<T, R, TE, B>>
  224. <F extends URIS>(F: Applicative1<F>): <R, E, A, B>(
  225. ta: Kind3<T, R, E, A>,
  226. f: (a: A) => Kind<F, B>
  227. ) => Kind<F, Kind3<T, R, E, B>>
  228. <F>(F: Applicative<F>): <R, E, A, B>(ta: Kind3<T, R, E, A>, f: (a: A) => HKT<F, B>) => HKT<F, Kind3<T, R, E, B>>
  229. }
  230. /**
  231. * @since 2.0.0
  232. */
  233. export interface Sequence<T> {
  234. <F extends URIS4>(F: Applicative4<F>): <S, R, E, A>(ta: HKT<T, Kind4<F, S, R, E, A>>) => Kind4<F, S, R, E, HKT<T, A>>
  235. <F extends URIS3>(F: Applicative3<F>): <R, E, A>(ta: HKT<T, Kind3<F, R, E, A>>) => Kind3<F, R, E, HKT<T, A>>
  236. <F extends URIS3, E>(F: Applicative3C<F, E>): <R, A>(ta: HKT<T, Kind3<F, R, E, A>>) => Kind3<F, R, E, HKT<T, A>>
  237. <F extends URIS2>(F: Applicative2<F>): <E, A>(ta: HKT<T, Kind2<F, E, A>>) => Kind2<F, E, HKT<T, A>>
  238. <F extends URIS2, E>(F: Applicative2C<F, E>): <A>(ta: HKT<T, Kind2<F, E, A>>) => Kind2<F, E, HKT<T, A>>
  239. <F extends URIS>(F: Applicative1<F>): <A>(ta: HKT<T, Kind<F, A>>) => Kind<F, HKT<T, A>>
  240. <F>(F: Applicative<F>): <A>(ta: HKT<T, HKT<F, A>>) => HKT<F, HKT<T, A>>
  241. }
  242. /**
  243. * @since 2.0.0
  244. */
  245. export interface Sequence1<T extends URIS> {
  246. <F extends URIS4>(F: Applicative4<F>): <S, R, E, A>(
  247. ta: Kind<T, Kind4<F, S, R, E, A>>
  248. ) => Kind4<F, S, R, E, Kind<T, A>>
  249. <F extends URIS3>(F: Applicative3<F>): <R, E, A>(ta: Kind<T, Kind3<F, R, E, A>>) => Kind3<F, R, E, Kind<T, A>>
  250. <F extends URIS3, E>(F: Applicative3C<F, E>): <R, A>(ta: Kind<T, Kind3<F, R, E, A>>) => Kind3<F, R, E, Kind<T, A>>
  251. <F extends URIS2>(F: Applicative2<F>): <E, A>(ta: Kind<T, Kind2<F, E, A>>) => Kind2<F, E, Kind<T, A>>
  252. <F extends URIS2, E>(F: Applicative2C<F, E>): <A>(ta: Kind<T, Kind2<F, E, A>>) => Kind2<F, E, Kind<T, A>>
  253. <F extends URIS>(F: Applicative1<F>): <A>(ta: Kind<T, Kind<F, A>>) => Kind<F, Kind<T, A>>
  254. <F>(F: Applicative<F>): <A>(ta: Kind<T, HKT<F, A>>) => HKT<F, Kind<T, A>>
  255. }
  256. /**
  257. * @since 2.0.0
  258. */
  259. export interface Sequence2<T extends URIS2> {
  260. <F extends URIS4>(F: Applicative4<F>): <TE, S, R, FE, A>(
  261. ta: Kind2<T, TE, Kind4<F, S, R, FE, A>>
  262. ) => Kind4<F, S, R, FE, Kind2<T, TE, A>>
  263. <F extends URIS3>(F: Applicative3<F>): <TE, R, FE, A>(
  264. ta: Kind2<T, TE, Kind3<F, R, FE, A>>
  265. ) => Kind3<F, R, FE, Kind2<T, TE, A>>
  266. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <TE, R, A>(
  267. ta: Kind2<T, TE, Kind3<F, R, FE, A>>
  268. ) => Kind3<F, R, FE, Kind2<T, TE, A>>
  269. <F extends URIS2>(F: Applicative2<F>): <TE, FE, A>(ta: Kind2<T, TE, Kind2<F, FE, A>>) => Kind2<F, FE, Kind2<T, TE, A>>
  270. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <TE, A>(
  271. ta: Kind2<T, TE, Kind2<F, FE, A>>
  272. ) => Kind2<F, FE, Kind2<T, TE, A>>
  273. <F extends URIS>(F: Applicative1<F>): <E, A>(ta: Kind2<T, E, Kind<F, A>>) => Kind<F, Kind2<T, E, A>>
  274. <F>(F: Applicative<F>): <E, A>(ta: Kind2<T, E, HKT<F, A>>) => HKT<F, Kind2<T, E, A>>
  275. }
  276. /**
  277. * @since 2.0.0
  278. */
  279. export interface Sequence2C<T extends URIS2, E> {
  280. <F extends URIS4>(F: Applicative4<F>): <S, R, FE, A>(
  281. ta: Kind2<T, E, Kind4<F, S, R, FE, A>>
  282. ) => Kind4<F, S, R, FE, Kind2<T, E, A>>
  283. <F extends URIS3>(F: Applicative3<F>): <R, FE, A>(
  284. ta: Kind2<T, E, Kind3<F, R, FE, A>>
  285. ) => Kind3<F, R, FE, Kind2<T, E, A>>
  286. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <R, A>(
  287. ta: Kind2<T, E, Kind3<F, R, FE, A>>
  288. ) => Kind3<F, R, FE, Kind2<T, E, A>>
  289. <F extends URIS2>(F: Applicative2<F>): <FE, A>(ta: Kind2<T, E, Kind2<F, FE, A>>) => Kind2<F, FE, Kind2<T, E, A>>
  290. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A>(ta: Kind2<T, E, Kind2<F, FE, A>>) => Kind2<F, FE, Kind2<T, E, A>>
  291. <F extends URIS>(F: Applicative1<F>): <A>(ta: Kind2<T, E, Kind<F, A>>) => Kind<F, Kind2<T, E, A>>
  292. <F>(F: Applicative<F>): <A>(ta: Kind2<T, E, HKT<F, A>>) => HKT<F, Kind2<T, E, A>>
  293. }
  294. /**
  295. * @since 2.0.0
  296. */
  297. export interface Sequence3<T extends URIS3> {
  298. <F extends URIS4>(F: Applicative4<F>): <TR, TE, S, FR, FE, A>(
  299. ta: Kind3<T, TR, TE, Kind4<F, S, FR, FE, A>>
  300. ) => Kind4<F, S, FR, FE, Kind3<T, TR, TE, A>>
  301. <F extends URIS3>(F: Applicative3<F>): <TR, TE, FR, FE, A>(
  302. ta: Kind3<T, TR, TE, Kind3<F, FR, FE, A>>
  303. ) => Kind3<F, FR, FE, Kind3<T, TR, TE, A>>
  304. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <TR, TE, FR, A>(
  305. ta: Kind3<T, TR, TE, Kind3<F, FR, FE, A>>
  306. ) => Kind3<F, FR, FE, Kind3<T, TR, TE, A>>
  307. <F extends URIS2>(F: Applicative2<F>): <R, TE, FE, A>(
  308. ta: Kind3<T, R, TE, Kind2<F, FE, A>>
  309. ) => Kind2<F, FE, Kind3<T, R, TE, A>>
  310. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <R, TE, A>(
  311. ta: Kind3<T, R, TE, Kind2<F, FE, A>>
  312. ) => Kind2<F, FE, Kind3<T, R, TE, A>>
  313. <F extends URIS>(F: Applicative1<F>): <R, E, A>(ta: Kind3<T, R, E, Kind<F, A>>) => Kind<F, Kind3<T, R, E, A>>
  314. <F>(F: Applicative<F>): <R, E, A>(ta: Kind3<T, R, E, HKT<F, A>>) => HKT<F, Kind3<T, R, E, A>>
  315. }
  316. /**
  317. * `traverse` composition.
  318. *
  319. * @since 2.10.0
  320. */
  321. export declare function traverse<T extends URIS, G extends URIS2>(
  322. T: Traversable1<T>,
  323. G: Traversable2<G>
  324. ): {
  325. <F extends URIS4>(F: Applicative4<F>): <A, S, R, FE, B>(
  326. f: (a: A) => Kind4<F, S, R, FE, B>
  327. ) => <GE>(tga: Kind<T, Kind2<G, GE, A>>) => Kind4<F, S, R, FE, Kind<T, Kind2<G, GE, B>>>
  328. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B>(
  329. f: (a: A) => Kind3<F, R, FE, B>
  330. ) => <GE>(tga: Kind<T, Kind2<G, GE, A>>) => Kind3<F, R, FE, Kind<T, Kind2<G, GE, B>>>
  331. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <A, R, B>(
  332. f: (a: A) => Kind3<F, R, FE, B>
  333. ) => <GE>(tga: Kind<T, Kind2<G, GE, A>>) => Kind3<F, R, FE, Kind<T, Kind2<G, GE, B>>>
  334. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  335. f: (a: A) => Kind2<F, FE, B>
  336. ) => <GE>(tga: Kind<T, Kind2<G, GE, A>>) => Kind2<F, FE, Kind<T, Kind2<G, GE, B>>>
  337. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  338. f: (a: A) => Kind2<F, FE, B>
  339. ) => <GE>(tga: Kind<T, Kind2<G, GE, A>>) => Kind2<F, FE, Kind<T, Kind2<G, GE, B>>>
  340. <F extends URIS>(F: Applicative1<F>): <A, B>(
  341. f: (a: A) => Kind<F, B>
  342. ) => <GE>(tga: Kind<T, Kind2<G, GE, A>>) => Kind<F, Kind<T, Kind2<G, GE, B>>>
  343. <F>(F: Applicative<F>): <A, B>(
  344. f: (a: A) => HKT<F, B>
  345. ) => <GE>(tga: Kind<T, Kind2<G, GE, A>>) => HKT<F, Kind<T, Kind2<G, GE, B>>>
  346. }
  347. export declare function traverse<T extends URIS, G extends URIS>(
  348. T: Traversable1<T>,
  349. G: Traversable1<G>
  350. ): {
  351. <F extends URIS4>(F: Applicative4<F>): <A, S, R, E, B>(
  352. f: (a: A) => Kind4<F, S, R, E, B>
  353. ) => (tga: Kind<T, Kind<G, A>>) => Kind4<F, S, R, E, Kind<T, Kind<G, B>>>
  354. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  355. f: (a: A) => Kind3<F, R, E, B>
  356. ) => (tga: Kind<T, Kind<G, A>>) => Kind3<F, R, E, Kind<T, Kind<G, B>>>
  357. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  358. f: (a: A) => Kind3<F, R, E, B>
  359. ) => (tga: Kind<T, Kind<G, A>>) => Kind3<F, R, E, Kind<T, Kind<G, B>>>
  360. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  361. f: (a: A) => Kind2<F, E, B>
  362. ) => (tga: Kind<T, Kind<G, A>>) => Kind2<F, E, Kind<T, Kind<G, B>>>
  363. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  364. f: (a: A) => Kind2<F, E, B>
  365. ) => (tga: Kind<T, Kind<G, A>>) => Kind2<F, E, Kind<T, Kind<G, B>>>
  366. <F extends URIS>(F: Applicative1<F>): <A, B>(
  367. f: (a: A) => Kind<F, B>
  368. ) => (tga: Kind<T, Kind<G, A>>) => Kind<F, Kind<T, Kind<G, B>>>
  369. <F>(F: Applicative<F>): <A, B>(f: (a: A) => HKT<F, B>) => (tga: Kind<T, Kind<G, A>>) => HKT<F, Kind<T, Kind<G, B>>>
  370. }
  371. export declare function traverse<T, G>(
  372. T: Traversable<T>,
  373. G: Traversable<G>
  374. ): <F>(F: Applicative<F>) => <A, B>(f: (a: A) => HKT<F, B>) => (tga: HKT<T, HKT<G, A>>) => HKT<F, HKT<T, HKT<G, B>>>
  375. /**
  376. * `sequence` composition.
  377. *
  378. * @since 2.10.0
  379. */
  380. export declare function sequence<T extends URIS, G extends URIS2>(
  381. T: Traversable1<T>,
  382. G: Traversable2<G>
  383. ): {
  384. <F extends URIS4>(F: Applicative4<F>): <GE, S, R, FE, A>(
  385. tgfa: Kind<T, Kind2<G, GE, Kind4<F, S, R, FE, A>>>
  386. ) => Kind4<F, S, R, FE, Kind<T, Kind2<G, GE, A>>>
  387. <F extends URIS3>(F: Applicative3<F>): <GE, R, FE, A>(
  388. tgfa: Kind<T, Kind2<G, GE, Kind3<F, R, FE, A>>>
  389. ) => Kind3<F, R, FE, Kind<T, Kind2<G, GE, A>>>
  390. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <GE, R, A>(
  391. tgfa: Kind<T, Kind2<G, GE, Kind3<F, R, FE, A>>>
  392. ) => Kind3<F, R, FE, Kind<T, Kind2<G, GE, A>>>
  393. <F extends URIS2>(F: Applicative2<F>): <GE, FE, A>(
  394. tgfa: Kind<T, Kind2<G, GE, Kind2<F, FE, A>>>
  395. ) => Kind2<F, FE, Kind<T, Kind2<G, GE, A>>>
  396. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <GE, A>(
  397. tgfa: Kind<T, Kind2<G, GE, Kind2<F, FE, A>>>
  398. ) => Kind2<F, FE, Kind<T, Kind2<G, GE, A>>>
  399. <F extends URIS>(F: Applicative1<F>): <GE, A>(
  400. tgfa: Kind<T, Kind2<G, GE, Kind<F, A>>>
  401. ) => Kind<F, Kind<T, Kind2<G, GE, A>>>
  402. <F>(F: Applicative<F>): <A>(tgfa: HKT<T, HKT<G, HKT<F, A>>>) => HKT<F, HKT<T, HKT<G, A>>>
  403. }
  404. export declare function sequence<T extends URIS, G extends URIS>(
  405. T: Traversable1<T>,
  406. G: Traversable1<G>
  407. ): {
  408. <F extends URIS4>(F: Applicative4<F>): <S, R, E, A>(
  409. tgfa: Kind<T, Kind<G, Kind4<F, S, R, E, A>>>
  410. ) => Kind4<F, S, R, E, Kind<T, Kind<G, A>>>
  411. <F extends URIS3>(F: Applicative3<F>): <R, E, A>(
  412. tgfa: Kind<T, Kind<G, Kind3<F, R, E, A>>>
  413. ) => Kind3<F, R, E, Kind<T, Kind<G, A>>>
  414. <F extends URIS3, E>(F: Applicative3C<F, E>): <R, A>(
  415. tgfa: Kind<T, Kind<G, Kind3<F, R, E, A>>>
  416. ) => Kind3<F, R, E, Kind<T, Kind<G, A>>>
  417. <F extends URIS2>(F: Applicative2<F>): <E, A>(
  418. tgfa: Kind<T, Kind<G, Kind2<F, E, A>>>
  419. ) => Kind2<F, E, Kind<T, Kind<G, A>>>
  420. <F extends URIS2, E>(F: Applicative2C<F, E>): <A>(
  421. tgfa: Kind<T, Kind<G, Kind2<F, E, A>>>
  422. ) => Kind2<F, E, Kind<T, Kind<G, A>>>
  423. <F extends URIS>(F: Applicative1<F>): <A>(tgfa: Kind<T, Kind<G, Kind<F, A>>>) => Kind<F, Kind<T, Kind<G, A>>>
  424. <F>(F: Applicative<F>): <A>(tgfa: HKT<T, HKT<G, HKT<F, A>>>) => HKT<F, HKT<T, HKT<G, A>>>
  425. }
  426. export declare function sequence<T, G>(
  427. T: Traversable<T>,
  428. G: Traversable<G>
  429. ): <F>(F: Applicative<F>) => <A>(tgfa: HKT<T, HKT<G, HKT<F, A>>>) => HKT<F, HKT<T, HKT<G, A>>>
  430. /**
  431. * @since 2.6.3
  432. */
  433. export interface PipeableTraverse1<T extends URIS> {
  434. <F extends URIS3>(F: Applicative3<F>): <A, FR, FE, B>(
  435. f: (a: A) => Kind3<F, FR, FE, B>
  436. ) => (ta: Kind<T, A>) => Kind3<F, FR, FE, Kind<T, B>>
  437. <F extends URIS3, FE>(F: Applicative3C<F, FE>): <A, FR, B>(
  438. f: (a: A) => Kind3<F, FR, FE, B>
  439. ) => (ta: Kind<T, A>) => Kind3<F, FR, FE, Kind<T, B>>
  440. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  441. f: (a: A) => Kind2<F, FE, B>
  442. ) => (ta: Kind<T, A>) => Kind2<F, FE, Kind<T, B>>
  443. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  444. f: (a: A) => Kind2<F, FE, B>
  445. ) => (ta: Kind<T, A>) => Kind2<F, FE, Kind<T, B>>
  446. <F extends URIS>(F: Applicative1<F>): <A, B>(f: (a: A) => Kind<F, B>) => (ta: Kind<T, A>) => Kind<F, Kind<T, B>>
  447. <F>(F: Applicative<F>): <A, B>(f: (a: A) => HKT<F, B>) => (ta: Kind<T, A>) => HKT<F, Kind<T, B>>
  448. }
  449. /**
  450. * @since 2.6.3
  451. */
  452. export interface PipeableTraverse2<T extends URIS2> {
  453. <F extends URIS3>(F: Applicative3<F>): <A, FR, FE, B>(
  454. f: (a: A) => Kind3<F, FR, FE, B>
  455. ) => <TE>(ta: Kind2<T, TE, A>) => Kind3<F, FR, FE, Kind2<T, TE, B>>
  456. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  457. f: (a: A) => Kind2<F, FE, B>
  458. ) => <TE>(ta: Kind2<T, TE, A>) => Kind2<F, FE, Kind2<T, TE, B>>
  459. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  460. f: (a: A) => Kind2<F, FE, B>
  461. ) => <TE>(ta: Kind2<T, TE, A>) => Kind2<F, FE, Kind2<T, TE, B>>
  462. <F extends URIS>(F: Applicative1<F>): <A, B>(
  463. f: (a: A) => Kind<F, B>
  464. ) => <TE>(ta: Kind2<T, TE, A>) => Kind<F, Kind2<T, TE, B>>
  465. <F>(F: Applicative<F>): <A, B>(f: (a: A) => HKT<F, B>) => <TE>(ta: Kind2<T, TE, A>) => HKT<F, Kind2<T, TE, B>>
  466. }
  467. /**
  468. * @category zone of death
  469. * @since 2.0.0
  470. * @deprecated
  471. */
  472. export interface TraversableComposition<F, G> extends FoldableComposition<F, G>, FunctorComposition<F, G> {
  473. readonly traverse: <H>(
  474. H: Applicative<H>
  475. ) => <A, B>(fga: HKT<F, HKT<G, A>>, f: (a: A) => HKT<H, B>) => HKT<H, HKT<F, HKT<G, B>>>
  476. readonly sequence: <H>(H: Applicative<H>) => <A>(fga: HKT<F, HKT<G, HKT<H, A>>>) => HKT<H, HKT<F, HKT<G, A>>>
  477. }
  478. /**
  479. * @category zone of death
  480. * @since 2.0.0
  481. * @deprecated
  482. */
  483. export interface TraverseComposition11<F extends URIS, G extends URIS> {
  484. <H extends URIS3>(H: Applicative3<H>): <R, E, A, B>(
  485. fga: Kind<F, Kind<G, A>>,
  486. f: (a: A) => Kind3<H, R, E, B>
  487. ) => Kind3<H, R, E, Kind<F, Kind<G, B>>>
  488. <H extends URIS2>(H: Applicative2<H>): <E, A, B>(
  489. fga: Kind<F, Kind<G, A>>,
  490. f: (a: A) => Kind2<H, E, B>
  491. ) => Kind2<H, E, Kind<F, Kind<G, B>>>
  492. <H extends URIS2, E>(H: Applicative2C<H, E>): <A, B>(
  493. fga: Kind<F, Kind<G, A>>,
  494. f: (a: A) => Kind2<H, E, B>
  495. ) => Kind2<H, E, Kind<F, Kind<G, B>>>
  496. <H extends URIS>(H: Applicative1<H>): <A, B>(
  497. fga: Kind<F, Kind<G, A>>,
  498. f: (a: A) => Kind<H, B>
  499. ) => Kind<H, Kind<F, Kind<G, B>>>
  500. <H>(H: Applicative<H>): <A, B>(fga: Kind<F, Kind<G, A>>, f: (a: A) => HKT<H, B>) => HKT<H, Kind<F, Kind<G, B>>>
  501. }
  502. /**
  503. * @category zone of death
  504. * @since 2.0.0
  505. * @deprecated
  506. */
  507. export interface SequenceComposition11<F extends URIS, G extends URIS> {
  508. <H extends URIS3>(H: Applicative3<H>): <R, E, A>(
  509. fga: Kind<F, Kind<G, Kind3<H, R, E, A>>>
  510. ) => Kind3<H, R, E, Kind<F, Kind<G, A>>>
  511. <H extends URIS2>(H: Applicative2<H>): <E, A>(
  512. fga: Kind<F, Kind<G, Kind2<H, E, A>>>
  513. ) => Kind2<H, E, Kind<F, Kind<G, A>>>
  514. <H extends URIS2, E>(H: Applicative2C<H, E>): <A>(
  515. fga: Kind<F, Kind<G, Kind2<H, E, A>>>
  516. ) => Kind2<H, E, Kind<F, Kind<G, A>>>
  517. <H extends URIS>(H: Applicative1<H>): <A>(fga: Kind<F, Kind<G, Kind<H, A>>>) => Kind<H, Kind<F, Kind<G, A>>>
  518. <H>(H: Applicative<H>): <A>(fga: Kind<F, Kind<G, HKT<H, A>>>) => HKT<H, Kind<F, Kind<G, A>>>
  519. }
  520. /**
  521. * @category zone of death
  522. * @since 2.0.0
  523. * @deprecated
  524. */
  525. export interface TraversableComposition11<F extends URIS, G extends URIS>
  526. extends FoldableComposition11<F, G>,
  527. FunctorComposition11<F, G> {
  528. readonly traverse: TraverseComposition11<F, G>
  529. readonly sequence: SequenceComposition11<F, G>
  530. }
  531. /**
  532. * Use
  533. * - [`traverse`](#traverse)
  534. * - [`sequence`](#sequence)
  535. *
  536. * instead.
  537. *
  538. * @category zone of death
  539. * @since 2.0.0
  540. * @deprecated
  541. */
  542. export declare function getTraversableComposition<F extends URIS, G extends URIS>(
  543. F: Traversable1<F>,
  544. G: Traversable1<G>
  545. ): TraversableComposition11<F, G>
  546. /** @deprecated */
  547. export declare function getTraversableComposition<F, G>(
  548. F: Traversable<F>,
  549. G: Traversable<G>
  550. ): TraversableComposition<F, G>