Library examples.future_fibonacci__code

Require Import zoo.prelude.
Require Import zoo.language.typeclasses.
Require Import zoo.language.notations.
Require Import zoo_parabs.future.
Require Import zoo_parabs.pool.
Require Import zoo.options.

Definition future_fibonacciΩ main₁ : val :=
  π—Ώπ—²π—° "main" "ctx" "n" β†’
    π—Άπ—³ "n" ≀ 1 π˜π—΅π—²π—» (
      "n"
    ) π—²π—Ήπ˜€π—² (
      π—Ήπ—²π˜ "fut1" =
        futureΩ async "ctx" (π—³π˜‚π—» "ctx" β†’ "main" "ctx" ("n" - 1))
      π—Άπ—»
      π—Ήπ—²π˜ "fut2" =
        futureΩ async "ctx" (π—³π˜‚π—» "ctx" β†’ "main" "ctx" ("n" - 2))
      π—Άπ—»
      futureΩ wait "ctx" "fut1" + futureΩ wait "ctx" "fut2"
    ).

Definition future_fibonacciΩ main : val :=
  π—³π˜‚𝗻 "num_worker" "n" β†’
    poolΩ run
      "num_worker"
      (π—³π˜‚π—» "ctx" β†’ future_fibonacciΩ main₁ "ctx" "n").