mapEffect
Idéntico a map — una convención de nombres para cuando la función está ahí por su efecto secundario.
Lección
Si miras el código fuente verás que mapEffect es literalmente
B mapEffect(f, iterable) => map(f, iterable); — la misma
función, la misma pereza, la misma firma. Existe únicamente para
documentar la intención en el punto de llamada: usa
mapEffect cuando el valor de retorno del callback importa
menos que lo que hace por el camino (escribir en un log, guardar en una
base de datos, incrementar un contador), y usa map cuando el
valor de retorno es lo que buscas.
Al ser un simple alias, todo lo que sabes de map se aplica
sin cambios: es perezoso, compone con .concurrent(n) en el
lado asíncrono y no tiene ningún manejo de errores propio. No hay ninguna
razón de comportamiento para elegir uno u otro — es una señal de
legibilidad para quien lea el pipeline después (a menudo, tú mismo).
Demo 1 · Fundamentos
El callback registra un efecto secundario y además devuelve un valor
transformado — la misma forma que map, distinta intención en el punto de llamada:
Demo 2 · Asíncrono, con concurrencia
mapEffectAsync se ejecuta exactamente sobre el mismo motor que
mapAsync, así que .concurrent(n) lo paraleliza
igual — muy útil para pipelines de «procesar y persistir»:
Pruébalo tú
Ejercicio: usa mapEffect para hacer print de una
línea 'billing $<dollars>' por cada importe mientras
conviertes céntimos a dólares.
map — la función en la que delega mapEffect ·
peek — observar sin cambiar el valor en absoluto ·
flatMap — map + aplanado ·
concurrent — evaluación en paralelo