fxPipe

Composición tipada de izquierda a derecha. El último .then es la función — no hay .build().

R Function(A) fxPipe<A, R>(R Function(A) f) S Function(A) (R Function(A)).then<S>(S Function(R) next) R Function(A) fxPipe2<A, M, R>(M Function(A) first, R Function(M) second) R Function(A) fxPipe3<A, M1, M2, R>(M1 Function(A) first, M2 Function(M1) second, R Function(M2) third) R Function(A) fxPipe4<A, M1, M2, M3, R>(…) R Function(A) fxPipe5<A, M1, M2, M3, M4, R>(…)

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 parsenormalisescore y quédate solo con las filas que puntúan al menos 4.

Relacionado: pipe — la misma idea, sin tipos, sobre un valor · juxt — varias funciones, una entrada, una lista de resultados · map — la misma composición en este isolate · parallel — donde componer workers ahorra un hop