run method

OptionAsync<(A, B, C, D)> run()

Runs all recipes concurrently and combines results into a typed record.

Implementation

OptionAsync<(A, B, C, D)> run() async {
  final results = await (a.run(), b.run(), c.run(), d.run()).wait;
  final (optA, optB, optC, optD) = results;

  return optA.fold<Opt<(A, B, C, D)>>(
    onVal: (va) => optB.fold<Opt<(A, B, C, D)>>(
      onVal: (vb) => optC.fold<Opt<(A, B, C, D)>>(
        onVal: (vc) => optD.fold<Opt<(A, B, C, D)>>(
          onVal: (vd) => Val((va, vb, vc, vd)),
          onNil: () => const Nil(),
        ),
        onNil: () => const Nil(),
      ),
      onNil: () => const Nil(),
    ),
    onNil: () => const Nil(),
  );
}