@stevenvo780/st-lang 4.8.0 → 4.10.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/dist/logic/profiles/natural-deduction-nk/formula.d.ts +18 -0
  2. package/dist/logic/profiles/natural-deduction-nk/formula.d.ts.map +1 -0
  3. package/dist/logic/profiles/natural-deduction-nk/formula.js +102 -0
  4. package/dist/logic/profiles/natural-deduction-nk/formula.js.map +1 -0
  5. package/dist/logic/profiles/natural-deduction-nk/index.d.ts +5 -0
  6. package/dist/logic/profiles/natural-deduction-nk/index.d.ts.map +1 -0
  7. package/dist/logic/profiles/natural-deduction-nk/index.js +28 -0
  8. package/dist/logic/profiles/natural-deduction-nk/index.js.map +1 -0
  9. package/dist/logic/profiles/natural-deduction-nk/prover.d.ts +49 -0
  10. package/dist/logic/profiles/natural-deduction-nk/prover.d.ts.map +1 -0
  11. package/dist/logic/profiles/natural-deduction-nk/prover.js +557 -0
  12. package/dist/logic/profiles/natural-deduction-nk/prover.js.map +1 -0
  13. package/dist/logic/profiles/natural-deduction-nk/types.d.ts +48 -0
  14. package/dist/logic/profiles/natural-deduction-nk/types.d.ts.map +1 -0
  15. package/dist/logic/profiles/natural-deduction-nk/types.js +35 -0
  16. package/dist/logic/profiles/natural-deduction-nk/types.js.map +1 -0
  17. package/dist/logic/profiles/quantum/index.d.ts +153 -0
  18. package/dist/logic/profiles/quantum/index.d.ts.map +1 -0
  19. package/dist/logic/profiles/quantum/index.js +788 -0
  20. package/dist/logic/profiles/quantum/index.js.map +1 -0
  21. package/dist/namespaces/reasoning.d.ts +2 -1
  22. package/dist/namespaces/reasoning.d.ts.map +1 -1
  23. package/dist/namespaces/reasoning.js +3 -1
  24. package/dist/namespaces/reasoning.js.map +1 -1
  25. package/dist/proof-systems/certificate/canonical.d.ts +18 -0
  26. package/dist/proof-systems/certificate/canonical.d.ts.map +1 -0
  27. package/dist/proof-systems/certificate/canonical.js +79 -0
  28. package/dist/proof-systems/certificate/canonical.js.map +1 -0
  29. package/dist/proof-systems/certificate/generate.d.ts +39 -0
  30. package/dist/proof-systems/certificate/generate.d.ts.map +1 -0
  31. package/dist/proof-systems/certificate/generate.js +259 -0
  32. package/dist/proof-systems/certificate/generate.js.map +1 -0
  33. package/dist/proof-systems/certificate/index.d.ts +7 -0
  34. package/dist/proof-systems/certificate/index.d.ts.map +1 -0
  35. package/dist/proof-systems/certificate/index.js +23 -0
  36. package/dist/proof-systems/certificate/index.js.map +1 -0
  37. package/dist/proof-systems/certificate/lfsc.d.ts +15 -0
  38. package/dist/proof-systems/certificate/lfsc.d.ts.map +1 -0
  39. package/dist/proof-systems/certificate/lfsc.js +395 -0
  40. package/dist/proof-systems/certificate/lfsc.js.map +1 -0
  41. package/dist/proof-systems/certificate/rules.d.ts +8 -0
  42. package/dist/proof-systems/certificate/rules.d.ts.map +1 -0
  43. package/dist/proof-systems/certificate/rules.js +369 -0
  44. package/dist/proof-systems/certificate/rules.js.map +1 -0
  45. package/dist/proof-systems/certificate/types.d.ts +114 -0
  46. package/dist/proof-systems/certificate/types.d.ts.map +1 -0
  47. package/dist/proof-systems/certificate/types.js +18 -0
  48. package/dist/proof-systems/certificate/types.js.map +1 -0
  49. package/dist/proof-systems/certificate/verify.d.ts +20 -0
  50. package/dist/proof-systems/certificate/verify.d.ts.map +1 -0
  51. package/dist/proof-systems/certificate/verify.js +171 -0
  52. package/dist/proof-systems/certificate/verify.js.map +1 -0
  53. package/dist/reasoning/automata/dfa.d.ts +17 -0
  54. package/dist/reasoning/automata/dfa.d.ts.map +1 -0
  55. package/dist/reasoning/automata/dfa.js +276 -0
  56. package/dist/reasoning/automata/dfa.js.map +1 -0
  57. package/dist/reasoning/automata/index.d.ts +8 -0
  58. package/dist/reasoning/automata/index.d.ts.map +1 -0
  59. package/dist/reasoning/automata/index.js +64 -0
  60. package/dist/reasoning/automata/index.js.map +1 -0
  61. package/dist/reasoning/automata/languages.d.ts +10 -0
  62. package/dist/reasoning/automata/languages.d.ts.map +1 -0
  63. package/dist/reasoning/automata/languages.js +78 -0
  64. package/dist/reasoning/automata/languages.js.map +1 -0
  65. package/dist/reasoning/automata/nfa.d.ts +8 -0
  66. package/dist/reasoning/automata/nfa.d.ts.map +1 -0
  67. package/dist/reasoning/automata/nfa.js +122 -0
  68. package/dist/reasoning/automata/nfa.js.map +1 -0
  69. package/dist/reasoning/automata/pda.d.ts +10 -0
  70. package/dist/reasoning/automata/pda.d.ts.map +1 -0
  71. package/dist/reasoning/automata/pda.js +169 -0
  72. package/dist/reasoning/automata/pda.js.map +1 -0
  73. package/dist/reasoning/automata/regex.d.ts +6 -0
  74. package/dist/reasoning/automata/regex.d.ts.map +1 -0
  75. package/dist/reasoning/automata/regex.js +259 -0
  76. package/dist/reasoning/automata/regex.js.map +1 -0
  77. package/dist/reasoning/automata/types.d.ts +69 -0
  78. package/dist/reasoning/automata/types.d.ts.map +1 -0
  79. package/dist/reasoning/automata/types.js +29 -0
  80. package/dist/reasoning/automata/types.js.map +1 -0
  81. package/dist/reasoning/ban-logic/analyze.d.ts +31 -0
  82. package/dist/reasoning/ban-logic/analyze.d.ts.map +1 -0
  83. package/dist/reasoning/ban-logic/analyze.js +113 -0
  84. package/dist/reasoning/ban-logic/analyze.js.map +1 -0
  85. package/dist/reasoning/ban-logic/index.d.ts +7 -0
  86. package/dist/reasoning/ban-logic/index.d.ts.map +1 -0
  87. package/dist/reasoning/ban-logic/index.js +66 -0
  88. package/dist/reasoning/ban-logic/index.js.map +1 -0
  89. package/dist/reasoning/ban-logic/protocols.d.ts +54 -0
  90. package/dist/reasoning/ban-logic/protocols.d.ts.map +1 -0
  91. package/dist/reasoning/ban-logic/protocols.js +219 -0
  92. package/dist/reasoning/ban-logic/protocols.js.map +1 -0
  93. package/dist/reasoning/ban-logic/rules.d.ts +83 -0
  94. package/dist/reasoning/ban-logic/rules.d.ts.map +1 -0
  95. package/dist/reasoning/ban-logic/rules.js +409 -0
  96. package/dist/reasoning/ban-logic/rules.js.map +1 -0
  97. package/dist/reasoning/ban-logic/terms.d.ts +26 -0
  98. package/dist/reasoning/ban-logic/terms.d.ts.map +1 -0
  99. package/dist/reasoning/ban-logic/terms.js +262 -0
  100. package/dist/reasoning/ban-logic/terms.js.map +1 -0
  101. package/dist/reasoning/ban-logic/types.d.ts +107 -0
  102. package/dist/reasoning/ban-logic/types.d.ts.map +1 -0
  103. package/dist/reasoning/ban-logic/types.js +27 -0
  104. package/dist/reasoning/ban-logic/types.js.map +1 -0
  105. package/dist/reasoning/computability/index.d.ts +239 -0
  106. package/dist/reasoning/computability/index.d.ts.map +1 -0
  107. package/dist/reasoning/computability/index.js +851 -0
  108. package/dist/reasoning/computability/index.js.map +1 -0
  109. package/dist/reasoning/differential-privacy/index.d.ts +121 -0
  110. package/dist/reasoning/differential-privacy/index.d.ts.map +1 -0
  111. package/dist/reasoning/differential-privacy/index.js +417 -0
  112. package/dist/reasoning/differential-privacy/index.js.map +1 -0
  113. package/dist/reasoning/number-theory/crt.d.ts +9 -0
  114. package/dist/reasoning/number-theory/crt.d.ts.map +1 -0
  115. package/dist/reasoning/number-theory/crt.js +39 -0
  116. package/dist/reasoning/number-theory/crt.js.map +1 -0
  117. package/dist/reasoning/number-theory/diophantine.d.ts +10 -0
  118. package/dist/reasoning/number-theory/diophantine.d.ts.map +1 -0
  119. package/dist/reasoning/number-theory/diophantine.js +87 -0
  120. package/dist/reasoning/number-theory/diophantine.js.map +1 -0
  121. package/dist/reasoning/number-theory/factorization.d.ts +12 -0
  122. package/dist/reasoning/number-theory/factorization.d.ts.map +1 -0
  123. package/dist/reasoning/number-theory/factorization.js +136 -0
  124. package/dist/reasoning/number-theory/factorization.js.map +1 -0
  125. package/dist/reasoning/number-theory/gcd.d.ts +8 -0
  126. package/dist/reasoning/number-theory/gcd.d.ts.map +1 -0
  127. package/dist/reasoning/number-theory/gcd.js +51 -0
  128. package/dist/reasoning/number-theory/gcd.js.map +1 -0
  129. package/dist/reasoning/number-theory/index.d.ts +9 -0
  130. package/dist/reasoning/number-theory/index.d.ts.map +1 -0
  131. package/dist/reasoning/number-theory/index.js +46 -0
  132. package/dist/reasoning/number-theory/index.js.map +1 -0
  133. package/dist/reasoning/number-theory/modular.d.ts +6 -0
  134. package/dist/reasoning/number-theory/modular.d.ts.map +1 -0
  135. package/dist/reasoning/number-theory/modular.js +75 -0
  136. package/dist/reasoning/number-theory/modular.js.map +1 -0
  137. package/dist/reasoning/number-theory/primality.d.ts +6 -0
  138. package/dist/reasoning/number-theory/primality.d.ts.map +1 -0
  139. package/dist/reasoning/number-theory/primality.js +144 -0
  140. package/dist/reasoning/number-theory/primality.js.map +1 -0
  141. package/dist/reasoning/number-theory/symbols.d.ts +3 -0
  142. package/dist/reasoning/number-theory/symbols.d.ts.map +1 -0
  143. package/dist/reasoning/number-theory/symbols.js +57 -0
  144. package/dist/reasoning/number-theory/symbols.js.map +1 -0
  145. package/dist/reasoning/real-analysis/index.d.ts +127 -0
  146. package/dist/reasoning/real-analysis/index.d.ts.map +1 -0
  147. package/dist/reasoning/real-analysis/index.js +638 -0
  148. package/dist/reasoning/real-analysis/index.js.map +1 -0
  149. package/dist/reasoning/topology/index.d.ts +41 -0
  150. package/dist/reasoning/topology/index.d.ts.map +1 -0
  151. package/dist/reasoning/topology/index.js +739 -0
  152. package/dist/reasoning/topology/index.js.map +1 -0
  153. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts +2 -0
  154. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.d.ts.map +1 -0
  155. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js +288 -0
  156. package/dist/tests/logic/profiles/natural-deduction-nk/nk.test.js.map +1 -0
  157. package/dist/tests/logic/profiles/quantum/quantum.test.d.ts +2 -0
  158. package/dist/tests/logic/profiles/quantum/quantum.test.d.ts.map +1 -0
  159. package/dist/tests/logic/profiles/quantum/quantum.test.js +209 -0
  160. package/dist/tests/logic/profiles/quantum/quantum.test.js.map +1 -0
  161. package/dist/tests/proof-systems/certificate/certificate.test.d.ts +2 -0
  162. package/dist/tests/proof-systems/certificate/certificate.test.d.ts.map +1 -0
  163. package/dist/tests/proof-systems/certificate/certificate.test.js +449 -0
  164. package/dist/tests/proof-systems/certificate/certificate.test.js.map +1 -0
  165. package/dist/tests/reasoning/automata/automata.test.d.ts +2 -0
  166. package/dist/tests/reasoning/automata/automata.test.d.ts.map +1 -0
  167. package/dist/tests/reasoning/automata/automata.test.js +310 -0
  168. package/dist/tests/reasoning/automata/automata.test.js.map +1 -0
  169. package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts +2 -0
  170. package/dist/tests/reasoning/ban-logic/ban-logic.test.d.ts.map +1 -0
  171. package/dist/tests/reasoning/ban-logic/ban-logic.test.js +270 -0
  172. package/dist/tests/reasoning/ban-logic/ban-logic.test.js.map +1 -0
  173. package/dist/tests/reasoning/computability/computability.test.d.ts +2 -0
  174. package/dist/tests/reasoning/computability/computability.test.d.ts.map +1 -0
  175. package/dist/tests/reasoning/computability/computability.test.js +246 -0
  176. package/dist/tests/reasoning/computability/computability.test.js.map +1 -0
  177. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts +2 -0
  178. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.d.ts.map +1 -0
  179. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js +388 -0
  180. package/dist/tests/reasoning/differential-privacy/differential-privacy.test.js.map +1 -0
  181. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts +2 -0
  182. package/dist/tests/reasoning/number-theory/number-theory.test.d.ts.map +1 -0
  183. package/dist/tests/reasoning/number-theory/number-theory.test.js +170 -0
  184. package/dist/tests/reasoning/number-theory/number-theory.test.js.map +1 -0
  185. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts +2 -0
  186. package/dist/tests/reasoning/real-analysis/real-analysis.test.d.ts.map +1 -0
  187. package/dist/tests/reasoning/real-analysis/real-analysis.test.js +197 -0
  188. package/dist/tests/reasoning/real-analysis/real-analysis.test.js.map +1 -0
  189. package/dist/tests/reasoning/topology/topology.test.d.ts +2 -0
  190. package/dist/tests/reasoning/topology/topology.test.d.ts.map +1 -0
  191. package/dist/tests/reasoning/topology/topology.test.js +327 -0
  192. package/dist/tests/reasoning/topology/topology.test.js.map +1 -0
  193. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts +2 -0
  194. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.d.ts.map +1 -0
  195. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js +473 -0
  196. package/dist/tests/tooling/exporters/lean4/lean4-exporter.test.js.map +1 -0
  197. package/dist/tests/tooling/mathlib/mathlib.test.d.ts +2 -0
  198. package/dist/tests/tooling/mathlib/mathlib.test.d.ts.map +1 -0
  199. package/dist/tests/tooling/mathlib/mathlib.test.js +214 -0
  200. package/dist/tests/tooling/mathlib/mathlib.test.js.map +1 -0
  201. package/dist/tests/type-theory/effects/effects.test.d.ts +2 -0
  202. package/dist/tests/type-theory/effects/effects.test.d.ts.map +1 -0
  203. package/dist/tests/type-theory/effects/effects.test.js +242 -0
  204. package/dist/tests/type-theory/effects/effects.test.js.map +1 -0
  205. package/dist/tooling/exporters/lean4/index.d.ts +47 -0
  206. package/dist/tooling/exporters/lean4/index.d.ts.map +1 -0
  207. package/dist/tooling/exporters/lean4/index.js +423 -0
  208. package/dist/tooling/exporters/lean4/index.js.map +1 -0
  209. package/dist/tooling/mathlib/group.d.ts +27 -0
  210. package/dist/tooling/mathlib/group.d.ts.map +1 -0
  211. package/dist/tooling/mathlib/group.js +89 -0
  212. package/dist/tooling/mathlib/group.js.map +1 -0
  213. package/dist/tooling/mathlib/index.d.ts +8 -0
  214. package/dist/tooling/mathlib/index.d.ts.map +1 -0
  215. package/dist/tooling/mathlib/index.js +40 -0
  216. package/dist/tooling/mathlib/index.js.map +1 -0
  217. package/dist/tooling/mathlib/instances.d.ts +29 -0
  218. package/dist/tooling/mathlib/instances.d.ts.map +1 -0
  219. package/dist/tooling/mathlib/instances.js +139 -0
  220. package/dist/tooling/mathlib/instances.js.map +1 -0
  221. package/dist/tooling/mathlib/lemmas.d.ts +3 -0
  222. package/dist/tooling/mathlib/lemmas.d.ts.map +1 -0
  223. package/dist/tooling/mathlib/lemmas.js +72 -0
  224. package/dist/tooling/mathlib/lemmas.js.map +1 -0
  225. package/dist/tooling/mathlib/order.d.ts +29 -0
  226. package/dist/tooling/mathlib/order.d.ts.map +1 -0
  227. package/dist/tooling/mathlib/order.js +91 -0
  228. package/dist/tooling/mathlib/order.js.map +1 -0
  229. package/dist/tooling/mathlib/ring.d.ts +15 -0
  230. package/dist/tooling/mathlib/ring.d.ts.map +1 -0
  231. package/dist/tooling/mathlib/ring.js +91 -0
  232. package/dist/tooling/mathlib/ring.js.map +1 -0
  233. package/dist/tooling/mathlib/types.d.ts +62 -0
  234. package/dist/tooling/mathlib/types.d.ts.map +1 -0
  235. package/dist/tooling/mathlib/types.js +7 -0
  236. package/dist/tooling/mathlib/types.js.map +1 -0
  237. package/dist/type-theory/effects/core.d.ts +27 -0
  238. package/dist/type-theory/effects/core.d.ts.map +1 -0
  239. package/dist/type-theory/effects/core.js +79 -0
  240. package/dist/type-theory/effects/core.js.map +1 -0
  241. package/dist/type-theory/effects/exception.d.ts +18 -0
  242. package/dist/type-theory/effects/exception.d.ts.map +1 -0
  243. package/dist/type-theory/effects/exception.js +59 -0
  244. package/dist/type-theory/effects/exception.js.map +1 -0
  245. package/dist/type-theory/effects/index.d.ts +11 -0
  246. package/dist/type-theory/effects/index.d.ts.map +1 -0
  247. package/dist/type-theory/effects/index.js +50 -0
  248. package/dist/type-theory/effects/index.js.map +1 -0
  249. package/dist/type-theory/effects/reader.d.ts +20 -0
  250. package/dist/type-theory/effects/reader.d.ts.map +1 -0
  251. package/dist/type-theory/effects/reader.js +62 -0
  252. package/dist/type-theory/effects/reader.js.map +1 -0
  253. package/dist/type-theory/effects/state.d.ts +31 -0
  254. package/dist/type-theory/effects/state.d.ts.map +1 -0
  255. package/dist/type-theory/effects/state.js +91 -0
  256. package/dist/type-theory/effects/state.js.map +1 -0
  257. package/dist/type-theory/effects/types.d.ts +45 -0
  258. package/dist/type-theory/effects/types.d.ts.map +1 -0
  259. package/dist/type-theory/effects/types.js +21 -0
  260. package/dist/type-theory/effects/types.js.map +1 -0
  261. package/dist/type-theory/effects/writer.d.ts +30 -0
  262. package/dist/type-theory/effects/writer.d.ts.map +1 -0
  263. package/dist/type-theory/effects/writer.js +79 -0
  264. package/dist/type-theory/effects/writer.js.map +1 -0
  265. package/package.json +1 -1
