Lectura / 01 · 5 min
¿Por qué Effect.gen?
De una secuencia de instrucciones a un programa que podés componer antes de ejecutarlo.
Un valor que describe trabajo
Al llamar a una función async, su cuerpo empieza a ejecutarse hasta la primera suspensión. Un valor Effect permite guardar la descripción de trabajo sin iniciarla. Podés pasarla a otra función, agregar recuperación de errores o proveer servicios antes de entregarla al runtime.
Effect.gen organiza esa composición como una secuencia. Cada yield* incorpora otro Effect y obtiene su valor exitoso. Si ese paso falla, la secuencia deja de avanzar por el camino exitoso. No hace falta esconder el error en un valor nulo para que el compilador lo recuerde.
import { Effect } from "effect"
const programa = Effect.gen(function* () {
const saludo = yield* Effect.succeed("hola")
return `${saludo}, comunidad`
})
// La ejecución ocurre acá.
const resultado = Effect.runSync(programa)Componer primero, ejecutar en el borde
Si cada función interna ejecuta su propio programa, vuelve más difícil decidir desde afuera cómo manejar errores, dependencias y cancelación. Una práctica útil es retornar Effects desde la lógica de aplicación y ejecutarlos en un borde claro: el handler, el comando o el punto de entrada.
runSync corresponde a programas que pueden completarse sin trabajo asíncrono. Un programa que espera red o timers necesita una ejecución asíncrona, como Effect.runPromise. El primer lab usa ejemplos pequeños para mantener visible la diferencia entre construir y correr.
Una predicción antes del resultado
En el lab, elegí two-steps, leé su descripción y predecí el resultado. Después ejecutalo. Repetí con fail-short-circuit y buscá el paso que no llega a ocurrir.
Describe es metadata escrita para enseñar el ejemplo. No inspecciona arbitrariamente un Effect ni ejecuta pasos para adivinarlos. Run sí llama al motor Effect. Esa frontera permite comparar una hipótesis con evidencia sin confundir una ilustración con una ejecución.
Material comunitario para Effect 4 RC. Contrastá la API con la documentación oficial de la versión que uses.