版博士V2.0程序
Вы не можете выбрать более 25 тем Темы должны начинаться с буквы или цифры, могут содержать дефисы(-) и должны содержать не более 35 символов.
 
 
 
 

163 строки
4.0 KiB

  1. // -------------------------------------------------------------------------------------
  2. // refinements
  3. // -------------------------------------------------------------------------------------
  4. /**
  5. * @category refinements
  6. * @since 2.11.0
  7. */
  8. export var isBoolean = function (u) { return typeof u === 'boolean'; };
  9. /**
  10. * Less strict version of [`match`](#match).
  11. *
  12. * The `W` suffix (short for **W**idening) means that the handler return types will be merged.
  13. *
  14. * @category pattern matching
  15. * @since 2.10.0
  16. */
  17. export var matchW = function (onFalse, onTrue) {
  18. return function (value) {
  19. return value ? onTrue() : onFalse();
  20. };
  21. };
  22. /**
  23. * Alias of [`matchW`](#matchw).
  24. *
  25. * @category pattern matching
  26. * @since 2.10.0
  27. */
  28. export var foldW = matchW;
  29. /**
  30. * Defines the fold over a boolean value.
  31. * Takes two thunks `onTrue`, `onFalse` and a `boolean` value.
  32. * If `value` is false, `onFalse()` is returned, otherwise `onTrue()`.
  33. *
  34. * @example
  35. * import { some, map } from 'fp-ts/Option'
  36. * import { pipe } from 'fp-ts/function'
  37. * import { match } from 'fp-ts/boolean'
  38. *
  39. * assert.deepStrictEqual(
  40. * pipe(
  41. * some(true),
  42. * map(match(() => 'false', () => 'true'))
  43. * ),
  44. * some('true')
  45. * )
  46. *
  47. * @category pattern matching
  48. * @since 2.10.0
  49. */
  50. export var match = foldW;
  51. /**
  52. * Alias of [`match`](#match).
  53. *
  54. * @category pattern matching
  55. * @since 2.2.0
  56. */
  57. export var fold = match;
  58. // -------------------------------------------------------------------------------------
  59. // instances
  60. // -------------------------------------------------------------------------------------
  61. /**
  62. * @category instances
  63. * @since 2.10.0
  64. */
  65. export var Eq = {
  66. equals: function (first, second) { return first === second; }
  67. };
  68. /**
  69. * @category instances
  70. * @since 2.10.0
  71. */
  72. export var BooleanAlgebra = {
  73. meet: function (first, second) { return first && second; },
  74. join: function (first, second) { return first || second; },
  75. zero: false,
  76. one: true,
  77. implies: function (first, second) { return !first || second; },
  78. not: function (b) { return !b; }
  79. };
  80. /**
  81. * `boolean` semigroup under conjunction.
  82. *
  83. * @example
  84. * import { SemigroupAll } from 'fp-ts/boolean'
  85. *
  86. * assert.deepStrictEqual(SemigroupAll.concat(true, true), true)
  87. * assert.deepStrictEqual(SemigroupAll.concat(true, false), false)
  88. *
  89. * @category instances
  90. * @since 2.10.0
  91. */
  92. export var SemigroupAll = {
  93. concat: function (first, second) { return first && second; }
  94. };
  95. /**
  96. * `boolean` semigroup under disjunction.
  97. *
  98. * @example
  99. * import { SemigroupAny } from 'fp-ts/boolean'
  100. *
  101. * assert.deepStrictEqual(SemigroupAny.concat(true, true), true)
  102. * assert.deepStrictEqual(SemigroupAny.concat(true, false), true)
  103. * assert.deepStrictEqual(SemigroupAny.concat(false, false), false)
  104. *
  105. * @category instances
  106. * @since 2.10.0
  107. */
  108. export var SemigroupAny = {
  109. concat: function (first, second) { return first || second; }
  110. };
  111. /**
  112. * `boolean` monoid under conjunction.
  113. *
  114. * The `empty` value is `true`.
  115. *
  116. * @example
  117. * import { MonoidAll } from 'fp-ts/boolean'
  118. *
  119. * assert.deepStrictEqual(MonoidAll.concat(true, true), true)
  120. * assert.deepStrictEqual(MonoidAll.concat(true, false), false)
  121. *
  122. * @category instances
  123. * @since 2.10.0
  124. */
  125. export var MonoidAll = {
  126. concat: SemigroupAll.concat,
  127. empty: true
  128. };
  129. /**
  130. * `boolean` monoid under disjunction.
  131. *
  132. * The `empty` value is `false`.
  133. *
  134. * @example
  135. * import { MonoidAny } from 'fp-ts/boolean'
  136. *
  137. * assert.deepStrictEqual(MonoidAny.concat(true, true), true)
  138. * assert.deepStrictEqual(MonoidAny.concat(true, false), true)
  139. * assert.deepStrictEqual(MonoidAny.concat(false, false), false)
  140. *
  141. * @category instances
  142. * @since 2.10.0
  143. */
  144. export var MonoidAny = {
  145. concat: SemigroupAny.concat,
  146. empty: false
  147. };
  148. /**
  149. * @category instances
  150. * @since 2.10.0
  151. */
  152. export var Ord = {
  153. equals: Eq.equals,
  154. compare: function (first, second) { return (first < second ? -1 : first > second ? 1 : 0); }
  155. };
  156. /**
  157. * @category instances
  158. * @since 2.10.0
  159. */
  160. export var Show = {
  161. show: function (b) { return JSON.stringify(b); }
  162. };