Either × pipelines
Errores tipados fusionados con los pipelines perezosos y conscientes de la concurrencia de FxDart — la pieza que no tienen ni Arrow ni ninguna librería FP de Dart.
Lección
Una cadena de valores Either gana terminales que
entienden de Either: rights() y lefts() se
quedan con uno de los dos lados, separated() parte los dos a
la vez (con la misma forma de record que partition) y
sequence() es todo o nada — recoge todos los aciertos en una
sola lista y falla rápido en el primer Left. Como el
pipeline es perezoso, el fail-fast es literal: sequence()
deja de tirar de valores en el primer fallo, así que los
elementos posteriores nunca llegan a computarse.
Su gemelo fail-slow es mapOrAccumulate(transform) sobre
cualquier cadena fx()/asíncrona: valida todos los elementos y
conserva todos los fallos. En cadenas asíncronas acepta
concurrency: n y viaja por el mismo canal de retorno
concurrent(n) que el resto de FxDart — n elementos en vuelo,
resultados en orden, y cada elemento se ejecuta en su propio ámbito, así
que un fallo en uno jamás puede filtrarse a otro.
Todos ellos son ansiosos por diseño, lo que además los convierte en la vía de escape autorizada del peligro pereza × raise: nunca devuelvas un pipeline perezoso desde un bloque raise — devuelve en su lugar uno de estos resultados.
Demo 1 · rights, lefts & separated
Demo 2 · sequence — fail-fast, literalmente
Demo 3 · validación fail-slow concurrente
Demo 4 · flattenOrAccumulate y los extractores async
Cuando ya tienes los Eithers, el terminal
fail-slow se escribía
mapOrAccumulate((r, v) => r.bind(v)) — un
bind identidad. flattenOrAccumulate() (el nombre de Arrow)
es ese terminal directamente: cada éxito, o cada fallo como un
Nel. Completa el trío — separated() conserva
ambos lados, sequence() falla rápido,
flattenOrAccumulate() falla lento. Y la cadena async ya
lleva la familia completa de extractores (rights /
lefts / separated / sequence /
flattenOrAccumulate), así que una validación async alimenta
una insignia de conteos en un solo terminal.
Pruébalo tú
Ejercicio: suma lo que sí se parseó e informa de lo que no.
concurrent — el canal de retorno por el que viaja la variante asíncrona ·
partition — el primo de separated() basado en predicados ·
rights / separated — las mismas extracciones en una cadena de eventos ·
errores tipados — guía completa