def tick.got

bend-kit-runner@0.13.0.1 · runner.bend:1591

import bend-kit-runner@0.13.0.1/runner.bend as Runner
import Base
import bend-kit-bytes@0.3.3.0/bytes.bend as Bytes
import bend-kit-retry@0.3.0.0/retry.bend as Retry

1591# Handles the message, then claims due tickets into free units with the claim fuel left. None ends the round.
1592def tick.got(~A: Data, ~penc: A -> Bytes.Bytes, ~target: A -> String, ~work: A -> IO(Retry.Outcome), x: Runner<A> & Maybe<&1, Msg<A>>, +ran: Bool, +left: Nat,
1593    err: Out(Unit), next: Claimed(A) -> IO(Runner<A> & Out(Bool))) -> IO(Runner<A> & Out(Bool)):
1594  (r, m) = x
1595  match m:
1596    case None{}:
1597      IO.pure(Runner<A> & Out(Bool), (r, tick.ran(err, ran)))
1598    case Some{msg}:
1599      do IO<Runner<A> & Out(Bool)>:
1600        +now : Nat <- clock()
1601        rnd : Out(U32) <- IO.random_u32()
1602        handle(~A, ~penc, msg, now, random(rnd), r, err, (r2 => more => e2 =>
1603          IO.bind(Claimed(A), Runner<A> & Out(Bool), claim(~A, ~penc, ~target, ~work, Nat.add(left, more), now, r2), k2 => next(merged(A, e2, k2)))))

Uses (25)

Used by (2)