版博士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.
 
 
 
 

148 wiersze
6.7 KiB

  1. /**
  2. * @since 2.4.0
  3. */
  4. import { HKT, Kind, Kind2, Kind3, URIS, URIS2, URIS3 } from './HKT'
  5. import { Monad, Monad1, Monad2, Monad2C, Monad3 } from './Monad'
  6. import { Monoid } from './Monoid'
  7. /**
  8. * @category model
  9. * @since 2.4.0
  10. */
  11. export interface WriterT<M, W, A> {
  12. (): HKT<M, [A, W]>
  13. }
  14. /**
  15. * @since 2.4.0
  16. */
  17. export interface WriterM<M> {
  18. readonly map: <W, A, B>(fa: WriterT<M, W, A>, f: (a: A) => B) => WriterT<M, W, B>
  19. readonly evalWriter: <W, A>(fa: WriterT<M, W, A>) => HKT<M, A>
  20. readonly execWriter: <W, A>(fa: WriterT<M, W, A>) => HKT<M, W>
  21. readonly tell: <W>(w: W) => WriterT<M, W, void>
  22. readonly listen: <W, A>(fa: WriterT<M, W, A>) => WriterT<M, W, [A, W]>
  23. readonly pass: <W, A>(fa: WriterT<M, W, [A, (w: W) => W]>) => WriterT<M, W, A>
  24. readonly listens: <W, A, B>(fa: WriterT<M, W, A>, f: (w: W) => B) => WriterT<M, W, [A, B]>
  25. readonly censor: <W, A>(fa: WriterT<M, W, A>, f: (w: W) => W) => WriterT<M, W, A>
  26. readonly getMonad: <W>(M: Monoid<W>) => {
  27. readonly _E: W
  28. readonly map: <A, B>(ma: WriterT<M, W, A>, f: (a: A) => B) => WriterT<M, W, B>
  29. readonly of: <A>(a: A) => WriterT<M, W, A>
  30. readonly ap: <A, B>(mab: WriterT<M, W, (a: A) => B>, ma: WriterT<M, W, A>) => WriterT<M, W, B>
  31. readonly chain: <A, B>(ma: WriterT<M, W, A>, f: (a: A) => WriterT<M, W, B>) => WriterT<M, W, B>
  32. }
  33. }
  34. /**
  35. * @category model
  36. * @since 2.4.0
  37. */
  38. export interface WriterT1<M extends URIS, W, A> {
  39. (): Kind<M, [A, W]>
  40. }
  41. /**
  42. * @since 2.4.0
  43. */
  44. export interface WriterM1<M extends URIS> {
  45. readonly map: <W, A, B>(fa: WriterT1<M, W, A>, f: (a: A) => B) => WriterT1<M, W, B>
  46. readonly evalWriter: <W, A>(fa: WriterT1<M, W, A>) => Kind<M, A>
  47. readonly execWriter: <W, A>(fa: WriterT1<M, W, A>) => Kind<M, W>
  48. readonly tell: <W>(w: W) => WriterT1<M, W, void>
  49. readonly listen: <W, A>(fa: WriterT1<M, W, A>) => WriterT1<M, W, [A, W]>
  50. readonly pass: <W, A>(fa: WriterT1<M, W, [A, (w: W) => W]>) => WriterT1<M, W, A>
  51. readonly listens: <W, A, B>(fa: WriterT1<M, W, A>, f: (w: W) => B) => WriterT1<M, W, [A, B]>
  52. readonly censor: <W, A>(fa: WriterT1<M, W, A>, f: (w: W) => W) => WriterT1<M, W, A>
  53. readonly getMonad: <W>(M: Monoid<W>) => {
  54. readonly _E: W
  55. readonly map: <A, B>(ma: WriterT1<M, W, A>, f: (a: A) => B) => WriterT1<M, W, B>
  56. readonly of: <A>(a: A) => WriterT1<M, W, A>
  57. readonly ap: <A, B>(mab: WriterT1<M, W, (a: A) => B>, ma: WriterT1<M, W, A>) => WriterT1<M, W, B>
  58. readonly chain: <A, B>(ma: WriterT1<M, W, A>, f: (a: A) => WriterT1<M, W, B>) => WriterT1<M, W, B>
  59. }
  60. }
  61. /**
  62. * @category model
  63. * @since 2.4.0
  64. */
  65. export interface WriterT2<M extends URIS2, E, W, A> {
  66. (): Kind2<M, E, [A, W]>
  67. }
  68. /**
  69. * @since 2.4.0
  70. */
  71. export interface WriterM2<M extends URIS2> {
  72. readonly map: <E, W, A, B>(fa: WriterT2<M, E, W, A>, f: (a: A) => B) => WriterT2<M, E, W, B>
  73. readonly evalWriter: <E, W, A>(fa: WriterT2<M, E, W, A>) => Kind2<M, E, A>
  74. readonly execWriter: <E, W, A>(fa: WriterT2<M, E, W, A>) => Kind2<M, E, W>
  75. readonly tell: <E, W>(w: W) => WriterT2<M, E, W, void>
  76. readonly listen: <E, W, A>(fa: WriterT2<M, E, W, A>) => WriterT2<M, E, W, [A, W]>
  77. readonly pass: <E, W, A>(fa: WriterT2<M, E, W, [A, (w: W) => W]>) => WriterT2<M, E, W, A>
  78. readonly listens: <E, W, A, B>(fa: WriterT2<M, E, W, A>, f: (w: W) => B) => WriterT2<M, E, W, [A, B]>
  79. readonly censor: <E, W, A>(fa: WriterT2<M, E, W, A>, f: (w: W) => W) => WriterT2<M, E, W, A>
  80. readonly getMonad: <W>(M: Monoid<W>) => {
  81. readonly _E: W
  82. readonly map: <E, A, B>(ma: WriterT2<M, E, W, A>, f: (a: A) => B) => WriterT2<M, E, W, B>
  83. readonly of: <E, A>(a: A) => WriterT2<M, E, W, A>
  84. readonly ap: <E, A, B>(mab: WriterT2<M, E, W, (a: A) => B>, ma: WriterT2<M, E, W, A>) => WriterT2<M, E, W, B>
  85. readonly chain: <E, A, B>(ma: WriterT2<M, E, W, A>, f: (a: A) => WriterT2<M, E, W, B>) => WriterT2<M, E, W, B>
  86. }
  87. }
  88. /**
  89. * @since 2.4.0
  90. */
  91. export interface WriterM2C<M extends URIS2, E> {
  92. readonly map: <W, A, B>(fa: WriterT2<M, E, W, A>, f: (a: A) => B) => WriterT2<M, E, W, B>
  93. readonly evalWriter: <W, A>(fa: WriterT2<M, E, W, A>) => Kind2<M, E, A>
  94. readonly execWriter: <W, A>(fa: WriterT2<M, E, W, A>) => Kind2<M, E, W>
  95. readonly tell: <W>(w: W) => WriterT2<M, E, W, void>
  96. readonly listen: <W, A>(fa: WriterT2<M, E, W, A>) => WriterT2<M, E, W, [A, W]>
  97. readonly pass: <W, A>(fa: WriterT2<M, E, W, [A, (w: W) => W]>) => WriterT2<M, E, W, A>
  98. readonly listens: <W, A, B>(fa: WriterT2<M, E, W, A>, f: (w: W) => B) => WriterT2<M, E, W, [A, B]>
  99. readonly censor: <W, A>(fa: WriterT2<M, E, W, A>, f: (w: W) => W) => WriterT2<M, E, W, A>
  100. readonly getMonad: <W>(M: Monoid<W>) => {
  101. readonly _E: W
  102. readonly map: <A, B>(ma: WriterT2<M, E, W, A>, f: (a: A) => B) => WriterT2<M, E, W, B>
  103. readonly of: <A>(a: A) => WriterT2<M, E, W, A>
  104. readonly ap: <A, B>(mab: WriterT2<M, E, W, (a: A) => B>, ma: WriterT2<M, E, W, A>) => WriterT2<M, E, W, B>
  105. readonly chain: <A, B>(ma: WriterT2<M, E, W, A>, f: (a: A) => WriterT2<M, E, W, B>) => WriterT2<M, E, W, B>
  106. }
  107. }
  108. /**
  109. * @since 2.4.0
  110. */
  111. export interface WriterT3<M extends URIS3, R, E, W, A> {
  112. (): Kind3<M, R, E, [A, W]>
  113. }
  114. /**
  115. * @since 2.4.0
  116. */
  117. export interface WriterM3<M extends URIS3> {
  118. readonly map: <R, E, W, A, B>(fa: WriterT3<M, R, E, W, A>, f: (a: A) => B) => WriterT3<M, R, E, W, B>
  119. readonly evalWriter: <R, E, W, A>(fa: WriterT3<M, R, E, W, A>) => Kind3<M, R, E, A>
  120. readonly execWriter: <R, E, W, A>(fa: WriterT3<M, R, E, W, A>) => Kind3<M, R, E, W>
  121. readonly tell: <R, E, W>(w: W) => WriterT3<M, R, E, W, void>
  122. readonly listen: <R, E, W, A>(fa: WriterT3<M, R, E, W, A>) => WriterT3<M, R, E, W, [A, W]>
  123. readonly pass: <R, E, W, A>(fa: WriterT3<M, R, E, W, [A, (w: W) => W]>) => WriterT3<M, R, E, W, A>
  124. readonly listens: <R, E, W, A, B>(fa: WriterT3<M, R, E, W, A>, f: (w: W) => B) => WriterT3<M, R, E, W, [A, B]>
  125. readonly censor: <R, E, W, A>(fa: WriterT3<M, R, E, W, A>, f: (w: W) => W) => WriterT3<M, R, E, W, A>
  126. readonly getMonad: <W>(M: Monoid<W>) => {
  127. readonly _E: W
  128. readonly map: <R, E, A, B>(ma: WriterT3<M, R, E, W, A>, f: (a: A) => B) => WriterT3<M, R, E, W, B>
  129. readonly of: <R, E, A>(a: A) => WriterT3<M, R, E, W, A>
  130. readonly ap: <R, E, A, B>(
  131. mab: WriterT3<M, R, E, W, (a: A) => B>,
  132. ma: WriterT3<M, R, E, W, A>
  133. ) => WriterT3<M, R, E, W, B>
  134. readonly chain: <R, E, A, B>(
  135. ma: WriterT3<M, R, E, W, A>,
  136. f: (a: A) => WriterT3<M, R, E, W, B>
  137. ) => WriterT3<M, R, E, W, B>
  138. }
  139. }
  140. /**
  141. * @since 2.4.0
  142. */
  143. export declare function getWriterM<M extends URIS3>(M: Monad3<M>): WriterM3<M>
  144. export declare function getWriterM<M extends URIS2>(M: Monad2<M>): WriterM2<M>
  145. export declare function getWriterM<M extends URIS2, E>(M: Monad2C<M, E>): WriterM2C<M, E>
  146. export declare function getWriterM<M extends URIS>(M: Monad1<M>): WriterM1<M>
  147. export declare function getWriterM<M>(M: Monad<M>): WriterM<M>