-module(smut). -compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]). -define(FILEPATH, "src/smut.gleam"). -export([new/1]). -export_type([msg/1, state/1]). -type msg(EAQ) :: {assign, EAQ} | {update, gleam@erlang@process:subject(EAQ), fun((EAQ) -> EAQ)} | {retrieve, gleam@erlang@process:subject(EAQ)}. -opaque state(EAR) :: {handle, gleam@erlang@process:subject(msg(EAR))}. -file("src/smut.gleam", 13). -spec run(EAS, gleam@erlang@process:subject(msg(EAS))) -> nil. run(State, Pipe) -> case gleam_erlang_ffi:'receive'(Pipe) of _ -> run(State, Pipe) end. -file("src/smut.gleam", 19). -spec new(EAV) -> state(EAV). new(Initial_state) -> Back_channel = gleam@erlang@process:new_subject(), proc_lib:spawn_link( fun() -> Pipe = gleam@erlang@process:new_subject(), gleam@erlang@process:send(Back_channel, Pipe), run(Initial_state, Pipe) end ), Pipe@1 = gleam_erlang_ffi:'receive'(Back_channel), {handle, Pipe@1}.