fxPipe
Composición tipada de izquierda a derecha. El último .then es la función — no hay .build().
Lección
pipe pasa un valor por una lista de funciones, pero la
lista es dynamic. fxPipe es la forma tipada
que devuelve una función:
final f = fxPipe3(parse, normalise, score);
f(line);
fx(lines).map(f);
Cada .then devuelve la cadena hasta ahora, así que no
hay nada que "terminar." Llámalo, o pásalo a map /
parallel.
fxPipe(parse) es simplemente parse — el
nombre marca el inicio. parse.then(normalise) también
vale.
Dos llamadas a .parallel copian cada resultado de
vuelta a este isolate y otra vez hacia fuera. Un worker compuesto
paga el hop una vez:
await fx(lines)
.parallel(4, fxPipe3(parse, normalise, score), chunked: true)
.toList();
Las etapas tienen que ser enviables cuando el resultado es un
worker de parallel. juxt es la otra
dirección: varias funciones, una entrada, una lista de resultados.
fxPipe2..fxPipe5 fusionan las mismas etapas
en un solo closure, así un map o worker
parallel caliente no paga una llamada anidada por
cada .then. La aridad para en 5, como
zipOrAccumulate2..5. Más allá, sigue encadenando
.then o escribe la función fusionada tú.
parallel es solo VM, así que los playgrounds de abajo
corren la misma función compuesta a través de map.
Demo 1 · parse, normalise, score
Tres etapas, una función. En la VM se lo pasarías a
parallel; aquí corre en el playground.
Demo 2 · Los mismos números que tres maps
fxPipe es composición, no un operador nuevo. Tres
maps y una función compuesta imprimen la misma lista.
Pruébalo tú
Ejercicio: compón parse → normalise →
score y quédate solo con las filas que puntúan al
menos 4.