版博士V2.0程序
Nie możesz wybrać więcej, niż 25 tematów Tematy muszą się zaczynać od litery lub cyfry, mogą zawierać myślniki ('-') i mogą mieć do 35 znaków.

Monoid.d.ts 6.6 KiB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270
  1. /**
  2. * `Monoid` extends the power of `Semigroup` by providing an additional `empty` value.
  3. *
  4. * ```ts
  5. * interface Semigroup<A> {
  6. * readonly concat: (x: A, y: A) => A
  7. * }
  8. *
  9. * interface Monoid<A> extends Semigroup<A> {
  10. * readonly empty: A
  11. * }
  12. * ```
  13. *
  14. * This `empty` value should be an identity for the `concat` operation, which means the following equalities hold for any choice of `x`.
  15. *
  16. * ```ts
  17. * concat(x, empty) = concat(empty, x) = x
  18. * ```
  19. *
  20. * Many types that form a `Semigroup` also form a `Monoid`, such as `number`s (with `0`) and `string`s (with `''`).
  21. *
  22. * ```ts
  23. * import { Monoid } from 'fp-ts/Monoid'
  24. *
  25. * const monoidString: Monoid<string> = {
  26. * concat: (x, y) => x + y,
  27. * empty: ''
  28. * }
  29. * ```
  30. *
  31. * *Adapted from https://typelevel.org/cats*
  32. *
  33. * @since 2.0.0
  34. */
  35. import { Bounded } from './Bounded'
  36. import { Endomorphism } from './Endomorphism'
  37. import { ReadonlyRecord } from './ReadonlyRecord'
  38. import * as Se from './Semigroup'
  39. /**
  40. * @category model
  41. * @since 2.0.0
  42. */
  43. export interface Monoid<A> extends Se.Semigroup<A> {
  44. readonly empty: A
  45. }
  46. /**
  47. * Get a monoid where `concat` will return the minimum, based on the provided bounded order.
  48. *
  49. * The `empty` value is the `top` value.
  50. *
  51. * @example
  52. * import * as N from 'fp-ts/number'
  53. * import * as M from 'fp-ts/Monoid'
  54. *
  55. * const M1 = M.min(N.Bounded)
  56. *
  57. * assert.deepStrictEqual(M1.concat(1, 2), 1)
  58. *
  59. * @category constructors
  60. * @since 2.10.0
  61. */
  62. export declare const min: <A>(B: Bounded<A>) => Monoid<A>
  63. /**
  64. * Get a monoid where `concat` will return the maximum, based on the provided bounded order.
  65. *
  66. * The `empty` value is the `bottom` value.
  67. *
  68. * @example
  69. * import * as N from 'fp-ts/number'
  70. * import * as M from 'fp-ts/Monoid'
  71. *
  72. * const M1 = M.max(N.Bounded)
  73. *
  74. * assert.deepStrictEqual(M1.concat(1, 2), 2)
  75. *
  76. * @category constructors
  77. * @since 2.10.0
  78. */
  79. export declare const max: <A>(B: Bounded<A>) => Monoid<A>
  80. /**
  81. * The dual of a `Monoid`, obtained by swapping the arguments of `concat`.
  82. *
  83. * @example
  84. * import { reverse } from 'fp-ts/Monoid'
  85. * import * as S from 'fp-ts/string'
  86. *
  87. * assert.deepStrictEqual(reverse(S.Monoid).concat('a', 'b'), 'ba')
  88. *
  89. * @since 2.10.0
  90. */
  91. export declare const reverse: <A>(M: Monoid<A>) => Monoid<A>
  92. /**
  93. * Given a struct of monoids returns a monoid for the struct.
  94. *
  95. * @example
  96. * import { struct } from 'fp-ts/Monoid'
  97. * import * as N from 'fp-ts/number'
  98. *
  99. * interface Point {
  100. * readonly x: number
  101. * readonly y: number
  102. * }
  103. *
  104. * const M = struct<Point>({
  105. * x: N.MonoidSum,
  106. * y: N.MonoidSum
  107. * })
  108. *
  109. * assert.deepStrictEqual(M.concat({ x: 1, y: 2 }, { x: 3, y: 4 }), { x: 4, y: 6 })
  110. *
  111. * @since 2.10.0
  112. */
  113. export declare const struct: <A>(monoids: { [K in keyof A]: Monoid<A[K]> }) => Monoid<{
  114. readonly [K_1 in keyof A]: A[K_1]
  115. }>
  116. /**
  117. * Given a tuple of monoids returns a monoid for the tuple.
  118. *
  119. * @example
  120. * import { tuple } from 'fp-ts/Monoid'
  121. * import * as B from 'fp-ts/boolean'
  122. * import * as N from 'fp-ts/number'
  123. * import * as S from 'fp-ts/string'
  124. *
  125. * const M1 = tuple(S.Monoid, N.MonoidSum)
  126. * assert.deepStrictEqual(M1.concat(['a', 1], ['b', 2]), ['ab', 3])
  127. *
  128. * const M2 = tuple(S.Monoid, N.MonoidSum, B.MonoidAll)
  129. * assert.deepStrictEqual(M2.concat(['a', 1, true], ['b', 2, false]), ['ab', 3, false])
  130. *
  131. * @since 2.10.0
  132. */
  133. export declare const tuple: <A extends readonly unknown[]>(
  134. ...monoids: { [K in keyof A]: Monoid<A[K]> }
  135. ) => Monoid<Readonly<A>>
  136. /**
  137. * Given a sequence of `as`, concat them and return the total.
  138. *
  139. * If `as` is empty, return the monoid `empty` value.
  140. *
  141. * @example
  142. * import { concatAll } from 'fp-ts/Monoid'
  143. * import * as N from 'fp-ts/number'
  144. *
  145. * assert.deepStrictEqual(concatAll(N.MonoidSum)([1, 2, 3]), 6)
  146. * assert.deepStrictEqual(concatAll(N.MonoidSum)([]), 0)
  147. *
  148. * @since 2.10.0
  149. */
  150. export declare const concatAll: <A>(M: Monoid<A>) => (as: readonly A[]) => A
  151. /**
  152. * Use [`Monoid`](./void.ts.html#monoid) instead.
  153. *
  154. * @category zone of death
  155. * @since 2.0.0
  156. * @deprecated
  157. */
  158. export declare const monoidVoid: Monoid<void>
  159. /**
  160. * Use [`tuple`](#tuple) instead.
  161. *
  162. * @category zone of death
  163. * @since 2.0.0
  164. * @deprecated
  165. */
  166. export declare const getTupleMonoid: <T extends ReadonlyArray<Monoid<any>>>(
  167. ...monoids: T
  168. ) => Monoid<{
  169. [K in keyof T]: T[K] extends Se.Semigroup<infer A> ? A : never
  170. }>
  171. /**
  172. * Use [`struct`](#struct) instead.
  173. *
  174. * @category zone of death
  175. * @since 2.0.0
  176. * @deprecated
  177. */
  178. export declare const getStructMonoid: <O extends ReadonlyRecord<string, any>>(monoids: {
  179. [K in keyof O]: Monoid<O[K]>
  180. }) => Monoid<O>
  181. /**
  182. * Use [`reverse`](#reverse) instead.
  183. *
  184. * @category zone of death
  185. * @since 2.0.0
  186. * @deprecated
  187. */
  188. export declare const getDualMonoid: <A>(M: Monoid<A>) => Monoid<A>
  189. /**
  190. * Use [`max`](#max) instead.
  191. *
  192. * @category zone of death
  193. * @since 2.0.0
  194. * @deprecated
  195. */
  196. export declare const getJoinMonoid: <A>(B: Bounded<A>) => Monoid<A>
  197. /**
  198. * Use [`min`](#min) instead.
  199. *
  200. * @category zone of death
  201. * @since 2.0.0
  202. * @deprecated
  203. */
  204. export declare const getMeetMonoid: <A>(B: Bounded<A>) => Monoid<A>
  205. /**
  206. * Use [`concatAll`](#concatall) instead.
  207. *
  208. * @category zone of death
  209. * @since 2.0.0
  210. * @deprecated
  211. */
  212. export declare const fold: <A>(M: Monoid<A>) => (as: readonly A[]) => A
  213. /**
  214. * Use [`MonoidAll`](./boolean.ts.html#monoidall) instead.
  215. *
  216. * @category zone of death
  217. * @since 2.0.0
  218. * @deprecated
  219. */
  220. export declare const monoidAll: Monoid<boolean>
  221. /**
  222. * Use [`MonoidAny`](./boolean.ts.html#monoidany) instead.
  223. *
  224. * @category zone of death
  225. * @since 2.0.0
  226. * @deprecated
  227. */
  228. export declare const monoidAny: Monoid<boolean>
  229. /**
  230. * Use [`getMonoid`](./function.ts.html#getmonoid) instead.
  231. *
  232. * @category zone of death
  233. * @since 2.0.0
  234. * @deprecated
  235. */
  236. export declare const getFunctionMonoid: <M>(M: Monoid<M>) => <A = never>() => Monoid<(a: A) => M>
  237. /**
  238. * Use [`getEndomorphismMonoid`](./function.ts.html#getendomorphismmonoid) instead.
  239. *
  240. * **Note**. The execution order in [`getEndomorphismMonoid`](./function.ts.html#getendomorphismmonoid) is reversed.
  241. *
  242. * @category zone of death
  243. * @since 2.0.0
  244. * @deprecated
  245. */
  246. export declare const getEndomorphismMonoid: <A = never>() => Monoid<Endomorphism<A>>
  247. /**
  248. * Use [`Monoid`](./string.ts.html#monoid) instead.
  249. *
  250. * @category zone of death
  251. * @since 2.0.0
  252. * @deprecated
  253. */
  254. export declare const monoidString: Monoid<string>
  255. /**
  256. * Use [`MonoidSum`](./number.ts.html#monoidsum) instead.
  257. *
  258. * @category zone of death
  259. * @since 2.0.0
  260. * @deprecated
  261. */
  262. export declare const monoidSum: Monoid<number>
  263. /**
  264. * Use [`MonoidProduct`](./number.ts.html#monoidproduct) instead.
  265. *
  266. * @category zone of death
  267. * @since 2.0.0
  268. * @deprecated
  269. */
  270. export declare const monoidProduct: Monoid<number>