版博士V2.0程序
Nelze vybrat více než 25 témat Téma musí začínat písmenem nebo číslem, může obsahovat pomlčky („-“) a může být dlouhé až 35 znaků.
 
 
 
 

268 řádky
9.2 KiB

  1. /**
  2. * The `Applicative` type class extends the `Apply` type class with a `of` function, which can be used to create values
  3. * of type `f a` from values of type `a`.
  4. *
  5. * Where `Apply` provides the ability to lift functions of two or more arguments to functions whose arguments are
  6. * wrapped using `f`, and `Functor` provides the ability to lift functions of one argument, `pure` can be seen as the
  7. * function which lifts functions of _zero_ arguments. That is, `Applicative` functors support a lifting operation for
  8. * any number of function arguments.
  9. *
  10. * Instances must satisfy the following laws in addition to the `Apply` laws:
  11. *
  12. * 1. Identity: `A.ap(A.of(a => a), fa) <-> fa`
  13. * 2. Homomorphism: `A.ap(A.of(ab), A.of(a)) <-> A.of(ab(a))`
  14. * 3. Interchange: `A.ap(fab, A.of(a)) <-> A.ap(A.of(ab => ab(a)), fab)`
  15. *
  16. * Note. `Functor`'s `map` can be derived: `A.map(x, f) = A.ap(A.of(f), x)`
  17. *
  18. * @since 2.0.0
  19. */
  20. import { Apply, Apply1, Apply2, Apply2C, Apply3, Apply3C, Apply4 } from './Apply'
  21. import {
  22. FunctorComposition,
  23. FunctorComposition11,
  24. FunctorComposition12,
  25. FunctorComposition12C,
  26. FunctorComposition21,
  27. FunctorComposition22,
  28. FunctorComposition22C,
  29. FunctorComposition2C1,
  30. FunctorCompositionHKT1,
  31. FunctorCompositionHKT2,
  32. FunctorCompositionHKT2C
  33. } from './Functor'
  34. import { HKT, Kind, Kind2, Kind3, Kind4, URIS, URIS2, URIS3, URIS4 } from './HKT'
  35. import { Monoid } from './Monoid'
  36. import { Pointed, Pointed1, Pointed2, Pointed2C, Pointed3, Pointed3C, Pointed4 } from './Pointed'
  37. /**
  38. * @category model
  39. * @since 2.0.0
  40. */
  41. export interface Applicative<F> extends Apply<F>, Pointed<F> {}
  42. /**
  43. * @category model
  44. * @since 2.0.0
  45. */
  46. export interface Applicative1<F extends URIS> extends Apply1<F>, Pointed1<F> {}
  47. /**
  48. * @category model
  49. * @since 2.0.0
  50. */
  51. export interface Applicative2<F extends URIS2> extends Apply2<F>, Pointed2<F> {}
  52. /**
  53. * @category model
  54. * @since 2.0.0
  55. */
  56. export interface Applicative2C<F extends URIS2, E> extends Apply2C<F, E>, Pointed2C<F, E> {}
  57. /**
  58. * @category model
  59. * @since 2.0.0
  60. */
  61. export interface Applicative3<F extends URIS3> extends Apply3<F>, Pointed3<F> {}
  62. /**
  63. * @category model
  64. * @since 2.2.0
  65. */
  66. export interface Applicative3C<F extends URIS3, E> extends Apply3C<F, E>, Pointed3C<F, E> {}
  67. /**
  68. * @category model
  69. * @since 2.0.0
  70. */
  71. export interface Applicative4<F extends URIS4> extends Apply4<F>, Pointed4<F> {}
  72. /**
  73. * Lift a monoid into 'F', the inner values are concatenated using the provided `Monoid`.
  74. *
  75. * @since 2.10.0
  76. */
  77. export declare function getApplicativeMonoid<F extends URIS4>(
  78. F: Applicative4<F>
  79. ): <A, S, R, E>(M: Monoid<A>) => Monoid<Kind4<F, S, R, E, A>>
  80. export declare function getApplicativeMonoid<F extends URIS3>(
  81. F: Applicative3<F>
  82. ): <A, R, E>(M: Monoid<A>) => Monoid<Kind3<F, R, E, A>>
  83. export declare function getApplicativeMonoid<F extends URIS3, E>(
  84. F: Applicative3C<F, E>
  85. ): <A, R>(M: Monoid<A>) => Monoid<Kind3<F, R, E, A>>
  86. export declare function getApplicativeMonoid<F extends URIS2>(
  87. F: Applicative2<F>
  88. ): <A, E>(M: Monoid<A>) => Monoid<Kind2<F, E, A>>
  89. export declare function getApplicativeMonoid<F extends URIS2, E>(
  90. F: Applicative2C<F, E>
  91. ): <A>(M: Monoid<A>) => Monoid<Kind2<F, E, A>>
  92. export declare function getApplicativeMonoid<F extends URIS>(
  93. F: Applicative1<F>
  94. ): <A>(M: Monoid<A>) => Monoid<Kind<F, A>>
  95. export declare function getApplicativeMonoid<F>(F: Applicative<F>): <A>(M: Monoid<A>) => Monoid<HKT<F, A>>
  96. /**
  97. * @category zone of death
  98. * @since 2.0.0
  99. * @deprecated
  100. */
  101. export interface ApplicativeComposition<F, G> extends FunctorComposition<F, G> {
  102. readonly of: <A>(a: A) => HKT<F, HKT<G, A>>
  103. readonly ap: <A, B>(fgab: HKT<F, HKT<G, (a: A) => B>>, fga: HKT<F, HKT<G, A>>) => HKT<F, HKT<G, B>>
  104. }
  105. /**
  106. * @category zone of death
  107. * @since 2.0.0
  108. * @deprecated
  109. */
  110. export interface ApplicativeCompositionHKT1<F, G extends URIS> extends FunctorCompositionHKT1<F, G> {
  111. readonly of: <A>(a: A) => HKT<F, Kind<G, A>>
  112. readonly ap: <A, B>(fgab: HKT<F, Kind<G, (a: A) => B>>, fga: HKT<F, Kind<G, A>>) => HKT<F, Kind<G, B>>
  113. }
  114. /**
  115. * @category zone of death
  116. * @since 2.0.0
  117. * @deprecated
  118. */
  119. export interface ApplicativeCompositionHKT2<F, G extends URIS2> extends FunctorCompositionHKT2<F, G> {
  120. readonly of: <E, A>(a: A) => HKT<F, Kind2<G, E, A>>
  121. readonly ap: <E, A, B>(fgab: HKT<F, Kind2<G, E, (a: A) => B>>, fga: HKT<F, Kind2<G, E, A>>) => HKT<F, Kind2<G, E, B>>
  122. }
  123. /**
  124. * @category zone of death
  125. * @since 2.0.0
  126. * @deprecated
  127. */
  128. export interface ApplicativeCompositionHKT2C<F, G extends URIS2, E> extends FunctorCompositionHKT2C<F, G, E> {
  129. readonly of: <A>(a: A) => HKT<F, Kind2<G, E, A>>
  130. readonly ap: <A, B>(fgab: HKT<F, Kind2<G, E, (a: A) => B>>, fga: HKT<F, Kind2<G, E, A>>) => HKT<F, Kind2<G, E, B>>
  131. }
  132. /**
  133. * @category zone of death
  134. * @since 2.0.0
  135. * @deprecated
  136. */
  137. export interface ApplicativeComposition11<F extends URIS, G extends URIS> extends FunctorComposition11<F, G> {
  138. readonly of: <A>(a: A) => Kind<F, Kind<G, A>>
  139. readonly ap: <A, B>(fgab: Kind<F, Kind<G, (a: A) => B>>, fga: Kind<F, Kind<G, A>>) => Kind<F, Kind<G, B>>
  140. }
  141. /**
  142. * @category zone of death
  143. * @since 2.0.0
  144. * @deprecated
  145. */
  146. export interface ApplicativeComposition12<F extends URIS, G extends URIS2> extends FunctorComposition12<F, G> {
  147. readonly of: <E, A>(a: A) => Kind<F, Kind2<G, E, A>>
  148. readonly ap: <E, A, B>(
  149. fgab: Kind<F, Kind2<G, E, (a: A) => B>>,
  150. fga: Kind<F, Kind2<G, E, A>>
  151. ) => Kind<F, Kind2<G, E, B>>
  152. }
  153. /**
  154. * @category zone of death
  155. * @since 2.0.0
  156. * @deprecated
  157. */
  158. export interface ApplicativeComposition12C<F extends URIS, G extends URIS2, E> extends FunctorComposition12C<F, G, E> {
  159. readonly of: <A>(a: A) => Kind<F, Kind2<G, E, A>>
  160. readonly ap: <A, B>(fgab: Kind<F, Kind2<G, E, (a: A) => B>>, fga: Kind<F, Kind2<G, E, A>>) => Kind<F, Kind2<G, E, B>>
  161. }
  162. /**
  163. * @category zone of death
  164. * @since 2.0.0
  165. * @deprecated
  166. */
  167. export interface ApplicativeComposition21<F extends URIS2, G extends URIS> extends FunctorComposition21<F, G> {
  168. readonly of: <E, A>(a: A) => Kind2<F, E, Kind<G, A>>
  169. readonly ap: <E, A, B>(
  170. fgab: Kind2<F, E, Kind<G, (a: A) => B>>,
  171. fga: Kind2<F, E, Kind<G, A>>
  172. ) => Kind2<F, E, Kind<G, B>>
  173. }
  174. /**
  175. * @category zone of death
  176. * @since 2.0.0
  177. * @deprecated
  178. */
  179. export interface ApplicativeComposition2C1<F extends URIS2, G extends URIS, E> extends FunctorComposition2C1<F, G, E> {
  180. readonly of: <A>(a: A) => Kind2<F, E, Kind<G, A>>
  181. readonly ap: <A, B>(fgab: Kind2<F, E, Kind<G, (a: A) => B>>, fga: Kind2<F, E, Kind<G, A>>) => Kind2<F, E, Kind<G, B>>
  182. }
  183. /**
  184. * @category zone of death
  185. * @since 2.0.0
  186. * @deprecated
  187. */
  188. export interface ApplicativeComposition22<F extends URIS2, G extends URIS2> extends FunctorComposition22<F, G> {
  189. readonly of: <FE, GE, A>(a: A) => Kind2<F, FE, Kind2<G, GE, A>>
  190. readonly ap: <FE, GE, A, B>(
  191. fgab: Kind2<F, FE, Kind2<G, GE, (a: A) => B>>,
  192. fga: Kind2<F, FE, Kind2<G, GE, A>>
  193. ) => Kind2<F, FE, Kind2<G, GE, B>>
  194. }
  195. /**
  196. * @category zone of death
  197. * @since 2.0.0
  198. * @deprecated
  199. */
  200. export interface ApplicativeComposition22C<F extends URIS2, G extends URIS2, E> extends FunctorComposition22C<F, G, E> {
  201. readonly of: <FE, A>(a: A) => Kind2<F, FE, Kind2<G, E, A>>
  202. readonly ap: <FE, A, B>(
  203. fgab: Kind2<F, FE, Kind2<G, E, (a: A) => B>>,
  204. fga: Kind2<F, FE, Kind2<G, E, A>>
  205. ) => Kind2<F, FE, Kind2<G, E, B>>
  206. }
  207. /**
  208. * Use [`ap`](./Apply.ts.html#ap) instead.
  209. *
  210. * @category zone of death
  211. * @since 2.0.0
  212. * @deprecated
  213. */
  214. export declare function getApplicativeComposition<F extends URIS2, G extends URIS2, E>(
  215. F: Applicative2<F>,
  216. G: Applicative2C<G, E>
  217. ): ApplicativeComposition22C<F, G, E>
  218. /** @deprecated */
  219. export declare function getApplicativeComposition<F extends URIS2, G extends URIS2>(
  220. F: Applicative2<F>,
  221. G: Applicative2<G>
  222. ): ApplicativeComposition22<F, G>
  223. /** @deprecated */
  224. export declare function getApplicativeComposition<F extends URIS2, G extends URIS2, E>(
  225. F: Applicative2<F>,
  226. G: Applicative2C<G, E>
  227. ): ApplicativeComposition22C<F, G, E>
  228. /** @deprecated */
  229. export declare function getApplicativeComposition<F extends URIS2, G extends URIS>(
  230. F: Applicative2<F>,
  231. G: Applicative1<G>
  232. ): ApplicativeComposition21<F, G>
  233. /** @deprecated */
  234. export declare function getApplicativeComposition<F extends URIS, G extends URIS2>(
  235. F: Applicative1<F>,
  236. G: Applicative2<G>
  237. ): ApplicativeComposition12<F, G>
  238. /** @deprecated */
  239. export declare function getApplicativeComposition<F extends URIS, G extends URIS2, E>(
  240. F: Applicative1<F>,
  241. G: Applicative2C<G, E>
  242. ): ApplicativeComposition12C<F, G, E>
  243. /** @deprecated */
  244. export declare function getApplicativeComposition<F extends URIS, G extends URIS>(
  245. F: Applicative1<F>,
  246. G: Applicative1<G>
  247. ): ApplicativeComposition11<F, G>
  248. /** @deprecated */
  249. export declare function getApplicativeComposition<F, G extends URIS2>(
  250. F: Applicative<F>,
  251. G: Applicative2<G>
  252. ): ApplicativeCompositionHKT2<F, G>
  253. /** @deprecated */
  254. export declare function getApplicativeComposition<F, G extends URIS2, E>(
  255. F: Applicative<F>,
  256. G: Applicative2C<G, E>
  257. ): ApplicativeCompositionHKT2C<F, G, E>
  258. /** @deprecated */
  259. export declare function getApplicativeComposition<F, G extends URIS>(
  260. F: Applicative<F>,
  261. G: Applicative1<G>
  262. ): ApplicativeCompositionHKT1<F, G>
  263. /** @deprecated */
  264. export declare function getApplicativeComposition<F, G>(
  265. F: Applicative<F>,
  266. G: Applicative<G>
  267. ): ApplicativeComposition<F, G>