@@ -0,0 +1,79 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Algebraic effects — Constructores y combinadores del free monad
4
+ // ============================================================
5
+ Object.defineProperty(exports, "__esModule", { value: true });
6
+ exports.pure = pure;
7
+ exports.perform = perform;
8
+ exports.bind = bind;
9
+ exports.map = map;
10
+ exports.sequence = sequence;
11
+ exports.handle = handle;
12
+ exports.run = run;
13
+ /** Inyecta un valor puro en la mónada. */
14
+ function pure(value) {
15
+ return { kind: 'pure', value };
16
+ }
17
+ /**
18
+ * Construye una computación que ejecuta una operación `tag` con `input`
19
+ * y entrega su resultado al consumidor. La continuación es la identidad:
20
+ * "haz la operación y devuelve su salida".
21
+ */
22
+ function perform(tag, input) {
23
+ return {
24
+ kind: 'impure',
25
+ effect: { tag, input },
26
+ // El runtime garantiza que `value` es `O`; lo elevamos a través del tipo.
27
+ continuation: (value) => pure(value),
28
+ };
29
+ }
30
+ /** Bind monádico (>>= en notación de Haskell). */
31
+ function bind(eff, fn) {
32
+ if (eff.kind === 'pure')
33
+ return fn(eff.value);
34
+ // Componemos la continuación con `fn` para extender el árbol.
35
+ const k = eff.continuation;
36
+ return {
37
+ kind: 'impure',
38
+ effect: eff.effect,
39
+ continuation: (value) => bind(k(value), fn),
40
+ };
41
+ }
42
+ /** Alias funtorial: aplica una función pura al resultado. */
43
+ function map(eff, fn) {
44
+ return bind(eff, (a) => pure(fn(a)));
45
+ }
46
+ /** Secuencia una lista de computaciones y colecta sus resultados. */
47
+ function sequence(effs) {
48
+ return effs.reduce((acc, cur) => bind(acc, (xs) => bind(cur, (x) => pure([...xs, x]))), pure([]));
49
+ }
50
+ /**
51
+ * Interpreta un efecto concreto. Recorre el árbol: las hojas `pure`
52
+ * pasan tal cual; los nodos `impure` cuyo `tag` coincida con el
53
+ * handler son delegados a `handle`; el resto se propaga.
54
+ */
55
+ function handle(eff, handler) {
56
+ if (eff.kind === 'pure')
57
+ return pure(eff.value);
58
+ if (eff.effect.tag === handler.effect) {
59
+ return handler.handle(eff.effect.input, (value) => handle(eff.continuation(value), handler));
60
+ }
61
+ // Efecto distinto: reconstruimos el nodo dejando intacta su operación,
62
+ // pero envolvemos recursivamente la continuación para que siga viendo
63
+ // este handler aguas abajo.
64
+ return {
65
+ kind: 'impure',
66
+ effect: eff.effect,
67
+ continuation: (value) => handle(eff.continuation(value), handler),
68
+ };
69
+ }
70
+ /**
71
+ * Extrae el valor de una computación 100% pura. Lanza si quedan efectos
72
+ * sin interpretar — útil tras componer todos los handlers.
73
+ */
74
+ function run(eff) {
75
+ if (eff.kind === 'pure')
76
+ return eff.value;
77
+ throw new Error(`[effects] efecto sin manejar: ${eff.effect.tag}`);
78
+ }
79
+ //# sourceMappingURL=core.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"core.js","sourceRoot":"","sources":["../../../src/type-theory/effects/core.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,18 @@
1
+ import type { Eff, Effect, ExceptionResult } from './types';
2
+ export declare const EXCEPTION_THROW: "Exception.throw";
3
+ export type ExceptionThrow<E> = Effect<typeof EXCEPTION_THROW, E, never>;
4
+ export type Exception<E> = ExceptionThrow<E>;
5
+ /** Lanza una excepción algebraica. La continuación se descarta. */
6
+ export declare function throw_<E>(error: E): Eff<ExceptionThrow<E>, never>;
7
+ /**
8
+ * Intérprete componible. Si el cómputo lanza, corta el árbol y emite
9
+ * `{ kind: 'error', error }`. Si finaliza puro, emite `{ kind: 'ok', value }`.
10
+ * Otros efectos se propagan tal cual.
11
+ */
12
+ export declare function handleException<R, E, A>(eff: Eff<unknown, A>): Eff<R, ExceptionResult<E, A>>;
13
+ /**
14
+ * Intérprete terminal: ejecuta el cómputo y captura una eventual
15
+ * excepción. Lanza si encuentra otra operación sin manejar.
16
+ */
17
+ export declare function runException<E, A>(eff: Eff<unknown, A>): ExceptionResult<E, A>;
18
+ //# sourceMappingURL=exception.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exception.d.ts","sourceRoot":"","sources":["../../../src/type-theory/effects/exception.ts"],"names":[],"mappings":"AAWA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAE5D,eAAO,MAAM,eAAe,EAAG,iBAA0B,CAAC;AAE1D,MAAM,MAAM,cAAc,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,eAAe,EAAE,CAAC,EAAE,KAAK,CAAC,CAAC;AACzE,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,cAAc,CAAC,CAAC,CAAC,CAAC;AAE7C,mEAAmE;AACnE,wBAAgB,MAAM,CAAC,CAAC,EAAE,KAAK,EAAE,CAAC,GAAG,GAAG,CAAC,cAAc,CAAC,CAAC,CAAC,EAAE,KAAK,CAAC,CAEjE;AAED;;;;GAIG;AACH,wBAAgB,eAAe,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,GAAG,CAAC,CAAC,EAAE,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAc5F;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,GAAG,eAAe,CAAC,CAAC,EAAE,CAAC,CAAC,CAU9E"}
@@ -0,0 +1,59 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Effect: Exception<E>
4
+ // ============================================================
5
+ //
6
+ // Una sola operación:
7
+ // - Exception.throw : E → never
8
+ //
9
+ // La continuación nunca se invoca: tirar aborta el cómputo y
10
+ // `runException` devuelve `{ kind: 'error', error }`.
11
+ Object.defineProperty(exports, "__esModule", { value: true });
12
+ exports.EXCEPTION_THROW = void 0;
13
+ exports.throw_ = throw_;
14
+ exports.handleException = handleException;
15
+ exports.runException = runException;
16
+ const core_1 = require("./core");
17
+ exports.EXCEPTION_THROW = 'Exception.throw';
18
+ /** Lanza una excepción algebraica. La continuación se descarta. */
19
+ function throw_(error) {
20
+ return (0, core_1.perform)(exports.EXCEPTION_THROW, error);
21
+ }
22
+ /**
23
+ * Intérprete componible. Si el cómputo lanza, corta el árbol y emite
24
+ * `{ kind: 'error', error }`. Si finaliza puro, emite `{ kind: 'ok', value }`.
25
+ * Otros efectos se propagan tal cual.
26
+ */
27
+ function handleException(eff) {
28
+ function go(node) {
29
+ if (node.kind === 'pure')
30
+ return (0, core_1.pure)({ kind: 'ok', value: node.value });
31
+ const op = node.effect;
32
+ if (op.tag === exports.EXCEPTION_THROW) {
33
+ return (0, core_1.pure)({ kind: 'error', error: op.input });
34
+ }
35
+ return {
36
+ kind: 'impure',
37
+ effect: op,
38
+ continuation: (value) => go(node.continuation(value)),
39
+ };
40
+ }
41
+ return go(eff);
42
+ }
43
+ /**
44
+ * Intérprete terminal: ejecuta el cómputo y captura una eventual
45
+ * excepción. Lanza si encuentra otra operación sin manejar.
46
+ */
47
+ function runException(eff) {
48
+ const node = eff;
49
+ for (;;) {
50
+ if (node.kind === 'pure')
51
+ return { kind: 'ok', value: node.value };
52
+ const op = node.effect;
53
+ if (op.tag === exports.EXCEPTION_THROW) {
54
+ return { kind: 'error', error: op.input };
55
+ }
56
+ throw new Error(`[runException] efecto no soportado: ${op.tag}`);
57
+ }
58
+ }
59
+ //# sourceMappingURL=exception.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"exception.js","sourceRoot":"","sources":["../../../src/type-theory/effects/exception.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,uBAAuB;AACvB,+DAA+D;AAC/D,EAAE;AACF,sBAAsB;AACtB,kCAAkC;AAClC,EAAE;AACF,6DAA6D;AAC7D,sDAAsD;;;AAWtD,wBAEC;AAOD,0CAcC;AAMD,oCAUC;AAhDD,iCAAuC;AAG1B,QAAA,eAAe,GAAG,iBAA0B,CAAC;AAK1D,mEAAmE;AACnE,SAAgB,MAAM,CAAI,KAAQ;IAChC,OAAO,IAAA,cAAO,EAAmC,uBAAe,EAAE,KAAK,CAAC,CAAC;AAC3E,CAAC;AAED;;;;GAIG;AACH,SAAgB,eAAe,CAAU,GAAoB;IAC3D,SAAS,EAAE,CAAC,IAAqB;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAA,WAAI,EAAC,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC,CAAC;QACzE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,CAAC,GAAG,KAAK,uBAAe,EAAE,CAAC;YAC/B,OAAO,IAAA,WAAI,EAAC,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAU,EAAE,CAAC,CAAC;QACvD,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SAC7D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAO,GAAoB;IACrD,MAAM,IAAI,GAAG,GAAG,CAAC;IACjB,SAAS,CAAC;QACR,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,EAAE,IAAI,EAAE,IAAI,EAAE,KAAK,EAAE,IAAI,CAAC,KAAK,EAAE,CAAC;QACnE,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,CAAC,GAAG,KAAK,uBAAe,EAAE,CAAC;YAC/B,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,KAAK,EAAE,EAAE,CAAC,KAAU,EAAE,CAAC;QACjD,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,uCAAuC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IACnE,CAAC;AACH,CAAC"}
@@ -0,0 +1,11 @@
1
+ export type { Eff, Effect, Handler, Operation, Monoid, ExceptionResult } from './types';
2
+ export { pure, perform, bind, map, sequence, handle, run } from './core';
3
+ export { STATE_GET, STATE_PUT, getState, putState, modify, runState, handleState } from './state';
4
+ export type { State, StateGet, StatePut } from './state';
5
+ export { READER_ASK, ask, asks, runReader, handleReader } from './reader';
6
+ export type { Reader, ReaderAsk } from './reader';
7
+ export { WRITER_TELL, tell, runWriter, handleWriter, listMonoid, stringMonoid, sumMonoid, } from './writer';
8
+ export type { Writer, WriterTell } from './writer';
9
+ export { EXCEPTION_THROW, throw_, runException, handleException } from './exception';
10
+ export type { Exception, ExceptionThrow } from './exception';
11
+ //# sourceMappingURL=index.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/type-theory/effects/index.ts"],"names":[],"mappings":"AAYA,YAAY,EAAE,GAAG,EAAE,MAAM,EAAE,OAAO,EAAE,SAAS,EAAE,MAAM,EAAE,eAAe,EAAE,MAAM,SAAS,CAAC;AAExF,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,IAAI,EAAE,GAAG,EAAE,QAAQ,EAAE,MAAM,EAAE,GAAG,EAAE,MAAM,QAAQ,CAAC;AAEzE,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,EAAE,QAAQ,EAAE,WAAW,EAAE,MAAM,SAAS,CAAC;AAClG,YAAY,EAAE,KAAK,EAAE,QAAQ,EAAE,QAAQ,EAAE,MAAM,SAAS,CAAC;AAEzD,OAAO,EAAE,UAAU,EAAE,GAAG,EAAE,IAAI,EAAE,SAAS,EAAE,YAAY,EAAE,MAAM,UAAU,CAAC;AAC1E,YAAY,EAAE,MAAM,EAAE,SAAS,EAAE,MAAM,UAAU,CAAC;AAElD,OAAO,EACL,WAAW,EACX,IAAI,EACJ,SAAS,EACT,YAAY,EACZ,UAAU,EACV,YAAY,EACZ,SAAS,GACV,MAAM,UAAU,CAAC;AAClB,YAAY,EAAE,MAAM,EAAE,UAAU,EAAE,MAAM,UAAU,CAAC;AAEnD,OAAO,EAAE,eAAe,EAAE,MAAM,EAAE,YAAY,EAAE,eAAe,EAAE,MAAM,aAAa,CAAC;AACrF,YAAY,EAAE,SAAS,EAAE,cAAc,EAAE,MAAM,aAAa,CAAC"}
@@ -0,0 +1,50 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Algebraic effects + free monads — Punto de entrada público
4
+ // ============================================================
5
+ //
6
+ // API:
7
+ // - Núcleo: pure / perform / bind / map / sequence / handle / run
8
+ // - Estados: getState / putState / modify / runState / handleState
9
+ // - Reader: ask / asks / runReader / handleReader
10
+ // - Writer: tell / runWriter / handleWriter (+ monoides: listMonoid,
11
+ // stringMonoid, sumMonoid)
12
+ // - Exception: throw_ / runException / handleException
13
+ Object.defineProperty(exports, "__esModule", { value: true });
14
+ exports.handleException = exports.runException = exports.throw_ = exports.EXCEPTION_THROW = exports.sumMonoid = exports.stringMonoid = exports.listMonoid = exports.handleWriter = exports.runWriter = exports.tell = exports.WRITER_TELL = exports.handleReader = exports.runReader = exports.asks = exports.ask = exports.READER_ASK = exports.handleState = exports.runState = exports.modify = exports.putState = exports.getState = exports.STATE_PUT = exports.STATE_GET = exports.run = exports.handle = exports.sequence = exports.map = exports.bind = exports.perform = exports.pure = void 0;
15
+ var core_1 = require("./core");
16
+ Object.defineProperty(exports, "pure", { enumerable: true, get: function () { return core_1.pure; } });
17
+ Object.defineProperty(exports, "perform", { enumerable: true, get: function () { return core_1.perform; } });
18
+ Object.defineProperty(exports, "bind", { enumerable: true, get: function () { return core_1.bind; } });
19
+ Object.defineProperty(exports, "map", { enumerable: true, get: function () { return core_1.map; } });
20
+ Object.defineProperty(exports, "sequence", { enumerable: true, get: function () { return core_1.sequence; } });
21
+ Object.defineProperty(exports, "handle", { enumerable: true, get: function () { return core_1.handle; } });
22
+ Object.defineProperty(exports, "run", { enumerable: true, get: function () { return core_1.run; } });
23
+ var state_1 = require("./state");
24
+ Object.defineProperty(exports, "STATE_GET", { enumerable: true, get: function () { return state_1.STATE_GET; } });
25
+ Object.defineProperty(exports, "STATE_PUT", { enumerable: true, get: function () { return state_1.STATE_PUT; } });
26
+ Object.defineProperty(exports, "getState", { enumerable: true, get: function () { return state_1.getState; } });
27
+ Object.defineProperty(exports, "putState", { enumerable: true, get: function () { return state_1.putState; } });
28
+ Object.defineProperty(exports, "modify", { enumerable: true, get: function () { return state_1.modify; } });
29
+ Object.defineProperty(exports, "runState", { enumerable: true, get: function () { return state_1.runState; } });
30
+ Object.defineProperty(exports, "handleState", { enumerable: true, get: function () { return state_1.handleState; } });
31
+ var reader_1 = require("./reader");
32
+ Object.defineProperty(exports, "READER_ASK", { enumerable: true, get: function () { return reader_1.READER_ASK; } });
33
+ Object.defineProperty(exports, "ask", { enumerable: true, get: function () { return reader_1.ask; } });
34
+ Object.defineProperty(exports, "asks", { enumerable: true, get: function () { return reader_1.asks; } });
35
+ Object.defineProperty(exports, "runReader", { enumerable: true, get: function () { return reader_1.runReader; } });
36
+ Object.defineProperty(exports, "handleReader", { enumerable: true, get: function () { return reader_1.handleReader; } });
37
+ var writer_1 = require("./writer");
38
+ Object.defineProperty(exports, "WRITER_TELL", { enumerable: true, get: function () { return writer_1.WRITER_TELL; } });
39
+ Object.defineProperty(exports, "tell", { enumerable: true, get: function () { return writer_1.tell; } });
40
+ Object.defineProperty(exports, "runWriter", { enumerable: true, get: function () { return writer_1.runWriter; } });
41
+ Object.defineProperty(exports, "handleWriter", { enumerable: true, get: function () { return writer_1.handleWriter; } });
42
+ Object.defineProperty(exports, "listMonoid", { enumerable: true, get: function () { return writer_1.listMonoid; } });
43
+ Object.defineProperty(exports, "stringMonoid", { enumerable: true, get: function () { return writer_1.stringMonoid; } });
44
+ Object.defineProperty(exports, "sumMonoid", { enumerable: true, get: function () { return writer_1.sumMonoid; } });
45
+ var exception_1 = require("./exception");
46
+ Object.defineProperty(exports, "EXCEPTION_THROW", { enumerable: true, get: function () { return exception_1.EXCEPTION_THROW; } });
47
+ Object.defineProperty(exports, "throw_", { enumerable: true, get: function () { return exception_1.throw_; } });
48
+ Object.defineProperty(exports, "runException", { enumerable: true, get: function () { return exception_1.runException; } });
49
+ Object.defineProperty(exports, "handleException", { enumerable: true, get: function () { return exception_1.handleException; } });
50
+ //# sourceMappingURL=index.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/type-theory/effects/index.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,6DAA6D;AAC7D,+DAA+D;AAC/D,EAAE;AACF,OAAO;AACP,oEAAoE;AACpE,qEAAqE;AACrE,qDAAqD;AACrD,wEAAwE;AACxE,0EAA0E;AAC1E,yDAAyD;;;AAIzD,+BAAyE;AAAhE,4FAAA,IAAI,OAAA;AAAE,+FAAA,OAAO,OAAA;AAAE,4FAAA,IAAI,OAAA;AAAE,2FAAA,GAAG,OAAA;AAAE,gGAAA,QAAQ,OAAA;AAAE,8FAAA,MAAM,OAAA;AAAE,2FAAA,GAAG,OAAA;AAExD,iCAAkG;AAAzF,kGAAA,SAAS,OAAA;AAAE,kGAAA,SAAS,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAAE,+FAAA,MAAM,OAAA;AAAE,iGAAA,QAAQ,OAAA;AAAE,oGAAA,WAAW,OAAA;AAGhF,mCAA0E;AAAjE,oGAAA,UAAU,OAAA;AAAE,6FAAA,GAAG,OAAA;AAAE,8FAAA,IAAI,OAAA;AAAE,mGAAA,SAAS,OAAA;AAAE,sGAAA,YAAY,OAAA;AAGvD,mCAQkB;AAPhB,qGAAA,WAAW,OAAA;AACX,8FAAA,IAAI,OAAA;AACJ,mGAAA,SAAS,OAAA;AACT,sGAAA,YAAY,OAAA;AACZ,oGAAA,UAAU,OAAA;AACV,sGAAA,YAAY,OAAA;AACZ,mGAAA,SAAS,OAAA;AAIX,yCAAqF;AAA5E,4GAAA,eAAe,OAAA;AAAE,mGAAA,MAAM,OAAA;AAAE,yGAAA,YAAY,OAAA;AAAE,4GAAA,eAAe,OAAA"}
@@ -0,0 +1,20 @@
1
+ import type { Eff, Effect } from './types';
2
+ export declare const READER_ASK: "Reader.ask";
3
+ export type ReaderAsk<R> = Effect<typeof READER_ASK, void, R>;
4
+ export type Reader<R> = ReaderAsk<R>;
5
+ /** Lee el ambiente del Reader. */
6
+ export declare function ask<R>(): Eff<ReaderAsk<R>, R>;
7
+ /** Lee el ambiente y aplica una proyección. */
8
+ export declare function asks<R, A>(fn: (r: R) => A): Eff<ReaderAsk<R>, A>;
9
+ /**
10
+ * Intérprete componible. Reescribe `Reader.ask` proyectando el `env`
11
+ * fijo y deja otros efectos intactos.
12
+ */
13
+ export declare function handleReader<R, A, Env>(eff: Eff<unknown, A>, env: Env): Eff<R, A>;
14
+ /**
15
+ * Intérprete terminal: ejecuta el cómputo con un ambiente fijo.
16
+ * Cualquier `Reader.ask` recibe el mismo `env`. Lanza si encuentra
17
+ * otra operación sin manejar.
18
+ */
19
+ export declare function runReader<R, A>(eff: Eff<unknown, A>, env: R): A;
20
+ //# sourceMappingURL=reader.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.d.ts","sourceRoot":"","sources":["../../../src/type-theory/effects/reader.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,UAAU,EAAG,YAAqB,CAAC;AAEhD,MAAM,MAAM,SAAS,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,UAAU,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC9D,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,SAAS,CAAC,CAAC,CAAC,CAAC;AAErC,kCAAkC;AAClC,wBAAgB,GAAG,CAAC,CAAC,KAAK,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAE7C;AAED,+CAA+C;AAC/C,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,SAAS,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAEhE;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,GAAG,GAAG,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAcjF;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,GAAG,EAAE,CAAC,GAAG,CAAC,CAW/D"}
@@ -0,0 +1,62 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Effect: Reader<R>
4
+ // ============================================================
5
+ //
6
+ // Una sola operación:
7
+ // - Reader.ask : () → R
8
+ Object.defineProperty(exports, "__esModule", { value: true });
9
+ exports.READER_ASK = void 0;
10
+ exports.ask = ask;
11
+ exports.asks = asks;
12
+ exports.handleReader = handleReader;
13
+ exports.runReader = runReader;
14
+ const core_1 = require("./core");
15
+ exports.READER_ASK = 'Reader.ask';
16
+ /** Lee el ambiente del Reader. */
17
+ function ask() {
18
+ return (0, core_1.perform)(exports.READER_ASK, undefined);
19
+ }
20
+ /** Lee el ambiente y aplica una proyección. */
21
+ function asks(fn) {
22
+ return (0, core_1.bind)(ask(), (r) => (0, core_1.pure)(fn(r)));
23
+ }
24
+ /**
25
+ * Intérprete componible. Reescribe `Reader.ask` proyectando el `env`
26
+ * fijo y deja otros efectos intactos.
27
+ */
28
+ function handleReader(eff, env) {
29
+ function go(node) {
30
+ if (node.kind === 'pure')
31
+ return (0, core_1.pure)(node.value);
32
+ const op = node.effect;
33
+ if (op.tag === exports.READER_ASK) {
34
+ return go(node.continuation(env));
35
+ }
36
+ return {
37
+ kind: 'impure',
38
+ effect: op,
39
+ continuation: (value) => go(node.continuation(value)),
40
+ };
41
+ }
42
+ return go(eff);
43
+ }
44
+ /**
45
+ * Intérprete terminal: ejecuta el cómputo con un ambiente fijo.
46
+ * Cualquier `Reader.ask` recibe el mismo `env`. Lanza si encuentra
47
+ * otra operación sin manejar.
48
+ */
49
+ function runReader(eff, env) {
50
+ let node = eff;
51
+ for (;;) {
52
+ if (node.kind === 'pure')
53
+ return node.value;
54
+ const op = node.effect;
55
+ if (op.tag === exports.READER_ASK) {
56
+ node = node.continuation(env);
57
+ continue;
58
+ }
59
+ throw new Error(`[runReader] efecto no soportado: ${op.tag}`);
60
+ }
61
+ }
62
+ //# sourceMappingURL=reader.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"reader.js","sourceRoot":"","sources":["../../../src/type-theory/effects/reader.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,oBAAoB;AACpB,+DAA+D;AAC/D,EAAE;AACF,sBAAsB;AACtB,0BAA0B;;;AAW1B,kBAEC;AAGD,oBAEC;AAMD,oCAcC;AAOD,8BAWC;AAtDD,iCAA6C;AAGhC,QAAA,UAAU,GAAG,YAAqB,CAAC;AAKhD,kCAAkC;AAClC,SAAgB,GAAG;IACjB,OAAO,IAAA,cAAO,EAA6B,kBAAU,EAAE,SAAS,CAAC,CAAC;AACpE,CAAC;AAED,+CAA+C;AAC/C,SAAgB,IAAI,CAAO,EAAe;IACxC,OAAO,IAAA,WAAI,EAAqB,GAAG,EAAK,EAAE,CAAC,CAAC,EAAE,EAAE,CAAC,IAAA,WAAI,EAAC,EAAE,CAAC,CAAC,CAAC,CAAC,CAAC,CAAC;AAChE,CAAC;AAED;;;GAGG;AACH,SAAgB,YAAY,CAAY,GAAoB,EAAE,GAAQ;IACpE,SAAS,EAAE,CAAC,IAAqB;QAC/B,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAA,WAAI,EAAC,IAAI,CAAC,KAAK,CAAC,CAAC;QAClD,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,CAAC,GAAG,KAAK,kBAAU,EAAE,CAAC;YAC1B,OAAO,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,GAAY,CAAC,CAAC,CAAC;QAC7C,CAAC;QACD,OAAO;YACL,IAAI,EAAE,QAAQ;YACd,MAAM,EAAE,EAAE;YACV,YAAY,EAAE,CAAC,KAAY,EAAE,EAAE,CAAC,EAAE,CAAC,IAAI,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC;SAC7D,CAAC;IACJ,CAAC;IACD,OAAO,EAAE,CAAC,GAAG,CAAC,CAAC;AACjB,CAAC;AAED;;;;GAIG;AACH,SAAgB,SAAS,CAAO,GAAoB,EAAE,GAAM;IAC1D,IAAI,IAAI,GAAG,GAAG,CAAC;IACf,SAAS,CAAC;QACR,IAAI,IAAI,CAAC,IAAI,KAAK,MAAM;YAAE,OAAO,IAAI,CAAC,KAAK,CAAC;QAC5C,MAAM,EAAE,GAAG,IAAI,CAAC,MAAM,CAAC;QACvB,IAAI,EAAE,CAAC,GAAG,KAAK,kBAAU,EAAE,CAAC;YAC1B,IAAI,GAAG,IAAI,CAAC,YAAY,CAAC,GAAY,CAAC,CAAC;YACvC,SAAS;QACX,CAAC;QACD,MAAM,IAAI,KAAK,CAAC,oCAAoC,EAAE,CAAC,GAAG,EAAE,CAAC,CAAC;IAChE,CAAC;AACH,CAAC"}
@@ -0,0 +1,31 @@
1
+ import type { Eff, Effect } from './types';
2
+ export declare const STATE_GET: "State.get";
3
+ export declare const STATE_PUT: "State.put";
4
+ export type StateGet<S> = Effect<typeof STATE_GET, void, S>;
5
+ export type StatePut<S> = Effect<typeof STATE_PUT, S, undefined>;
6
+ export type State<S> = StateGet<S> | StatePut<S>;
7
+ /** Lee el estado actual. */
8
+ export declare function getState<S>(): Eff<StateGet<S>, S>;
9
+ /** Sobrescribe el estado completo. */
10
+ export declare function putState<S>(s: S): Eff<StatePut<S>, undefined>;
11
+ /** Modifica el estado aplicando una función pura. */
12
+ export declare function modify<S>(fn: (s: S) => S): Eff<State<S>, undefined>;
13
+ /**
14
+ * Intérprete componible. Reescribe `State.get`/`State.put` en términos
15
+ * de un acumulador transportado por la continuación, dejando otros
16
+ * efectos intactos en la salida.
17
+ */
18
+ export declare function handleState<R, S, A>(eff: Eff<unknown, A>, initial: S): Eff<R, {
19
+ result: A;
20
+ state: S;
21
+ }>;
22
+ /**
23
+ * Intérprete terminal: ejecuta el cómputo asumiendo que sólo tiene
24
+ * efectos State. Devuelve `{ result, state }`. Lanza si encuentra
25
+ * otra operación sin manejar.
26
+ */
27
+ export declare function runState<S, A>(eff: Eff<unknown, A>, initial: S): {
28
+ result: A;
29
+ state: S;
30
+ };
31
+ //# sourceMappingURL=state.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.d.ts","sourceRoot":"","sources":["../../../src/type-theory/effects/state.ts"],"names":[],"mappings":"AAkBA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAE3C,eAAO,MAAM,SAAS,EAAG,WAAoB,CAAC;AAC9C,eAAO,MAAM,SAAS,EAAG,WAAoB,CAAC;AAE9C,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,SAAS,EAAE,IAAI,EAAE,CAAC,CAAC,CAAC;AAC5D,MAAM,MAAM,QAAQ,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,SAAS,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACjE,MAAM,MAAM,KAAK,CAAC,CAAC,IAAI,QAAQ,CAAC,CAAC,CAAC,GAAG,QAAQ,CAAC,CAAC,CAAC,CAAC;AAEjD,4BAA4B;AAC5B,wBAAgB,QAAQ,CAAC,CAAC,KAAK,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAEjD;AAED,sCAAsC;AACtC,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,QAAQ,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAE7D;AAED,qDAAqD;AACrD,wBAAgB,MAAM,CAAC,CAAC,EAAE,EAAE,EAAE,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,GAAG,GAAG,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAEnE;AAED;;;;GAIG;AACH,wBAAgB,WAAW,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EACjC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EACpB,OAAO,EAAE,CAAC,GACT,GAAG,CAAC,CAAC,EAAE;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC,CAoBjC;AAED;;;;GAIG;AACH,wBAAgB,QAAQ,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,OAAO,EAAE,CAAC,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAiBxF"}
@@ -0,0 +1,91 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Effect: State<S>
4
+ // ============================================================
5
+ //
6
+ // Dos operaciones canónicas:
7
+ // - State.get : () → S (lee el estado actual)
8
+ // - State.put : S → undefined (sobrescribe el estado)
9
+ //
10
+ // `modify` se deriva como get >>= (s -> put (fn s)).
11
+ //
12
+ // Dos formas de interpretar:
13
+ // - `runState` : intérprete terminal. Devuelve {result, state}.
14
+ // Útil cuando State es el único efecto.
15
+ // - `handleState` : intérprete componible. Transforma
16
+ // Eff<State<S> | R, A> en Eff<R, [A, S]>.
17
+ // Útil para stack de efectos.
18
+ Object.defineProperty(exports, "__esModule", { value: true });
19
+ exports.STATE_PUT = exports.STATE_GET = void 0;
20
+ exports.getState = getState;
21
+ exports.putState = putState;
22
+ exports.modify = modify;
23
+ exports.handleState = handleState;
24
+ exports.runState = runState;
25
+ const core_1 = require("./core");
26
+ exports.STATE_GET = 'State.get';
27
+ exports.STATE_PUT = 'State.put';
28
+ /** Lee el estado actual. */
29
+ function getState() {
30
+ return (0, core_1.perform)(exports.STATE_GET, undefined);
31
+ }
32
+ /** Sobrescribe el estado completo. */
33
+ function putState(s) {
34
+ return (0, core_1.perform)(exports.STATE_PUT, s);
35
+ }
36
+ /** Modifica el estado aplicando una función pura. */
37
+ function modify(fn) {
38
+ return (0, core_1.bind)(getState(), (s) => putState(fn(s)));
39
+ }
40
+ /**
41
+ * Intérprete componible. Reescribe `State.get`/`State.put` en términos
42
+ * de un acumulador transportado por la continuación, dejando otros
43
+ * efectos intactos en la salida.
44
+ */
45
+ function handleState(eff, initial) {
46
+ // Helper recursivo: dado un estado actual, reescribe el árbol.
47
+ function go(node, current) {
48
+ if (node.kind === 'pure')
49
+ return (0, core_1.pure)({ result: node.value, state: current });
50
+ const op = node.effect;
51
+ if (op.tag === exports.STATE_GET) {
52
+ return go(node.continuation(current), current);
53
+ }
54
+ if (op.tag === exports.STATE_PUT) {
55
+ const next = op.input;
56
+ return go(node.continuation(undefined), next);
57
+ }
58
+ // Otro efecto: lo dejamos pasar, propagando el estado en la cont.
59
+ return {
60
+ kind: 'impure',
61
+ effect: op,
62
+ continuation: (value) => go(node.continuation(value), current),
63
+ };
64
+ }
65
+ return go(eff, initial);
66
+ }
67
+ /**
68
+ * Intérprete terminal: ejecuta el cómputo asumiendo que sólo tiene
69
+ * efectos State. Devuelve `{ result, state }`. Lanza si encuentra
70
+ * otra operación sin manejar.
71
+ */
72
+ function runState(eff, initial) {
73
+ let current = initial;
74
+ let node = eff;
75
+ for (;;) {
76
+ if (node.kind === 'pure')
77
+ return { result: node.value, state: current };
78
+ const op = node.effect;
79
+ if (op.tag === exports.STATE_GET) {
80
+ node = node.continuation(current);
81
+ continue;
82
+ }
83
+ if (op.tag === exports.STATE_PUT) {
84
+ current = op.input;
85
+ node = node.continuation(undefined);
86
+ continue;
87
+ }
88
+ throw new Error(`[runState] efecto no soportado: ${op.tag}`);
89
+ }
90
+ }
91
+ //# sourceMappingURL=state.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"state.js","sourceRoot":"","sources":["../../../src/type-theory/effects/state.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,45 @@
1
+ /** Firma de un efecto algebraico: nombre, payload, resultado esperado. */
2
+ export type Effect<Name extends string, In, Out> = {
3
+ readonly tag: Name;
4
+ readonly input: In;
5
+ /** Phantom: usado sólo a nivel de tipos para inferir la respuesta. */
6
+ readonly output: Out;
7
+ };
8
+ /** Operación cruda almacenada en un nodo `impure`. */
9
+ export interface Operation {
10
+ readonly tag: string;
11
+ readonly input: unknown;
12
+ }
13
+ /** Computación con efectos `E` y resultado `A`. */
14
+ export type Eff<E, A> = {
15
+ readonly kind: 'pure';
16
+ readonly value: A;
17
+ } | {
18
+ readonly kind: 'impure';
19
+ readonly effect: Operation;
20
+ readonly continuation: (value: never) => Eff<E, A>;
21
+ };
22
+ /**
23
+ * Handler de un efecto concreto. Recibe el input crudo y una
24
+ * continuación que, dado el resultado de la operación, produce el
25
+ * resto del cómputo. Devuelve un cómputo (posiblemente con otros
26
+ * efectos `R`) y resultado final `A`.
27
+ */
28
+ export interface Handler<EName extends string, I, O, R, A> {
29
+ readonly effect: EName;
30
+ readonly handle: (input: I, continuation: (value: O) => Eff<R, A>) => Eff<R, A>;
31
+ }
32
+ /** Monoide para `runWriter`. */
33
+ export interface Monoid<W> {
34
+ readonly empty: W;
35
+ readonly combine: (a: W, b: W) => W;
36
+ }
37
+ /** Resultado de `runException`. */
38
+ export type ExceptionResult<E, A> = {
39
+ kind: 'ok';
40
+ value: A;
41
+ } | {
42
+ kind: 'error';
43
+ error: E;
44
+ };
45
+ //# sourceMappingURL=types.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/type-theory/effects/types.ts"],"names":[],"mappings":"AAmBA,0EAA0E;AAC1E,MAAM,MAAM,MAAM,CAAC,IAAI,SAAS,MAAM,EAAE,EAAE,EAAE,GAAG,IAAI;IACjD,QAAQ,CAAC,GAAG,EAAE,IAAI,CAAC;IACnB,QAAQ,CAAC,KAAK,EAAE,EAAE,CAAC;IACnB,sEAAsE;IACtE,QAAQ,CAAC,MAAM,EAAE,GAAG,CAAC;CACtB,CAAC;AAEF,sDAAsD;AACtD,MAAM,WAAW,SAAS;IACxB,QAAQ,CAAC,GAAG,EAAE,MAAM,CAAC;IACrB,QAAQ,CAAC,KAAK,EAAE,OAAO,CAAC;CACzB;AAED,mDAAmD;AACnD,MAAM,MAAM,GAAG,CAAC,CAAC,EAAE,CAAC,IAChB;IAAE,QAAQ,CAAC,IAAI,EAAE,MAAM,CAAC;IAAC,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAC5C;IACE,QAAQ,CAAC,IAAI,EAAE,QAAQ,CAAC;IACxB,QAAQ,CAAC,MAAM,EAAE,SAAS,CAAC;IAC3B,QAAQ,CAAC,YAAY,EAAE,CAAC,KAAK,EAAE,KAAK,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACpD,CAAC;AAEN;;;;;GAKG;AACH,MAAM,WAAW,OAAO,CAAC,KAAK,SAAS,MAAM,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC;IACvD,QAAQ,CAAC,MAAM,EAAE,KAAK,CAAC;IACvB,QAAQ,CAAC,MAAM,EAAE,CAAC,KAAK,EAAE,CAAC,EAAE,YAAY,EAAE,CAAC,KAAK,EAAE,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,KAAK,GAAG,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC;CACjF;AAED,gCAAgC;AAChC,MAAM,WAAW,MAAM,CAAC,CAAC;IACvB,QAAQ,CAAC,KAAK,EAAE,CAAC,CAAC;IAClB,QAAQ,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC;CACrC;AAED,mCAAmC;AACnC,MAAM,MAAM,eAAe,CAAC,CAAC,EAAE,CAAC,IAAI;IAAE,IAAI,EAAE,IAAI,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,GAAG;IAAE,IAAI,EAAE,OAAO,CAAC;IAAC,KAAK,EAAE,CAAC,CAAA;CAAE,CAAC"}
@@ -0,0 +1,21 @@
1
+ "use strict";
2
+ // ============================================================
3
+ // Algebraic effects + free monads — Tipos núcleo
4
+ // ============================================================
5
+ //
6
+ // Modelamos efectos algebraicos como un free monad explícito sobre
7
+ // una firma de operaciones discriminadas por `tag`. La forma `Eff<E, A>`
8
+ // es un árbol cuyas hojas son `pure` (valores) y cuyos nodos internos
9
+ // son `impure` (operación + continuación). Un `handler` interpreta
10
+ // una operación concreta y reduce el árbol.
11
+ //
12
+ // Convenciones:
13
+ // - `Effect<Name, In, Out>` es una *fila* de tipo a nivel de tipos:
14
+ // "este programa puede ejecutar la operación `Name` con input `In`
15
+ // esperando salida `Out`". El campo `output` es phantom.
16
+ // - El runtime sólo consume `tag` e `input`; el `output` vive en la
17
+ // posición de continuación (argumento de la k-función).
18
+ // - Mantenemos `unknown` en el runtime para no falsear unsoundness y
19
+ // usamos los tipos exclusivamente para guiar al consumidor.
20
+ Object.defineProperty(exports, "__esModule", { value: true });
21
+ //# sourceMappingURL=types.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"types.js","sourceRoot":"","sources":["../../../src/type-theory/effects/types.ts"],"names":[],"mappings":";AAAA,+DAA+D;AAC/D,iDAAiD;AACjD,+DAA+D;AAC/D,EAAE;AACF,mEAAmE;AACnE,yEAAyE;AACzE,sEAAsE;AACtE,mEAAmE;AACnE,4CAA4C;AAC5C,EAAE;AACF,gBAAgB;AAChB,sEAAsE;AACtE,uEAAuE;AACvE,8DAA8D;AAC9D,sEAAsE;AACtE,4DAA4D;AAC5D,uEAAuE;AACvE,gEAAgE"}
@@ -0,0 +1,30 @@
1
+ import type { Eff, Effect, Monoid } from './types';
2
+ export declare const WRITER_TELL: "Writer.tell";
3
+ export type WriterTell<W> = Effect<typeof WRITER_TELL, W, undefined>;
4
+ export type Writer<W> = WriterTell<W>;
5
+ /** Acumula un mensaje en el log. */
6
+ export declare function tell<W>(w: W): Eff<WriterTell<W>, undefined>;
7
+ /**
8
+ * Intérprete componible. Acumula los `tell` con el monoide y deja
9
+ * otros efectos intactos.
10
+ */
11
+ export declare function handleWriter<R, W, A>(eff: Eff<unknown, A>, monoid: Monoid<W>): Eff<R, {
12
+ result: A;
13
+ log: W;
14
+ }>;
15
+ /**
16
+ * Intérprete terminal: ejecuta combinando todos los `tell` con el
17
+ * monoide dado. Devuelve `{ result, log }`. Lanza si encuentra otra
18
+ * operación sin manejar.
19
+ */
20
+ export declare function runWriter<W, A>(eff: Eff<unknown, A>, monoid: Monoid<W>): {
21
+ result: A;
22
+ log: W;
23
+ };
24
+ /** Monoide concatenación de listas. */
25
+ export declare function listMonoid<W>(): Monoid<W[]>;
26
+ /** Monoide concatenación de strings. */
27
+ export declare const stringMonoid: Monoid<string>;
28
+ /** Monoide aditivo sobre números. */
29
+ export declare const sumMonoid: Monoid<number>;
30
+ //# sourceMappingURL=writer.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"writer.d.ts","sourceRoot":"","sources":["../../../src/type-theory/effects/writer.ts"],"names":[],"mappings":"AAQA,OAAO,KAAK,EAAE,GAAG,EAAE,MAAM,EAAE,MAAM,EAAE,MAAM,SAAS,CAAC;AAEnD,eAAO,MAAM,WAAW,EAAG,aAAsB,CAAC;AAElD,MAAM,MAAM,UAAU,CAAC,CAAC,IAAI,MAAM,CAAC,OAAO,WAAW,EAAE,CAAC,EAAE,SAAS,CAAC,CAAC;AACrE,MAAM,MAAM,MAAM,CAAC,CAAC,IAAI,UAAU,CAAC,CAAC,CAAC,CAAC;AAEtC,oCAAoC;AACpC,wBAAgB,IAAI,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,GAAG,GAAG,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,SAAS,CAAC,CAE3D;AAED;;;GAGG;AACH,wBAAgB,YAAY,CAAC,CAAC,EAAE,CAAC,EAAE,CAAC,EAClC,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EACpB,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAChB,GAAG,CAAC,CAAC,EAAE;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,CAAA;CAAE,CAAC,CAe/B;AAED;;;;GAIG;AACH,wBAAgB,SAAS,CAAC,CAAC,EAAE,CAAC,EAAE,GAAG,EAAE,GAAG,CAAC,OAAO,EAAE,CAAC,CAAC,EAAE,MAAM,EAAE,MAAM,CAAC,CAAC,CAAC,GAAG;IAAE,MAAM,EAAE,CAAC,CAAC;IAAC,GAAG,EAAE,CAAC,CAAA;CAAE,CAa9F;AAID,uCAAuC;AACvC,wBAAgB,UAAU,CAAC,CAAC,KAAK,MAAM,CAAC,CAAC,EAAE,CAAC,CAK3C;AAED,wCAAwC;AACxC,eAAO,MAAM,YAAY,EAAE,MAAM,CAAC,MAAM,CAGvC,CAAC;AAEF,qCAAqC;AACrC,eAAO,MAAM,SAAS,EAAE,MAAM,CAAC,MAAM,CAGpC,CAAC"}