版博士V2.0程序
Não pode escolher mais do que 25 tópicos Os tópicos devem começar com uma letra ou um número, podem incluir traços ('-') e podem ter até 35 caracteres.

Witherable.d.ts 23 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575
  1. /**
  2. * `Witherable` represents data structures which can be _partitioned_ with effects in some `Applicative` functor.
  3. *
  4. * Adapted from https://github.com/LiamGoodacre/purescript-filterable/blob/master/src/Data/Witherable.purs
  5. *
  6. * @since 2.0.0
  7. */
  8. import { Applicative, Applicative1, Applicative2, Applicative2C, Applicative3, Applicative3C } from './Applicative'
  9. import { Compactable, Compactable1, Compactable2, Compactable2C } from './Compactable'
  10. import { Either } from './Either'
  11. import { Filterable, Filterable1, Filterable2, Filterable2C, Filterable3 } from './Filterable'
  12. import { HKT, Kind, Kind2, Kind3, URIS, URIS2, URIS3 } from './HKT'
  13. import { Option } from './Option'
  14. import { Separated } from './Separated'
  15. import { Traversable, Traversable1, Traversable2, Traversable2C, Traversable3 } from './Traversable'
  16. /**
  17. * @category model
  18. * @since 2.0.0
  19. */
  20. export interface Witherable<T> extends Traversable<T>, Filterable<T> {
  21. /**
  22. * Partition a structure with effects
  23. */
  24. readonly wilt: Wilt<T>
  25. /**
  26. * Filter a structure with effects
  27. */
  28. readonly wither: Wither<T>
  29. }
  30. /**
  31. * @category model
  32. * @since 2.0.0
  33. */
  34. export interface Witherable1<T extends URIS> extends Traversable1<T>, Filterable1<T> {
  35. readonly wilt: Wilt1<T>
  36. readonly wither: Wither1<T>
  37. }
  38. /**
  39. * @category model
  40. * @since 2.0.0
  41. */
  42. export interface Witherable2<T extends URIS2> extends Traversable2<T>, Filterable2<T> {
  43. readonly wilt: Wilt2<T>
  44. readonly wither: Wither2<T>
  45. }
  46. /**
  47. * @category model
  48. * @since 2.0.0
  49. */
  50. export interface Witherable2C<T extends URIS2, TL> extends Traversable2C<T, TL>, Filterable2C<T, TL> {
  51. readonly wilt: Wilt2C<T, TL>
  52. readonly wither: Wither2C<T, TL>
  53. }
  54. /**
  55. * @category model
  56. * @since 2.0.0
  57. */
  58. export interface Witherable3<T extends URIS3> extends Traversable3<T>, Filterable3<T> {
  59. readonly wilt: Wilt3<T>
  60. readonly wither: Wither3<T>
  61. }
  62. /**
  63. * @since 2.0.0
  64. */
  65. export interface Wither<W> {
  66. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  67. ta: HKT<W, A>,
  68. f: (a: A) => Kind3<F, R, E, Option<B>>
  69. ) => Kind3<F, R, E, HKT<W, B>>
  70. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  71. ta: HKT<W, A>,
  72. f: (a: A) => Kind3<F, R, E, Option<B>>
  73. ) => Kind3<F, R, E, HKT<W, B>>
  74. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  75. ta: HKT<W, A>,
  76. f: (a: A) => Kind2<F, E, Option<B>>
  77. ) => Kind2<F, E, HKT<W, B>>
  78. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  79. ta: HKT<W, A>,
  80. f: (a: A) => Kind2<F, E, Option<B>>
  81. ) => Kind2<F, E, HKT<W, B>>
  82. <F extends URIS>(F: Applicative1<F>): <A, B>(ta: HKT<W, A>, f: (a: A) => Kind<F, Option<B>>) => Kind<F, HKT<W, B>>
  83. <F>(F: Applicative<F>): <A, B>(ta: HKT<W, A>, f: (a: A) => HKT<F, Option<B>>) => HKT<F, HKT<W, B>>
  84. }
  85. /**
  86. * @since 2.0.0
  87. */
  88. export interface Wither1<W extends URIS> {
  89. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  90. ta: Kind<W, A>,
  91. f: (a: A) => Kind3<F, R, E, Option<B>>
  92. ) => Kind3<F, R, E, Kind<W, B>>
  93. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  94. ta: Kind<W, A>,
  95. f: (a: A) => Kind3<F, R, E, Option<B>>
  96. ) => Kind3<F, R, E, Kind<W, B>>
  97. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  98. ta: Kind<W, A>,
  99. f: (a: A) => Kind2<F, E, Option<B>>
  100. ) => Kind2<F, E, Kind<W, B>>
  101. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  102. ta: Kind<W, A>,
  103. f: (a: A) => Kind2<F, E, Option<B>>
  104. ) => Kind2<F, E, Kind<W, B>>
  105. <F extends URIS>(F: Applicative1<F>): <A, B>(ta: Kind<W, A>, f: (a: A) => Kind<F, Option<B>>) => Kind<F, Kind<W, B>>
  106. <F>(F: Applicative<F>): <A, B>(ta: Kind<W, A>, f: (a: A) => HKT<F, Option<B>>) => HKT<F, Kind<W, B>>
  107. }
  108. /**
  109. * @since 2.0.0
  110. */
  111. export interface Wither2<W extends URIS2> {
  112. <F extends URIS3>(F: Applicative3<F>): <WE, A, R, FE, B>(
  113. ta: Kind2<W, WE, A>,
  114. f: (a: A) => Kind3<F, R, FE, Option<B>>
  115. ) => Kind3<F, R, FE, Kind2<W, WE, B>>
  116. <F extends URIS2>(F: Applicative2<F>): <WE, A, FE, B>(
  117. ta: Kind2<W, WE, A>,
  118. f: (a: A) => Kind2<F, FE, Option<B>>
  119. ) => Kind2<F, FE, Kind2<W, WE, B>>
  120. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <WE, A, B>(
  121. ta: Kind2<W, WE, A>,
  122. f: (a: A) => Kind2<F, FE, Option<B>>
  123. ) => Kind2<F, FE, Kind2<W, WE, B>>
  124. <F extends URIS>(F: Applicative1<F>): <E, A, B>(
  125. ta: Kind2<W, E, A>,
  126. f: (a: A) => Kind<F, Option<B>>
  127. ) => Kind<F, Kind2<W, E, B>>
  128. <F>(F: Applicative<F>): <E, A, B>(ta: Kind2<W, E, A>, f: (a: A) => HKT<F, Option<B>>) => HKT<F, Kind2<W, E, B>>
  129. }
  130. /**
  131. * @since 2.0.0
  132. */
  133. export interface Wither2C<W extends URIS2, E> {
  134. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B>(
  135. ta: Kind2<W, E, A>,
  136. f: (a: A) => Kind3<F, R, FE, Option<B>>
  137. ) => Kind3<F, R, FE, Kind2<W, E, B>>
  138. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  139. ta: Kind2<W, E, A>,
  140. f: (a: A) => Kind2<F, FE, Option<B>>
  141. ) => Kind2<F, FE, Kind2<W, E, B>>
  142. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  143. ta: Kind2<W, E, A>,
  144. f: (a: A) => Kind2<F, FE, Option<B>>
  145. ) => Kind2<F, FE, Kind2<W, E, B>>
  146. <F extends URIS>(F: Applicative1<F>): <A, B>(
  147. ta: Kind2<W, E, A>,
  148. f: (a: A) => Kind<F, Option<B>>
  149. ) => Kind<F, Kind2<W, E, B>>
  150. <F>(F: Applicative<F>): <A, B>(ta: Kind2<W, E, A>, f: (a: A) => HKT<F, Option<B>>) => HKT<F, Kind2<W, E, B>>
  151. }
  152. /**
  153. * @since 2.0.0
  154. */
  155. export interface Wither3<W extends URIS3> {
  156. <F extends URIS3>(F: Applicative3<F>): <WR, WE, A, FR, FE, B>(
  157. ta: Kind3<W, WR, WE, A>,
  158. f: (a: A) => Kind3<F, FR, FE, Option<B>>
  159. ) => Kind3<F, FR, FE, Kind3<W, WR, WE, B>>
  160. <F extends URIS2>(F: Applicative2<F>): <WR, WE, A, FE, B>(
  161. ta: Kind3<W, WR, WE, A>,
  162. f: (a: A) => Kind2<F, FE, Option<B>>
  163. ) => Kind2<F, FE, Kind3<W, WR, WE, B>>
  164. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <R, WE, A, B>(
  165. ta: Kind3<W, R, WE, A>,
  166. f: (a: A) => Kind2<F, FE, Option<B>>
  167. ) => Kind2<F, FE, Kind3<W, R, WE, B>>
  168. <F extends URIS>(F: Applicative1<F>): <R, E, A, B>(
  169. ta: Kind3<W, R, E, A>,
  170. f: (a: A) => Kind<F, Option<B>>
  171. ) => Kind<F, Kind3<W, R, E, B>>
  172. <F>(F: Applicative<F>): <R, E, A, B>(
  173. ta: Kind3<W, R, E, A>,
  174. f: (a: A) => HKT<F, Option<B>>
  175. ) => HKT<F, Kind3<W, R, E, B>>
  176. }
  177. /**
  178. * @since 2.0.0
  179. */
  180. export interface Wilt<W> {
  181. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B, C>(
  182. wa: HKT<W, A>,
  183. f: (a: A) => Kind3<F, R, E, Either<B, C>>
  184. ) => Kind3<F, R, E, Separated<HKT<W, B>, HKT<W, C>>>
  185. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B, C>(
  186. wa: HKT<W, A>,
  187. f: (a: A) => Kind3<F, R, E, Either<B, C>>
  188. ) => Kind3<F, R, E, Separated<HKT<W, B>, HKT<W, C>>>
  189. <F extends URIS2>(F: Applicative2<F>): <A, E, B, C>(
  190. wa: HKT<W, A>,
  191. f: (a: A) => Kind2<F, E, Either<B, C>>
  192. ) => Kind2<F, E, Separated<HKT<W, B>, HKT<W, C>>>
  193. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B, C>(
  194. wa: HKT<W, A>,
  195. f: (a: A) => Kind2<F, E, Either<B, C>>
  196. ) => Kind2<F, E, Separated<HKT<W, B>, HKT<W, C>>>
  197. <F extends URIS>(F: Applicative1<F>): <A, B, C>(
  198. wa: HKT<W, A>,
  199. f: (a: A) => Kind<F, Either<B, C>>
  200. ) => Kind<F, Separated<HKT<W, B>, HKT<W, C>>>
  201. <F>(F: Applicative<F>): <A, B, C>(
  202. wa: HKT<W, A>,
  203. f: (a: A) => HKT<F, Either<B, C>>
  204. ) => HKT<F, Separated<HKT<W, B>, HKT<W, C>>>
  205. }
  206. /**
  207. * @since 2.0.0
  208. */
  209. export interface Wilt1<W extends URIS> {
  210. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B, C>(
  211. wa: Kind<W, A>,
  212. f: (a: A) => Kind3<F, R, E, Either<B, C>>
  213. ) => Kind3<F, R, E, Separated<Kind<W, B>, Kind<W, C>>>
  214. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B, C>(
  215. wa: Kind<W, A>,
  216. f: (a: A) => Kind3<F, R, E, Either<B, C>>
  217. ) => Kind3<F, R, E, Separated<Kind<W, B>, Kind<W, C>>>
  218. <F extends URIS2>(F: Applicative2<F>): <A, E, B, C>(
  219. wa: Kind<W, A>,
  220. f: (a: A) => Kind2<F, E, Either<B, C>>
  221. ) => Kind2<F, E, Separated<Kind<W, B>, Kind<W, C>>>
  222. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B, C>(
  223. wa: Kind<W, A>,
  224. f: (a: A) => Kind2<F, E, Either<B, C>>
  225. ) => Kind2<F, E, Separated<Kind<W, B>, Kind<W, C>>>
  226. <F extends URIS>(F: Applicative1<F>): <A, B, C>(
  227. wa: Kind<W, A>,
  228. f: (a: A) => Kind<F, Either<B, C>>
  229. ) => Kind<F, Separated<Kind<W, B>, Kind<W, C>>>
  230. <F>(F: Applicative<F>): <A, B, C>(
  231. wa: Kind<W, A>,
  232. f: (a: A) => HKT<F, Either<B, C>>
  233. ) => HKT<F, Separated<Kind<W, B>, Kind<W, C>>>
  234. }
  235. /**
  236. * @since 2.0.0
  237. */
  238. export interface Wilt2<W extends URIS2> {
  239. <F extends URIS3>(F: Applicative3<F>): <WE, A, R, FE, B, C>(
  240. wa: Kind2<W, WE, A>,
  241. f: (a: A) => Kind3<F, R, FE, Either<B, C>>
  242. ) => Kind3<F, R, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  243. <F extends URIS2>(F: Applicative2<F>): <WE, A, FE, B, C>(
  244. wa: Kind2<W, WE, A>,
  245. f: (a: A) => Kind2<F, FE, Either<B, C>>
  246. ) => Kind2<F, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  247. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <WE, A, B, C>(
  248. wa: Kind2<W, WE, A>,
  249. f: (a: A) => Kind2<F, FE, Either<B, C>>
  250. ) => Kind2<F, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  251. <F extends URIS>(F: Applicative1<F>): <E, A, B, C>(
  252. wa: Kind2<W, E, A>,
  253. f: (a: A) => Kind<F, Either<B, C>>
  254. ) => Kind<F, Separated<Kind2<W, E, B>, Kind2<W, E, C>>>
  255. <F>(F: Applicative<F>): <E, A, B, C>(
  256. wa: Kind2<W, E, A>,
  257. f: (a: A) => HKT<F, Either<B, C>>
  258. ) => HKT<F, Separated<Kind2<W, E, B>, Kind2<W, E, C>>>
  259. }
  260. /**
  261. * @since 2.0.0
  262. */
  263. export interface Wilt2C<W extends URIS2, E> {
  264. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B, C>(
  265. wa: Kind2<W, E, A>,
  266. f: (a: A) => Kind3<F, R, FE, Either<B, C>>
  267. ) => Kind3<F, R, FE, Separated<Kind2<W, E, B>, Kind2<W, E, C>>>
  268. <F extends URIS2>(F: Applicative2<F>): <A, FE, B, C>(
  269. wa: Kind2<W, E, A>,
  270. f: (a: A) => Kind2<F, FE, Either<B, C>>
  271. ) => Kind2<F, FE, Separated<Kind2<W, E, B>, Kind2<W, E, C>>>
  272. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B, C>(
  273. wa: Kind2<W, E, A>,
  274. f: (a: A) => Kind2<F, FE, Either<B, C>>
  275. ) => Kind2<F, FE, Separated<Kind2<W, E, B>, Kind2<W, E, C>>>
  276. <F extends URIS>(F: Applicative1<F>): <A, B, C>(
  277. wa: Kind2<W, E, A>,
  278. f: (a: A) => Kind<F, Either<B, C>>
  279. ) => Kind<F, Separated<Kind2<W, E, B>, Kind2<W, E, C>>>
  280. <F>(F: Applicative<F>): <A, B, C>(
  281. wa: Kind2<W, E, A>,
  282. f: (a: A) => HKT<F, Either<B, C>>
  283. ) => HKT<F, Separated<Kind2<W, E, B>, Kind2<W, E, C>>>
  284. }
  285. /**
  286. * @since 2.0.0
  287. */
  288. export interface Wilt3<W extends URIS3> {
  289. <F extends URIS3>(F: Applicative3<F>): <WR, WE, A, FR, FE, B, C>(
  290. wa: Kind3<W, WR, WE, A>,
  291. f: (a: A) => Kind3<F, FR, FE, Either<B, C>>
  292. ) => Kind3<F, FR, FE, Separated<Kind3<W, WR, WE, B>, Kind3<W, WR, WE, C>>>
  293. <F extends URIS2>(F: Applicative2<F>): <R, WE, A, FE, B, C>(
  294. wa: Kind3<W, R, WE, A>,
  295. f: (a: A) => Kind2<F, FE, Either<B, C>>
  296. ) => Kind2<F, FE, Separated<Kind3<W, R, WE, B>, Kind3<W, R, WE, C>>>
  297. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <R, WE, A, B, C>(
  298. wa: Kind3<W, R, WE, A>,
  299. f: (a: A) => Kind2<F, FE, Either<B, C>>
  300. ) => Kind2<F, FE, Separated<Kind3<W, R, WE, B>, Kind3<W, R, WE, C>>>
  301. <F extends URIS>(F: Applicative1<F>): <R, E, A, B, C>(
  302. wa: Kind3<W, R, E, A>,
  303. f: (a: A) => Kind<F, Either<B, C>>
  304. ) => Kind<F, Separated<Kind3<W, R, E, B>, Kind3<W, R, E, C>>>
  305. <F>(F: Applicative<F>): <R, E, A, B, C>(
  306. wa: Kind3<W, R, E, A>,
  307. f: (a: A) => HKT<F, Either<B, C>>
  308. ) => HKT<F, Separated<Kind3<W, R, E, B>, Kind3<W, R, E, C>>>
  309. }
  310. /**
  311. * @since 2.6.5
  312. */
  313. export interface PipeableWither<W> {
  314. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  315. f: (a: A) => Kind3<F, R, E, Option<B>>
  316. ) => (ta: HKT<W, A>) => Kind3<F, R, E, HKT<W, B>>
  317. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  318. f: (a: A) => Kind3<F, R, E, Option<B>>
  319. ) => (ta: HKT<W, A>) => Kind3<F, R, E, HKT<W, B>>
  320. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  321. f: (a: A) => Kind2<F, E, Option<B>>
  322. ) => (ta: HKT<W, A>) => Kind2<F, E, HKT<W, B>>
  323. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  324. f: (a: A) => Kind2<F, E, Option<B>>
  325. ) => (ta: HKT<W, A>) => Kind2<F, E, HKT<W, B>>
  326. <F extends URIS>(F: Applicative1<F>): <A, B>(f: (a: A) => Kind<F, Option<B>>) => (ta: HKT<W, A>) => Kind<F, HKT<W, B>>
  327. <F>(F: Applicative<F>): <A, B>(f: (a: A) => HKT<F, Option<B>>) => (ta: HKT<W, A>) => HKT<F, HKT<W, B>>
  328. }
  329. /**
  330. * @since 2.6.5
  331. */
  332. export interface PipeableWither1<W extends URIS> {
  333. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B>(
  334. f: (a: A) => Kind3<F, R, E, Option<B>>
  335. ) => (ta: Kind<W, A>) => Kind3<F, R, E, Kind<W, B>>
  336. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B>(
  337. f: (a: A) => Kind3<F, R, E, Option<B>>
  338. ) => (ta: Kind<W, A>) => Kind3<F, R, E, Kind<W, B>>
  339. <F extends URIS2>(F: Applicative2<F>): <A, E, B>(
  340. f: (a: A) => Kind2<F, E, Option<B>>
  341. ) => (ta: Kind<W, A>) => Kind2<F, E, Kind<W, B>>
  342. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B>(
  343. f: (a: A) => Kind2<F, E, Option<B>>
  344. ) => (ta: Kind<W, A>) => Kind2<F, E, Kind<W, B>>
  345. <F extends URIS>(F: Applicative1<F>): <A, B>(
  346. f: (a: A) => Kind<F, Option<B>>
  347. ) => (ta: Kind<W, A>) => Kind<F, Kind<W, B>>
  348. <F>(F: Applicative<F>): <A, B>(f: (a: A) => HKT<F, Option<B>>) => (ta: Kind<W, A>) => HKT<F, Kind<W, B>>
  349. }
  350. /**
  351. * @since 2.6.5
  352. */
  353. export interface PipeableWither2<W extends URIS2> {
  354. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B>(
  355. f: (a: A) => Kind3<F, R, FE, Option<B>>
  356. ) => <WE>(ta: Kind2<W, WE, A>) => Kind3<F, R, FE, Kind2<W, WE, B>>
  357. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  358. f: (a: A) => Kind2<F, FE, Option<B>>
  359. ) => <WE>(ta: Kind2<W, WE, A>) => Kind2<F, FE, Kind2<W, WE, B>>
  360. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  361. f: (a: A) => Kind2<F, FE, Option<B>>
  362. ) => <WE>(ta: Kind2<W, WE, A>) => Kind2<F, FE, Kind2<W, WE, B>>
  363. <F extends URIS>(F: Applicative1<F>): <A, B>(
  364. f: (a: A) => Kind<F, Option<B>>
  365. ) => <WE>(ta: Kind2<W, WE, A>) => Kind<F, Kind2<W, WE, B>>
  366. <F>(F: Applicative<F>): <A, B>(f: (a: A) => HKT<F, Option<B>>) => <WE>(ta: Kind2<W, WE, A>) => HKT<F, Kind2<W, WE, B>>
  367. }
  368. /**
  369. * @since 2.6.5
  370. */
  371. export interface PipeableWither2C<W extends URIS2, WE> {
  372. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B>(
  373. f: (a: A) => Kind3<F, R, FE, Option<B>>
  374. ) => (ta: Kind2<W, WE, A>) => Kind3<F, R, FE, Kind2<W, WE, B>>
  375. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  376. f: (a: A) => Kind2<F, FE, Option<B>>
  377. ) => (ta: Kind2<W, WE, A>) => Kind2<F, FE, Kind2<W, WE, B>>
  378. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  379. f: (a: A) => Kind2<F, FE, Option<B>>
  380. ) => (ta: Kind2<W, WE, A>) => Kind2<F, FE, Kind2<W, WE, B>>
  381. <F extends URIS>(F: Applicative1<F>): <A, B>(
  382. f: (a: A) => Kind<F, Option<B>>
  383. ) => (ta: Kind2<W, WE, A>) => Kind<F, Kind2<W, WE, B>>
  384. <F>(F: Applicative<F>): <A, B>(f: (a: A) => HKT<F, Option<B>>) => (ta: Kind2<W, WE, A>) => HKT<F, Kind2<W, WE, B>>
  385. }
  386. /**
  387. * @since 2.6.5
  388. */
  389. export interface PipeableWither3<W extends URIS3> {
  390. <F extends URIS3>(F: Applicative3<F>): <A, FR, FE, B>(
  391. f: (a: A) => Kind3<F, FR, FE, Option<B>>
  392. ) => <WR, WE>(ta: Kind3<W, WR, WE, A>) => Kind3<F, FR, FE, Kind3<W, WR, WE, B>>
  393. <F extends URIS2>(F: Applicative2<F>): <A, FE, B>(
  394. f: (a: A) => Kind2<F, FE, Option<B>>
  395. ) => <WR, WE>(ta: Kind3<W, WR, WE, A>) => Kind2<F, FE, Kind3<W, WR, WE, B>>
  396. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B>(
  397. f: (a: A) => Kind2<F, FE, Option<B>>
  398. ) => <WR, WE>(ta: Kind3<W, WR, WE, A>) => Kind2<F, FE, Kind3<W, WR, WE, B>>
  399. <F extends URIS>(F: Applicative1<F>): <A, B>(
  400. f: (a: A) => Kind<F, Option<B>>
  401. ) => <WR, WE>(ta: Kind3<W, WR, WE, A>) => Kind<F, Kind3<W, WR, WE, B>>
  402. <F>(F: Applicative<F>): <A, B>(
  403. f: (a: A) => HKT<F, Option<B>>
  404. ) => <WR, WE>(ta: Kind3<W, WR, WE, A>) => HKT<F, Kind3<W, WR, WE, B>>
  405. }
  406. /**
  407. * @since 2.6.5
  408. */
  409. export interface PipeableWilt<W> {
  410. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B, C>(
  411. f: (a: A) => Kind3<F, R, E, Either<B, C>>
  412. ) => (wa: HKT<W, A>) => Kind3<F, R, E, Separated<HKT<W, B>, HKT<W, C>>>
  413. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B, C>(
  414. f: (a: A) => Kind3<F, R, E, Either<B, C>>
  415. ) => (wa: HKT<W, A>) => Kind3<F, R, E, Separated<HKT<W, B>, HKT<W, C>>>
  416. <F extends URIS2>(F: Applicative2<F>): <A, E, B, C>(
  417. f: (a: A) => Kind2<F, E, Either<B, C>>
  418. ) => (wa: HKT<W, A>) => Kind2<F, E, Separated<HKT<W, B>, HKT<W, C>>>
  419. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B, C>(
  420. f: (a: A) => Kind2<F, E, Either<B, C>>
  421. ) => (wa: HKT<W, A>) => Kind2<F, E, Separated<HKT<W, B>, HKT<W, C>>>
  422. <F extends URIS>(F: Applicative1<F>): <A, B, C>(
  423. f: (a: A) => Kind<F, Either<B, C>>
  424. ) => (wa: HKT<W, A>) => Kind<F, Separated<HKT<W, B>, HKT<W, C>>>
  425. <F>(F: Applicative<F>): <A, B, C>(
  426. f: (a: A) => HKT<F, Either<B, C>>
  427. ) => (wa: HKT<W, A>) => HKT<F, Separated<HKT<W, B>, HKT<W, C>>>
  428. }
  429. /**
  430. * @since 2.6.5
  431. */
  432. export interface PipeableWilt1<W extends URIS> {
  433. <F extends URIS3>(F: Applicative3<F>): <A, R, E, B, C>(
  434. f: (a: A) => Kind3<F, R, E, Either<B, C>>
  435. ) => (wa: Kind<W, A>) => Kind3<F, R, E, Separated<Kind<W, B>, Kind<W, C>>>
  436. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R, B, C>(
  437. f: (a: A) => Kind3<F, R, E, Either<B, C>>
  438. ) => (wa: Kind<W, A>) => Kind3<F, R, E, Separated<Kind<W, B>, Kind<W, C>>>
  439. <F extends URIS2>(F: Applicative2<F>): <A, E, B, C>(
  440. f: (a: A) => Kind2<F, E, Either<B, C>>
  441. ) => (wa: Kind<W, A>) => Kind2<F, E, Separated<Kind<W, B>, Kind<W, C>>>
  442. <F extends URIS2, E>(F: Applicative2C<F, E>): <A, B, C>(
  443. f: (a: A) => Kind2<F, E, Either<B, C>>
  444. ) => (wa: Kind<W, A>) => Kind2<F, E, Separated<Kind<W, B>, Kind<W, C>>>
  445. <F extends URIS>(F: Applicative1<F>): <A, B, C>(
  446. f: (a: A) => Kind<F, Either<B, C>>
  447. ) => (wa: Kind<W, A>) => Kind<F, Separated<Kind<W, B>, Kind<W, C>>>
  448. <F>(F: Applicative<F>): <A, B, C>(
  449. f: (a: A) => HKT<F, Either<B, C>>
  450. ) => (wa: Kind<W, A>) => HKT<F, Separated<Kind<W, B>, Kind<W, C>>>
  451. }
  452. /**
  453. * @since 2.6.5
  454. */
  455. export interface PipeableWilt2<W extends URIS2> {
  456. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B, C>(
  457. f: (a: A) => Kind3<F, R, FE, Either<B, C>>
  458. ) => <WE>(wa: Kind2<W, WE, A>) => Kind3<F, R, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  459. <F extends URIS2>(F: Applicative2<F>): <A, FE, B, C>(
  460. f: (a: A) => Kind2<F, FE, Either<B, C>>
  461. ) => <WE>(wa: Kind2<W, WE, A>) => Kind2<F, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  462. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B, C>(
  463. f: (a: A) => Kind2<F, FE, Either<B, C>>
  464. ) => <WE>(wa: Kind2<W, WE, A>) => Kind2<F, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  465. <F extends URIS>(F: Applicative1<F>): <A, B, C>(
  466. f: (a: A) => Kind<F, Either<B, C>>
  467. ) => <WE>(wa: Kind2<W, WE, A>) => Kind<F, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  468. <F>(F: Applicative<F>): <A, B, C>(
  469. f: (a: A) => HKT<F, Either<B, C>>
  470. ) => <WE>(wa: Kind2<W, WE, A>) => HKT<F, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  471. }
  472. /**
  473. * @since 2.6.5
  474. */
  475. export interface PipeableWilt2C<W extends URIS2, WE> {
  476. <F extends URIS3>(F: Applicative3<F>): <A, R, FE, B, C>(
  477. f: (a: A) => Kind3<F, R, FE, Either<B, C>>
  478. ) => (wa: Kind2<W, WE, A>) => Kind3<F, R, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  479. <F extends URIS2>(F: Applicative2<F>): <A, FE, B, C>(
  480. f: (a: A) => Kind2<F, FE, Either<B, C>>
  481. ) => (wa: Kind2<W, WE, A>) => Kind2<F, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  482. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B, C>(
  483. f: (a: A) => Kind2<F, FE, Either<B, C>>
  484. ) => (wa: Kind2<W, WE, A>) => Kind2<F, FE, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  485. <F extends URIS>(F: Applicative1<F>): <A, B, C>(
  486. f: (a: A) => Kind<F, Either<B, C>>
  487. ) => (wa: Kind2<W, WE, A>) => Kind<F, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  488. <F>(F: Applicative<F>): <A, B, C>(
  489. f: (a: A) => HKT<F, Either<B, C>>
  490. ) => (wa: Kind2<W, WE, A>) => HKT<F, Separated<Kind2<W, WE, B>, Kind2<W, WE, C>>>
  491. }
  492. /**
  493. * @since 2.6.5
  494. */
  495. export interface PipeableWilt3<W extends URIS3> {
  496. <F extends URIS3>(F: Applicative3<F>): <A, FR, FE, B, C>(
  497. f: (a: A) => Kind3<F, FR, FE, Either<B, C>>
  498. ) => <WR, WE>(wa: Kind3<W, WR, WE, A>) => Kind3<F, FR, FE, Separated<Kind3<W, WR, WE, B>, Kind3<W, WR, WE, C>>>
  499. <F extends URIS2>(F: Applicative2<F>): <A, FE, B, C>(
  500. f: (a: A) => Kind2<F, FE, Either<B, C>>
  501. ) => <WR, WE>(wa: Kind3<W, WR, WE, A>) => Kind2<F, FE, Separated<Kind3<W, WR, WE, B>, Kind3<W, WR, WE, C>>>
  502. <F extends URIS2, FE>(F: Applicative2C<F, FE>): <A, B, C>(
  503. f: (a: A) => Kind2<F, FE, Either<B, C>>
  504. ) => <WR, WE>(wa: Kind3<W, WR, WE, A>) => Kind2<F, FE, Separated<Kind3<W, WR, WE, B>, Kind3<W, WR, WE, C>>>
  505. <F extends URIS>(F: Applicative1<F>): <A, B, C>(
  506. f: (a: A) => Kind<F, Either<B, C>>
  507. ) => <WR, WE>(wa: Kind3<W, WR, WE, A>) => Kind<F, Separated<Kind3<W, WR, WE, B>, Kind3<W, WR, WE, C>>>
  508. <F>(F: Applicative<F>): <A, B, C>(
  509. f: (a: A) => HKT<F, Either<B, C>>
  510. ) => <WR, WE>(wa: Kind3<W, WR, WE, A>) => HKT<F, Separated<Kind3<W, WR, WE, B>, Kind3<W, WR, WE, C>>>
  511. }
  512. /**
  513. * Return a `wilt` implementation from `Traversable` and `Compactable`.
  514. *
  515. * @category defaults
  516. * @since 2.11.0
  517. */
  518. export declare function wiltDefault<W extends URIS2, E>(
  519. T: Traversable2C<W, E>,
  520. C: Compactable2<W>
  521. ): Witherable2C<W, E>['wilt']
  522. export declare function wiltDefault<W extends URIS2, E>(
  523. T: Traversable2<W>,
  524. C: Compactable2C<W, E>
  525. ): Witherable2C<W, E>['wilt']
  526. export declare function wiltDefault<W extends URIS>(T: Traversable1<W>, C: Compactable1<W>): Witherable1<W>['wilt']
  527. export declare function wiltDefault<W>(T: Traversable<W>, C: Compactable<W>): Witherable<W>['wilt']
  528. /**
  529. * Return a `wither` implementation from `Traversable` and `Compactable`.
  530. *
  531. * @category defaults
  532. * @since 2.11.0
  533. */
  534. export declare function witherDefault<W extends URIS2, E>(
  535. T: Traversable2C<W, E>,
  536. C: Compactable2<W>
  537. ): Witherable2C<W, E>['wither']
  538. export declare function witherDefault<W extends URIS2, E>(
  539. T: Traversable2<W>,
  540. C: Compactable2C<W, E>
  541. ): Witherable2C<W, E>['wither']
  542. export declare function witherDefault<W extends URIS>(T: Traversable1<W>, C: Compactable1<W>): Witherable1<W>['wither']
  543. export declare function witherDefault<W>(T: Traversable<W>, C: Compactable<W>): Witherable<W>['wither']
  544. /**
  545. * @since 2.11.0
  546. */
  547. export interface FilterE1<G extends URIS> {
  548. <F extends URIS3>(F: Applicative3<F>): <A, R, E>(
  549. predicate: (a: A) => Kind3<F, R, E, boolean>
  550. ) => (ga: Kind<G, A>) => Kind3<F, R, E, Kind<G, A>>
  551. <F extends URIS3, E>(F: Applicative3C<F, E>): <A, R>(
  552. predicate: (a: A) => Kind3<F, R, E, boolean>
  553. ) => (ga: Kind<G, A>) => Kind3<F, R, E, Kind<G, A>>
  554. <F extends URIS2>(F: Applicative2<F>): <A, E>(
  555. predicate: (a: A) => Kind2<F, E, boolean>
  556. ) => (ga: Kind<G, A>) => Kind2<F, E, Kind<G, A>>
  557. <F extends URIS2, E>(F: Applicative2C<F, E>): <A>(
  558. predicate: (a: A) => Kind2<F, E, boolean>
  559. ) => (ga: Kind<G, A>) => Kind2<F, E, Kind<G, A>>
  560. <F extends URIS>(F: Applicative1<F>): <A>(
  561. predicate: (a: A) => Kind<F, boolean>
  562. ) => (ga: Kind<G, A>) => Kind<F, Kind<G, A>>
  563. <F>(F: Applicative<F>): <A>(predicate: (a: A) => HKT<F, boolean>) => (ga: Kind<G, A>) => HKT<F, Kind<G, A>>
  564. }
  565. /**
  566. * Filter values inside a `F` context.
  567. *
  568. * See `ReadonlyArray`'s `filterE` for an example of usage.
  569. *
  570. * @since 2.11.0
  571. */
  572. export declare function filterE<G extends URIS>(W: Witherable1<G>): FilterE1<G>
  573. export declare function filterE<G>(
  574. W: Witherable<G>
  575. ): <F>(F: Applicative<F>) => <A>(predicate: (a: A) => HKT<F, boolean>) => (ga: HKT<G, A>) => HKT<F, HKT<G, A>>