Packages
lustre
2.0.0
5.7.1
5.7.0
5.6.0
5.5.2
5.5.1
5.5.0
5.4.0
5.3.5
5.3.4
5.3.3
5.3.2
5.3.1
5.3.0
5.2.1
5.2.0
5.1.1
5.1.0
5.0.3
5.0.2
5.0.1
5.0.0
4.6.4
4.6.3
4.6.2
4.6.1
4.6.0
4.5.1
4.5.0
4.4.4
4.4.3
4.4.1
4.4.0
4.3.6
4.3.5
4.3.4
4.3.3
4.3.2
4.3.1
4.3.0
4.2.6
4.2.5
4.2.4
4.2.3
4.2.2
4.2.1
4.2.0
4.1.8
4.1.7
4.1.6
4.1.5
4.1.4
4.1.3
4.1.2
4.1.1
4.1.0
4.0.0
4.0.0-rc1
4.0.0-rc.2
3.1.4
3.1.3
3.1.2
3.1.1
3.1.0
3.0.12
3.0.11
3.0.10
3.0.9
3.0.8
3.0.7
3.0.6
3.0.5
3.0.4
3.0.3
3.0.2
3.0.1
3.0.0
3.0.0-rc.8
3.0.0-rc.7
3.0.0-rc.6
3.0.0-rc.5
3.0.0-rc.4
3.0.0-rc.3
3.0.0-rc.2
3.0.0-rc.1
2.0.1
2.0.0
1.3.0
1.2.0
1.1.0
1.0.0
Create HTML templates, single page applications, Web Components, and real-time server components in Gleam!
Current section
Files
Jump to
Current section
Files
src/lustre@cmd.erl
-module(lustre@cmd).
-compile(no_auto_import).
-export([from/1, none/0, batch/1, map/2, to_list/1]).
-export_type([cmd/1]).
-opaque cmd(ESL) :: {cmd, fun((fun((ESL) -> nil)) -> nil), cmd(ESL)} | none.
-spec from(fun((fun((ESM) -> nil)) -> nil)) -> cmd(ESM).
from(Cmd) ->
{cmd, Cmd, none}.
-spec none() -> cmd(any()).
none() ->
none.
-spec batch(list(cmd(ESQ))) -> cmd(ESQ).
batch(Cmds) ->
_pipe = Cmds,
_pipe@1 = gleam@list:flat_map(_pipe, fun to_list/1),
gleam@list:fold_right(_pipe@1, none, fun(Rest, Cmd) -> {cmd, Cmd, Rest} end).
-spec map(cmd(ESU), fun((ESU) -> ESW)) -> cmd(ESW).
map(Cmd, F) ->
case Cmd of
{cmd, Cmd@1, Next} ->
{cmd,
fun(Dispatch) -> Cmd@1(fun(A) -> Dispatch(F(A)) end) end,
map(Next, F)};
none ->
none
end.
-spec to_list(cmd(ESY)) -> list(fun((fun((ESY) -> nil)) -> nil)).
to_list(Cmd) ->
case Cmd of
{cmd, Cmd@1, Next} ->
[Cmd@1 | to_list(Next)];
none ->
[]
end.