Current section

Files

Jump to
lustre src lustre@effect.erl
Raw

src/lustre@effect.erl

-module(lustre@effect).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function]).
-export([from/1, none/0, batch/1, map/2]).
-export_type([effect/1]).
-opaque effect(GXZ) :: {effect,
list(fun((fun((GXZ) -> nil), fun((GXZ) -> nil)) -> nil))}.
-spec from(fun((fun((GYA) -> nil)) -> nil)) -> effect(GYA).
from(Effect) ->
{effect, [fun(Dispatch, _) -> Effect(Dispatch) end]}.
-spec none() -> effect(any()).
none() ->
{effect, []}.
-spec batch(list(effect(GYE))) -> effect(GYE).
batch(Effects) ->
{effect,
(gleam@list:fold(
Effects,
[],
fun(B, _use1) ->
{effect, A} = _use1,
gleam@list:append(B, A)
end
))}.
-spec map(effect(GYI), fun((GYI) -> GYK)) -> effect(GYK).
map(Effect, F) ->
{effect,
(gleam@list:map(
erlang:element(2, Effect),
fun(Effect@1) ->
fun(Dispatch, Emit) ->
Dispatch@1 = gleam@function:compose(F, Dispatch),
Emit@1 = gleam@function:compose(F, Emit),
Effect@1(Dispatch@1, Emit@1)
end
end
))}.