版博士V2.0程序
You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 

696 lines
22 KiB

  1. /**
  2. * The `Apply` class provides the `ap` which is used to apply a function to an argument under a type constructor.
  3. *
  4. * `Apply` can be used to lift functions of two or more arguments to work on values wrapped with the type constructor
  5. * `f`.
  6. *
  7. * Instances must satisfy the following law in addition to the `Functor` laws:
  8. *
  9. * 1. Associative composition: `F.ap(F.ap(F.map(fbc, bc => ab => a => bc(ab(a))), fab), fa) <-> F.ap(fbc, F.ap(fab, fa))`
  10. *
  11. * Formally, `Apply` represents a strong lax semi-monoidal endofunctor.
  12. *
  13. * @example
  14. * import * as O from 'fp-ts/Option'
  15. * import { pipe } from 'fp-ts/function'
  16. *
  17. * const f = (a: string) => (b: number) => (c: boolean) => a + String(b) + String(c)
  18. * const fa: O.Option<string> = O.some('s')
  19. * const fb: O.Option<number> = O.some(1)
  20. * const fc: O.Option<boolean> = O.some(true)
  21. *
  22. * assert.deepStrictEqual(
  23. * pipe(
  24. * // lift a function
  25. * O.some(f),
  26. * // apply the first argument
  27. * O.ap(fa),
  28. * // apply the second argument
  29. * O.ap(fb),
  30. * // apply the third argument
  31. * O.ap(fc)
  32. * ),
  33. * O.some('s1true')
  34. * )
  35. *
  36. * @since 2.0.0
  37. */
  38. import { Functor, Functor1, Functor2, Functor2C, Functor3, Functor4, Functor3C } from './Functor'
  39. import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT'
  40. import { Semigroup } from './Semigroup'
  41. /**
  42. * @category model
  43. * @since 2.0.0
  44. */
  45. export interface Apply<F> extends Functor<F> {
  46. readonly ap: <A, B>(fab: HKT<F, (a: A) => B>, fa: HKT<F, A>) => HKT<F, B>
  47. }
  48. /**
  49. * @category model
  50. * @since 2.0.0
  51. */
  52. export interface Apply1<F extends URIS> extends Functor1<F> {
  53. readonly ap: <A, B>(fab: Kind<F, (a: A) => B>, fa: Kind<F, A>) => Kind<F, B>
  54. }
  55. /**
  56. * @category model
  57. * @since 2.0.0
  58. */
  59. export interface Apply2<F extends URIS2> extends Functor2<F> {
  60. readonly ap: <E, A, B>(fab: Kind2<F, E, (a: A) => B>, fa: Kind2<F, E, A>) => Kind2<F, E, B>
  61. }
  62. /**
  63. * @category model
  64. * @since 2.0.0
  65. */
  66. export interface Apply2C<F extends URIS2, E> extends Functor2C<F, E> {
  67. readonly ap: <A, B>(fab: Kind2<F, E, (a: A) => B>, fa: Kind2<F, E, A>) => Kind2<F, E, B>
  68. }
  69. /**
  70. * @category model
  71. * @since 2.0.0
  72. */
  73. export interface Apply3<F extends URIS3> extends Functor3<F> {
  74. readonly ap: <R, E, A, B>(fab: Kind3<F, R, E, (a: A) => B>, fa: Kind3<F, R, E, A>) => Kind3<F, R, E, B>
  75. }
  76. /**
  77. * @category model
  78. * @since 2.2.0
  79. */
  80. export interface Apply3C<F extends URIS3, E> extends Functor3C<F, E> {
  81. readonly ap: <R, A, B>(fab: Kind3<F, R, E, (a: A) => B>, fa: Kind3<F, R, E, A>) => Kind3<F, R, E, B>
  82. }
  83. /**
  84. * @category model
  85. * @since 2.0.0
  86. */
  87. export interface Apply4<F extends URIS4> extends Functor4<F> {
  88. readonly ap: <S, R, E, A, B>(fab: Kind4<F, S, R, E, (a: A) => B>, fa: Kind4<F, S, R, E, A>) => Kind4<F, S, R, E, B>
  89. }
  90. /**
  91. * `ap` composition.
  92. *
  93. * @since 2.10.0
  94. */
  95. export declare function ap<F extends URIS4, G extends URIS4>(
  96. F: Apply4<F>,
  97. G: Apply4<G>
  98. ): <FS, FR, FE, GS, GR, GE, A>(
  99. fa: Kind4<F, FS, FR, FE, Kind4<G, GS, GR, GE, A>>
  100. ) => <B>(fab: Kind4<F, FS, FR, FE, Kind4<G, GS, GR, GE, (a: A) => B>>) => Kind4<F, FS, FR, FE, Kind4<G, GS, GR, GE, B>>
  101. export declare function ap<F extends URIS4, G extends URIS3>(
  102. F: Apply4<F>,
  103. G: Apply3<G>
  104. ): <S, FR, FE, GR, GE, A>(
  105. fa: Kind4<F, S, FR, FE, Kind3<G, GR, GE, A>>
  106. ) => <B>(fab: Kind4<F, S, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind4<F, S, FR, FE, Kind3<G, GR, GE, B>>
  107. export declare function ap<F extends URIS4, G extends URIS3, GE>(
  108. F: Apply4<F>,
  109. G: Apply3C<G, GE>
  110. ): <S, FR, FE, GR, A>(
  111. fa: Kind4<F, S, FR, FE, Kind3<G, GR, GE, A>>
  112. ) => <B>(fab: Kind4<F, S, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind4<F, S, FR, FE, Kind3<G, GR, GE, B>>
  113. export declare function ap<F extends URIS4, G extends URIS2>(
  114. F: Apply4<F>,
  115. G: Apply2<G>
  116. ): <S, R, FE, GE, A>(
  117. fa: Kind4<F, S, R, FE, Kind2<G, GE, A>>
  118. ) => <B>(fab: Kind4<F, S, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind4<F, S, R, FE, Kind2<G, GE, B>>
  119. export declare function ap<F extends URIS4, G extends URIS2, GE>(
  120. F: Apply4<F>,
  121. G: Apply2C<G, GE>
  122. ): <S, R, FE, A>(
  123. fa: Kind4<F, S, R, FE, Kind2<G, GE, A>>
  124. ) => <B>(fab: Kind4<F, S, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind4<F, S, R, FE, Kind2<G, GE, B>>
  125. export declare function ap<F extends URIS4, G extends URIS>(
  126. F: Apply4<F>,
  127. G: Apply1<G>
  128. ): <S, R, E, A>(
  129. fa: Kind4<F, S, R, E, Kind<G, A>>
  130. ) => <B>(fab: Kind4<F, S, R, E, Kind<G, (a: A) => B>>) => Kind4<F, S, R, E, Kind<G, B>>
  131. export declare function ap<F extends URIS3, FE, G extends URIS4>(
  132. F: Apply3C<F, FE>,
  133. G: Apply4<G>
  134. ): <FR, S, GR, GE, A>(
  135. fa: Kind3<F, FR, FE, Kind4<G, S, GR, GE, A>>
  136. ) => <B>(fab: Kind3<F, FR, FE, Kind4<G, S, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind4<G, S, GR, GE, B>>
  137. export declare function ap<F extends URIS3, FE, G extends URIS3>(
  138. F: Apply3C<F, FE>,
  139. G: Apply3<G>
  140. ): <FR, GR, GE, A>(
  141. fa: Kind3<F, FR, FE, Kind3<G, GR, GE, A>>
  142. ) => <B>(fab: Kind3<F, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind3<G, GR, GE, B>>
  143. export declare function ap<F extends URIS3, FE, G extends URIS3, GE>(
  144. F: Apply3C<F, FE>,
  145. G: Apply3C<G, GE>
  146. ): <FR, GR, A>(
  147. fa: Kind3<F, FR, FE, Kind3<G, GR, GE, A>>
  148. ) => <B>(fab: Kind3<F, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind3<G, GR, GE, B>>
  149. export declare function ap<F extends URIS3, FE, G extends URIS2>(
  150. F: Apply3C<F, FE>,
  151. G: Apply2<G>
  152. ): <R, GE, A>(
  153. fa: Kind3<F, R, FE, Kind2<G, GE, A>>
  154. ) => <B>(fab: Kind3<F, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind3<F, R, FE, Kind2<G, GE, B>>
  155. export declare function ap<F extends URIS3, FE, G extends URIS2, GE>(
  156. F: Apply3C<F, FE>,
  157. G: Apply2C<G, GE>
  158. ): <R, A>(
  159. fa: Kind3<F, R, FE, Kind2<G, GE, A>>
  160. ) => <B>(fab: Kind3<F, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind3<F, R, FE, Kind2<G, GE, B>>
  161. export declare function ap<F extends URIS3, E, G extends URIS>(
  162. F: Apply3C<F, E>,
  163. G: Apply1<G>
  164. ): <R, A>(
  165. fa: Kind3<F, R, E, Kind<G, A>>
  166. ) => <B>(fab: Kind3<F, R, E, Kind<G, (a: A) => B>>) => Kind3<F, R, E, Kind<G, B>>
  167. export declare function ap<F extends URIS3, G extends URIS4>(
  168. F: Apply3<F>,
  169. G: Apply4<G>
  170. ): <FR, FE, S, GR, GE, A>(
  171. fa: Kind3<F, FR, FE, Kind4<G, S, GR, GE, A>>
  172. ) => <B>(fab: Kind3<F, FR, FE, Kind4<G, S, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind4<G, S, GR, GE, B>>
  173. export declare function ap<F extends URIS3, G extends URIS3>(
  174. F: Apply3<F>,
  175. G: Apply3<G>
  176. ): <FR, FE, GR, GE, A>(
  177. fa: Kind3<F, FR, FE, Kind3<G, GR, GE, A>>
  178. ) => <B>(fab: Kind3<F, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind3<G, GR, GE, B>>
  179. export declare function ap<F extends URIS3, G extends URIS3, GE>(
  180. F: Apply3<F>,
  181. G: Apply3C<G, GE>
  182. ): <FR, FE, GR, A>(
  183. fa: Kind3<F, FR, FE, Kind3<G, GR, GE, A>>
  184. ) => <B>(fab: Kind3<F, FR, FE, Kind3<G, GR, GE, (a: A) => B>>) => Kind3<F, FR, FE, Kind3<G, GR, GE, B>>
  185. export declare function ap<F extends URIS3, G extends URIS2>(
  186. F: Apply3<F>,
  187. G: Apply2<G>
  188. ): <R, FE, GE, A>(
  189. fa: Kind3<F, R, FE, Kind2<G, GE, A>>
  190. ) => <B>(fab: Kind3<F, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind3<F, R, FE, Kind2<G, GE, B>>
  191. export declare function ap<F extends URIS3, G extends URIS2, GE>(
  192. F: Apply3<F>,
  193. G: Apply2C<G, GE>
  194. ): <R, FE, A>(
  195. fa: Kind3<F, R, FE, Kind2<G, GE, A>>
  196. ) => <B>(fab: Kind3<F, R, FE, Kind2<G, GE, (a: A) => B>>) => Kind3<F, R, FE, Kind2<G, GE, B>>
  197. export declare function ap<F extends URIS3, G extends URIS>(
  198. F: Apply3<F>,
  199. G: Apply1<G>
  200. ): <R, E, A>(
  201. fa: Kind3<F, R, E, Kind<G, A>>
  202. ) => <B>(fab: Kind3<F, R, E, Kind<G, (a: A) => B>>) => Kind3<F, R, E, Kind<G, B>>
  203. export declare function ap<F extends URIS2, FE, G extends URIS4>(
  204. F: Apply2C<F, FE>,
  205. G: Apply4<G>
  206. ): <S, R, GE, A>(
  207. fa: Kind2<F, FE, Kind4<G, S, R, GE, A>>
  208. ) => <B>(fab: Kind2<F, FE, Kind4<G, S, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind4<G, S, R, GE, B>>
  209. export declare function ap<F extends URIS2, FE, G extends URIS3>(
  210. F: Apply2C<F, FE>,
  211. G: Apply3<G>
  212. ): <R, GE, A>(
  213. fa: Kind2<F, FE, Kind3<G, R, GE, A>>
  214. ) => <B>(fab: Kind2<F, FE, Kind3<G, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind3<G, R, GE, B>>
  215. export declare function ap<F extends URIS2, FE, G extends URIS3, GE>(
  216. F: Apply2C<F, FE>,
  217. G: Apply3C<G, GE>
  218. ): <R, A>(
  219. fa: Kind2<F, FE, Kind3<G, R, GE, A>>
  220. ) => <B>(fab: Kind2<F, FE, Kind3<G, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind3<G, R, GE, B>>
  221. export declare function ap<F extends URIS2, FE, G extends URIS2>(
  222. F: Apply2C<F, FE>,
  223. G: Apply2<G>
  224. ): <GE, A>(
  225. fa: Kind2<F, FE, Kind2<G, GE, A>>
  226. ) => <B>(fab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>) => Kind2<F, FE, Kind2<G, GE, B>>
  227. export declare function ap<F extends URIS2, FE, G extends URIS2, GE>(
  228. F: Apply2C<F, FE>,
  229. G: Apply2C<G, GE>
  230. ): <A>(
  231. fa: Kind2<F, FE, Kind2<G, GE, A>>
  232. ) => <B>(fab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>) => Kind2<F, FE, Kind2<G, GE, B>>
  233. export declare function ap<F extends URIS2, E, G extends URIS>(
  234. F: Apply2C<F, E>,
  235. G: Apply1<G>
  236. ): <A>(fa: Kind2<F, E, Kind<G, A>>) => <B>(fab: Kind2<F, E, Kind<G, (a: A) => B>>) => Kind2<F, E, Kind<G, B>>
  237. export declare function ap<F extends URIS2, G extends URIS4>(
  238. F: Apply2<F>,
  239. G: Apply4<G>
  240. ): <FE, S, R, GE, A>(
  241. fa: Kind2<F, FE, Kind4<G, S, R, GE, A>>
  242. ) => <B>(fab: Kind2<F, FE, Kind4<G, S, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind4<G, S, R, GE, B>>
  243. export declare function ap<F extends URIS2, G extends URIS3>(
  244. F: Apply2<F>,
  245. G: Apply3<G>
  246. ): <FE, R, GE, A>(
  247. fa: Kind2<F, FE, Kind3<G, R, GE, A>>
  248. ) => <B>(fab: Kind2<F, FE, Kind3<G, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind3<G, R, GE, B>>
  249. export declare function ap<F extends URIS2, G extends URIS3, GE>(
  250. F: Apply2<F>,
  251. G: Apply3C<G, GE>
  252. ): <FE, R, A>(
  253. fa: Kind2<F, FE, Kind3<G, R, GE, A>>
  254. ) => <B>(fab: Kind2<F, FE, Kind3<G, R, GE, (a: A) => B>>) => Kind2<F, FE, Kind3<G, R, GE, B>>
  255. export declare function ap<F extends URIS2, G extends URIS2>(
  256. F: Apply2<F>,
  257. G: Apply2<G>
  258. ): <FE, GE, A>(
  259. fa: Kind2<F, FE, Kind2<G, GE, A>>
  260. ) => <B>(fab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>) => Kind2<F, FE, Kind2<G, GE, B>>
  261. export declare function ap<F extends URIS2, G extends URIS2, GE>(
  262. F: Apply2<F>,
  263. G: Apply2C<G, GE>
  264. ): <FE, A>(
  265. fa: Kind2<F, FE, Kind2<G, GE, A>>
  266. ) => <B>(fab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>) => Kind2<F, FE, Kind2<G, GE, B>>
  267. export declare function ap<F extends URIS2, G extends URIS>(
  268. F: Apply2<F>,
  269. G: Apply1<G>
  270. ): <E, A>(fa: Kind2<F, E, Kind<G, A>>) => <B>(fab: Kind2<F, E, Kind<G, (a: A) => B>>) => Kind2<F, E, Kind<G, B>>
  271. export declare function ap<F extends URIS, G extends URIS4>(
  272. F: Apply1<F>,
  273. G: Apply4<G>
  274. ): <S, R, E, A>(
  275. fa: Kind<F, Kind4<G, S, R, E, A>>
  276. ) => <B>(fab: Kind<F, Kind4<G, S, R, E, (a: A) => B>>) => Kind<F, Kind4<G, S, R, E, B>>
  277. export declare function ap<F extends URIS, G extends URIS3>(
  278. F: Apply1<F>,
  279. G: Apply3<G>
  280. ): <R, E, A>(
  281. fa: Kind<F, Kind3<G, R, E, A>>
  282. ) => <B>(fab: Kind<F, Kind3<G, R, E, (a: A) => B>>) => Kind<F, Kind3<G, R, E, B>>
  283. export declare function ap<F extends URIS, G extends URIS3, E>(
  284. F: Apply1<F>,
  285. G: Apply3C<G, E>
  286. ): <R, A>(
  287. fa: Kind<F, Kind3<G, R, E, A>>
  288. ) => <B>(fab: Kind<F, Kind3<G, R, E, (a: A) => B>>) => Kind<F, Kind3<G, R, E, B>>
  289. export declare function ap<F extends URIS, G extends URIS2>(
  290. F: Apply1<F>,
  291. G: Apply2<G>
  292. ): <E, A>(fa: Kind<F, Kind2<G, E, A>>) => <B>(fab: Kind<F, Kind2<G, E, (a: A) => B>>) => Kind<F, Kind2<G, E, B>>
  293. export declare function ap<F extends URIS, G extends URIS2, E>(
  294. F: Apply1<F>,
  295. G: Apply2C<G, E>
  296. ): <A>(fa: Kind<F, Kind2<G, E, A>>) => <B>(fab: Kind<F, Kind2<G, E, (a: A) => B>>) => Kind<F, Kind2<G, E, B>>
  297. export declare function ap<F extends URIS, G extends URIS>(
  298. F: Apply1<F>,
  299. G: Apply1<G>
  300. ): <A>(fa: Kind<F, Kind<G, A>>) => <B>(fab: Kind<F, Kind<G, (a: A) => B>>) => Kind<F, Kind<G, B>>
  301. export declare function ap<F, G extends URIS4>(
  302. F: Apply<F>,
  303. G: Apply4<G>
  304. ): <S, R, E, A>(
  305. fa: HKT<F, Kind4<G, S, R, E, A>>
  306. ) => <B>(fab: HKT<F, Kind4<G, S, R, E, (a: A) => B>>) => HKT<F, Kind4<G, S, R, E, B>>
  307. export declare function ap<F, G extends URIS3>(
  308. F: Apply<F>,
  309. G: Apply3<G>
  310. ): <R, E, A>(
  311. fa: HKT<F, Kind3<G, R, E, A>>
  312. ) => <B>(fab: HKT<F, Kind3<G, R, E, (a: A) => B>>) => HKT<F, Kind3<G, R, E, B>>
  313. export declare function ap<F, G extends URIS3, E>(
  314. F: Apply<F>,
  315. G: Apply3C<G, E>
  316. ): <R, A>(fa: HKT<F, Kind3<G, R, E, A>>) => <B>(fab: HKT<F, Kind3<G, R, E, (a: A) => B>>) => HKT<F, Kind3<G, R, E, B>>
  317. export declare function ap<F, G extends URIS2>(
  318. F: Apply<F>,
  319. G: Apply2<G>
  320. ): <E, A>(fa: HKT<F, Kind2<G, E, A>>) => <B>(fab: HKT<F, Kind2<G, E, (a: A) => B>>) => HKT<F, Kind2<G, E, B>>
  321. export declare function ap<F, G extends URIS2, E>(
  322. F: Apply<F>,
  323. G: Apply2C<G, E>
  324. ): <A>(fa: HKT<F, Kind2<G, E, A>>) => <B>(fab: HKT<F, Kind2<G, E, (a: A) => B>>) => HKT<F, Kind2<G, E, B>>
  325. export declare function ap<F, G extends URIS>(
  326. F: Apply<F>,
  327. G: Apply1<G>
  328. ): <A>(fa: HKT<F, Kind<G, A>>) => <B>(fab: HKT<F, Kind<G, (a: A) => B>>) => HKT<F, Kind<G, B>>
  329. export declare function ap<F, G>(
  330. F: Apply<F>,
  331. G: Apply<G>
  332. ): <A>(fa: HKT<F, HKT<G, A>>) => <B>(fab: HKT<F, HKT<G, (a: A) => B>>) => HKT<F, HKT<G, B>>
  333. /**
  334. * @since 2.10.0
  335. */
  336. export declare function apFirst<F extends URIS4>(
  337. A: Apply4<F>
  338. ): <S, R, E, B>(second: Kind4<F, S, R, E, B>) => <A>(first: Kind4<F, S, R, E, A>) => Kind4<F, S, R, E, A>
  339. export declare function apFirst<F extends URIS3>(
  340. A: Apply3<F>
  341. ): <R, E, B>(second: Kind3<F, R, E, B>) => <A>(first: Kind3<F, R, E, A>) => Kind3<F, R, E, A>
  342. export declare function apFirst<F extends URIS3, E>(
  343. A: Apply3C<F, E>
  344. ): <R, B>(second: Kind3<F, R, E, B>) => <A>(first: Kind3<F, R, E, A>) => Kind3<F, R, E, A>
  345. export declare function apFirst<F extends URIS2>(
  346. A: Apply2<F>
  347. ): <E, B>(second: Kind2<F, E, B>) => <A>(first: Kind2<F, E, A>) => Kind2<F, E, A>
  348. export declare function apFirst<F extends URIS2, E>(
  349. A: Apply2C<F, E>
  350. ): <B>(second: Kind2<F, E, B>) => <A>(first: Kind2<F, E, A>) => Kind2<F, E, A>
  351. export declare function apFirst<F extends URIS>(
  352. A: Apply1<F>
  353. ): <B>(second: Kind<F, B>) => <A>(first: Kind<F, A>) => Kind<F, A>
  354. export declare function apFirst<F>(A: Apply<F>): <B>(second: HKT<F, B>) => <A>(first: HKT<F, A>) => HKT<F, A>
  355. /**
  356. * @since 2.10.0
  357. */
  358. export declare function apSecond<F extends URIS4>(
  359. A: Apply4<F>
  360. ): <S, R, E, B>(second: Kind4<F, S, R, E, B>) => <A>(first: Kind4<F, S, R, E, A>) => Kind4<F, S, R, E, B>
  361. export declare function apSecond<F extends URIS3>(
  362. A: Apply3<F>
  363. ): <R, E, B>(second: Kind3<F, R, E, B>) => <A>(first: Kind3<F, R, E, A>) => Kind3<F, R, E, B>
  364. export declare function apSecond<F extends URIS3, E>(
  365. A: Apply3C<F, E>
  366. ): <R, B>(second: Kind3<F, R, E, B>) => <A>(first: Kind3<F, R, E, A>) => Kind3<F, R, E, B>
  367. export declare function apSecond<F extends URIS2>(
  368. A: Apply2<F>
  369. ): <E, B>(second: Kind2<F, E, B>) => <A>(first: Kind2<F, E, A>) => Kind2<F, E, B>
  370. export declare function apSecond<F extends URIS2, E>(
  371. A: Apply2C<F, E>
  372. ): <B>(second: Kind2<F, E, B>) => <A>(first: Kind2<F, E, A>) => Kind2<F, E, B>
  373. export declare function apSecond<F extends URIS>(
  374. A: Apply1<F>
  375. ): <B>(second: Kind<F, B>) => <A>(first: Kind<F, A>) => Kind<F, B>
  376. export declare function apSecond<F>(A: Apply<F>): <B>(second: HKT<F, B>) => <A>(first: HKT<F, A>) => HKT<F, B>
  377. /**
  378. * @since 2.10.0
  379. */
  380. export declare function apS<F extends URIS4>(
  381. F: Apply4<F>
  382. ): <N extends string, A, S, R, E, B>(
  383. name: Exclude<N, keyof A>,
  384. fb: Kind4<F, S, R, E, B>
  385. ) => (fa: Kind4<F, S, R, E, A>) => Kind4<
  386. F,
  387. S,
  388. R,
  389. E,
  390. {
  391. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  392. }
  393. >
  394. export declare function apS<F extends URIS3>(
  395. F: Apply3<F>
  396. ): <N extends string, A, R, E, B>(
  397. name: Exclude<N, keyof A>,
  398. fb: Kind3<F, R, E, B>
  399. ) => (fa: Kind3<F, R, E, A>) => Kind3<
  400. F,
  401. R,
  402. E,
  403. {
  404. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  405. }
  406. >
  407. export declare function apS<F extends URIS3, E>(
  408. F: Apply3C<F, E>
  409. ): <N extends string, A, R, B>(
  410. name: Exclude<N, keyof A>,
  411. fb: Kind3<F, R, E, B>
  412. ) => (fa: Kind3<F, R, E, A>) => Kind3<
  413. F,
  414. R,
  415. E,
  416. {
  417. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  418. }
  419. >
  420. export declare function apS<F extends URIS2>(
  421. F: Apply2<F>
  422. ): <N extends string, A, E, B>(
  423. name: Exclude<N, keyof A>,
  424. fb: Kind2<F, E, B>
  425. ) => (fa: Kind2<F, E, A>) => Kind2<
  426. F,
  427. E,
  428. {
  429. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  430. }
  431. >
  432. export declare function apS<F extends URIS2, E>(
  433. F: Apply2C<F, E>
  434. ): <N extends string, A, B>(
  435. name: Exclude<N, keyof A>,
  436. fb: Kind2<F, E, B>
  437. ) => (fa: Kind2<F, E, A>) => Kind2<
  438. F,
  439. E,
  440. {
  441. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  442. }
  443. >
  444. export declare function apS<F extends URIS>(
  445. F: Apply1<F>
  446. ): <N extends string, A, B>(
  447. name: Exclude<N, keyof A>,
  448. fb: Kind<F, B>
  449. ) => (fa: Kind<F, A>) => Kind<
  450. F,
  451. {
  452. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  453. }
  454. >
  455. export declare function apS<F>(F: Apply<F>): <N extends string, A, B>(
  456. name: Exclude<N, keyof A>,
  457. fb: HKT<F, B>
  458. ) => (fa: HKT<F, A>) => HKT<
  459. F,
  460. {
  461. readonly [K in keyof A | N]: K extends keyof A ? A[K] : B
  462. }
  463. >
  464. /**
  465. * Lift a semigroup into 'F', the inner values are concatenated using the provided `Semigroup`.
  466. *
  467. * @since 2.10.0
  468. */
  469. export declare function getApplySemigroup<F extends URIS4>(
  470. F: Apply4<F>
  471. ): <A, S, R, E>(S: Semigroup<A>) => Semigroup<Kind4<F, S, R, E, A>>
  472. export declare function getApplySemigroup<F extends URIS3>(
  473. F: Apply3<F>
  474. ): <A, R, E>(S: Semigroup<A>) => Semigroup<Kind3<F, R, E, A>>
  475. export declare function getApplySemigroup<F extends URIS3, E>(
  476. F: Apply3C<F, E>
  477. ): <A, R>(S: Semigroup<A>) => Semigroup<Kind3<F, R, E, A>>
  478. export declare function getApplySemigroup<F extends URIS2>(
  479. F: Apply2<F>
  480. ): <A, E>(S: Semigroup<A>) => Semigroup<Kind2<F, E, A>>
  481. export declare function getApplySemigroup<F extends URIS2, E>(
  482. F: Apply2C<F, E>
  483. ): <A>(S: Semigroup<A>) => Semigroup<Kind2<F, E, A>>
  484. export declare function getApplySemigroup<F extends URIS>(F: Apply1<F>): <A>(S: Semigroup<A>) => Semigroup<Kind<F, A>>
  485. export declare function getApplySemigroup<F>(F: Apply<F>): <A>(S: Semigroup<A>) => Semigroup<HKT<F, A>>
  486. /**
  487. * Tuple sequencing, i.e., take a tuple of monadic actions and does them from left-to-right, returning the resulting tuple.
  488. *
  489. * @example
  490. * import { sequenceT } from 'fp-ts/Apply'
  491. * import * as O from 'fp-ts/Option'
  492. *
  493. * const sequenceTOption = sequenceT(O.Apply)
  494. * assert.deepStrictEqual(sequenceTOption(O.some(1)), O.some([1]))
  495. * assert.deepStrictEqual(sequenceTOption(O.some(1), O.some('2')), O.some([1, '2']))
  496. * assert.deepStrictEqual(sequenceTOption(O.some(1), O.some('2'), O.none), O.none)
  497. *
  498. * @since 2.0.0
  499. */
  500. export declare function sequenceT<F extends URIS4>(
  501. F: Apply4<F>
  502. ): <S, R, E, T extends Array<Kind4<F, S, R, E, any>>>(
  503. ...t: T & {
  504. readonly 0: Kind4<F, S, R, E, any>
  505. }
  506. ) => Kind4<
  507. F,
  508. S,
  509. R,
  510. E,
  511. {
  512. [K in keyof T]: [T[K]] extends [Kind4<F, S, R, E, infer A>] ? A : never
  513. }
  514. >
  515. export declare function sequenceT<F extends URIS3>(
  516. F: Apply3<F>
  517. ): <R, E, T extends Array<Kind3<F, R, E, any>>>(
  518. ...t: T & {
  519. readonly 0: Kind3<F, R, E, any>
  520. }
  521. ) => Kind3<
  522. F,
  523. R,
  524. E,
  525. {
  526. [K in keyof T]: [T[K]] extends [Kind3<F, R, E, infer A>] ? A : never
  527. }
  528. >
  529. export declare function sequenceT<F extends URIS3, E>(
  530. F: Apply3C<F, E>
  531. ): <R, T extends Array<Kind3<F, R, E, any>>>(
  532. ...t: T & {
  533. readonly 0: Kind3<F, R, E, any>
  534. }
  535. ) => Kind3<
  536. F,
  537. R,
  538. E,
  539. {
  540. [K in keyof T]: [T[K]] extends [Kind3<F, R, E, infer A>] ? A : never
  541. }
  542. >
  543. export declare function sequenceT<F extends URIS2>(
  544. F: Apply2<F>
  545. ): <E, T extends Array<Kind2<F, E, any>>>(
  546. ...t: T & {
  547. readonly 0: Kind2<F, E, any>
  548. }
  549. ) => Kind2<
  550. F,
  551. E,
  552. {
  553. [K in keyof T]: [T[K]] extends [Kind2<F, E, infer A>] ? A : never
  554. }
  555. >
  556. export declare function sequenceT<F extends URIS2, E>(
  557. F: Apply2C<F, E>
  558. ): <T extends Array<Kind2<F, E, any>>>(
  559. ...t: T & {
  560. readonly 0: Kind2<F, E, any>
  561. }
  562. ) => Kind2<
  563. F,
  564. E,
  565. {
  566. [K in keyof T]: [T[K]] extends [Kind2<F, E, infer A>] ? A : never
  567. }
  568. >
  569. export declare function sequenceT<F extends URIS>(
  570. F: Apply1<F>
  571. ): <T extends Array<Kind<F, any>>>(
  572. ...t: T & {
  573. readonly 0: Kind<F, any>
  574. }
  575. ) => Kind<
  576. F,
  577. {
  578. [K in keyof T]: [T[K]] extends [Kind<F, infer A>] ? A : never
  579. }
  580. >
  581. export declare function sequenceT<F>(F: Apply<F>): <T extends Array<HKT<F, any>>>(
  582. ...t: T & {
  583. readonly 0: HKT<F, any>
  584. }
  585. ) => HKT<
  586. F,
  587. {
  588. [K in keyof T]: [T[K]] extends [HKT<F, infer A>] ? A : never
  589. }
  590. >
  591. declare type EnforceNonEmptyRecord<R> = keyof R extends never ? never : R
  592. /**
  593. * Like `Apply.sequenceT` but works with structs instead of tuples.
  594. *
  595. * @example
  596. * import * as E from 'fp-ts/Either'
  597. * import { sequenceS } from 'fp-ts/Apply'
  598. *
  599. * const ado = sequenceS(E.Apply)
  600. *
  601. * assert.deepStrictEqual(
  602. * ado({
  603. * a: E.right(1),
  604. * b: E.right(true)
  605. * }),
  606. * E.right({ a: 1, b: true })
  607. * )
  608. * assert.deepStrictEqual(
  609. * ado({
  610. * a: E.right(1),
  611. * b: E.left('error')
  612. * }),
  613. * E.left('error')
  614. * )
  615. *
  616. * @since 2.0.0
  617. */
  618. export declare function sequenceS<F extends URIS4>(
  619. F: Apply4<F>
  620. ): <S, R, E, NER extends Record<string, Kind4<F, S, R, E, any>>>(
  621. r: EnforceNonEmptyRecord<NER> & Record<string, Kind4<F, S, R, E, any>>
  622. ) => Kind4<
  623. F,
  624. S,
  625. R,
  626. E,
  627. {
  628. [K in keyof NER]: [NER[K]] extends [Kind4<F, any, any, any, infer A>] ? A : never
  629. }
  630. >
  631. export declare function sequenceS<F extends URIS3>(
  632. F: Apply3<F>
  633. ): <R, E, NER extends Record<string, Kind3<F, R, E, any>>>(
  634. r: EnforceNonEmptyRecord<NER> & Record<string, Kind3<F, R, E, any>>
  635. ) => Kind3<
  636. F,
  637. R,
  638. E,
  639. {
  640. [K in keyof NER]: [NER[K]] extends [Kind3<F, any, any, infer A>] ? A : never
  641. }
  642. >
  643. export declare function sequenceS<F extends URIS3, E>(
  644. F: Apply3C<F, E>
  645. ): <R, NER extends Record<string, Kind3<F, R, E, any>>>(
  646. r: EnforceNonEmptyRecord<NER> & Record<string, Kind3<F, R, E, any>>
  647. ) => Kind3<
  648. F,
  649. R,
  650. E,
  651. {
  652. [K in keyof NER]: [NER[K]] extends [Kind3<F, any, any, infer A>] ? A : never
  653. }
  654. >
  655. export declare function sequenceS<F extends URIS2>(
  656. F: Apply2<F>
  657. ): <E, NER extends Record<string, Kind2<F, E, any>>>(
  658. r: EnforceNonEmptyRecord<NER> & Record<string, Kind2<F, E, any>>
  659. ) => Kind2<
  660. F,
  661. E,
  662. {
  663. [K in keyof NER]: [NER[K]] extends [Kind2<F, any, infer A>] ? A : never
  664. }
  665. >
  666. export declare function sequenceS<F extends URIS2, E>(
  667. F: Apply2C<F, E>
  668. ): <NER extends Record<string, Kind2<F, E, any>>>(
  669. r: EnforceNonEmptyRecord<NER>
  670. ) => Kind2<
  671. F,
  672. E,
  673. {
  674. [K in keyof NER]: [NER[K]] extends [Kind2<F, any, infer A>] ? A : never
  675. }
  676. >
  677. export declare function sequenceS<F extends URIS>(
  678. F: Apply1<F>
  679. ): <NER extends Record<string, Kind<F, any>>>(
  680. r: EnforceNonEmptyRecord<NER>
  681. ) => Kind<
  682. F,
  683. {
  684. [K in keyof NER]: [NER[K]] extends [Kind<F, infer A>] ? A : never
  685. }
  686. >
  687. export declare function sequenceS<F>(F: Apply<F>): <NER extends Record<string, HKT<F, any>>>(
  688. r: EnforceNonEmptyRecord<NER>
  689. ) => HKT<
  690. F,
  691. {
  692. [K in keyof NER]: [NER[K]] extends [HKT<F, infer A>] ? A : never
  693. }
  694. >
  695. export {}