def start.ready

bend-kit-camber@0.15.0.1 · camber.bend:335

import bend-kit-camber@0.15.0.1/camber.bend as Camber
import Base

335def start.ready(~R: Type, ~P: Data, ~I: Data, ~E: Data, ~O: Data,
336  ~handler: R -> P -> I -> IO(R & Result<&2, &2, E, O>), ~destroy: R -> IO(Unit),
337  capacity: Nat, +room: U32, result: Result<&2, &1, E, List<R>>
338) -> IO(Result<&2, &1, E, Owner<R, P, I, E, O>>):
339  match result:
340    case Fail{error}:
341      IO.pure(Result<&2, &1, E, Owner<R, P, I, E, O>>, Fail{error})
342    case Done{resources}:
343      do IO<Result<&2, &1, E, Owner<R, P, I, E, O>>>:
344        channel : Chan(Message<R, P, I, E, O>) <- Chan.new(Message<R, P, I, E, O>, room)
345        +messages : Chan(Message<R, P, I, E, O>) = channel
346        finished : Chan(Unit) <- IO.fork(Unit, owner(~R, ~P, ~I, ~E, ~O, ~handler, ~destroy, messages, room, Waiting{resources, ledger.open(capacity)}))
347        return Done{Owner{Context{messages}, finished}}

Uses (18)

Used by (1)