Current section

Files

Jump to
smut src smut.erl
Raw

src/smut.erl

-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}.