-module(fused@actor). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/fused/actor.gleam"). -export([start/3]). -file("src/fused/actor.gleam", 20). -spec loop( gleam@erlang@process:selector(FXR), gleam@erlang@process:pid_(), FXT, fun((gleam@erlang@process:pid_(), FXT, FXR) -> gleam@option:option(FXT)) ) -> nil. loop(Selector, Self, State, Update) -> fused@promise:await( fused@process:selector_recv(Self, Selector), fun(Message) -> fused@promise:await( Update(Self, State, Message), fun(State@1) -> case State@1 of {some, State@2} -> loop(Selector, Self, State@2, Update); none -> fused@promise:resolve(nil) end end ) end ). -file("src/fused/actor.gleam", 5). -spec start( gleam@erlang@process:pid_(), fun((gleam@erlang@process:pid_()) -> {FXJ, gleam@erlang@process:selector(FXK), FXM}), fun((gleam@erlang@process:pid_(), FXJ, FXK) -> gleam@option:option(FXJ)) ) -> FXM. start(Parent, Init, Update) -> {Return_send, Return_recv} = fused@process:new(), begin fused@process:spawn( Parent, fun(Self) -> fused@promise:await( Init(Self), fun(_use0) -> {State, Selector, Return} = _use0, fused@process:send(Return_send, Return), loop(Selector, Self, State, Update) end ) end ) end, fused@process:recv(Return_recv).