Current section
Files
Jump to
Current section
Files
src/fp2@semigroup.erl
-module(fp2@semigroup).
-compile(no_auto_import).
-export([reverse/1, intercalate/1, struct1/2, struct2/3, struct3/4, tuple1/1, tuple2/2, tuple3/3, min/1, max/1, constant/1, first/0, last/0, concat_all/2]).
-spec reverse(fp2@models:semigroup(ERX)) -> fp2@models:semigroup(ERX).
reverse(S) ->
{semigroup, fun(X, Y) -> (erlang:element(2, S))(Y, X) end}.
-spec intercalate(ESA) -> fun((fp2@models:semigroup(ESA)) -> fp2@models:semigroup(ESA)).
intercalate(Middle) ->
fun(S) ->
{semigroup,
fun(X, Y) ->
(erlang:element(2, S))(X, (erlang:element(2, S))(Middle, Y))
end}
end.
-spec struct1(fp2@defunc:defunc1(ESC, ESD), fp2@models:semigroup(ESC)) -> fp2@models:semigroup(ESD).
struct1(Defunc, Semigroup1) ->
{semigroup,
fun(X, Y) ->
X@1 = (erlang:element(3, Defunc))(X),
Y@1 = (erlang:element(3, Defunc))(Y),
(erlang:element(2, Defunc))(
(erlang:element(2, Semigroup1))(
erlang:element(1, X@1),
erlang:element(1, Y@1)
)
)
end}.
-spec struct2(
fp2@defunc:defunc2(ESI, ESJ, ESK),
fp2@models:semigroup(ESI),
fp2@models:semigroup(ESJ)
) -> fp2@models:semigroup(ESK).
struct2(Defunc, Semigroup1, Semigroup2) ->
{semigroup,
fun(X, Y) ->
X@1 = (erlang:element(3, Defunc))(X),
Y@1 = (erlang:element(3, Defunc))(Y),
(erlang:element(2, Defunc))(
(erlang:element(2, Semigroup1))(
erlang:element(1, X@1),
erlang:element(1, Y@1)
),
(erlang:element(2, Semigroup2))(
erlang:element(2, X@1),
erlang:element(2, Y@1)
)
)
end}.
-spec struct3(
fp2@defunc:defunc3(ESR, ESS, EST, ESU),
fp2@models:semigroup(ESR),
fp2@models:semigroup(ESS),
fp2@models:semigroup(EST)
) -> fp2@models:semigroup(ESU).
struct3(Defunc, Semigroup1, Semigroup2, Semigroup3) ->
{semigroup,
fun(X, Y) ->
X@1 = (erlang:element(3, Defunc))(X),
Y@1 = (erlang:element(3, Defunc))(Y),
(erlang:element(2, Defunc))(
(erlang:element(2, Semigroup1))(
erlang:element(1, X@1),
erlang:element(1, Y@1)
),
(erlang:element(2, Semigroup2))(
erlang:element(2, X@1),
erlang:element(2, Y@1)
),
(erlang:element(2, Semigroup3))(
erlang:element(3, X@1),
erlang:element(3, Y@1)
)
)
end}.
-spec tuple1(fp2@models:semigroup(ETD)) -> fp2@models:semigroup({ETD}).
tuple1(Semigroup1) ->
{semigroup,
fun(X, Y) ->
{(erlang:element(2, Semigroup1))(
erlang:element(1, X),
erlang:element(1, Y)
)}
end}.
-spec tuple2(fp2@models:semigroup(ETG), fp2@models:semigroup(ETI)) -> fp2@models:semigroup({ETG,
ETI}).
tuple2(Semigroup1, Semigroup2) ->
{semigroup,
fun(X, Y) ->
{(erlang:element(2, Semigroup1))(
erlang:element(1, X),
erlang:element(1, Y)
),
(erlang:element(2, Semigroup2))(
erlang:element(2, X),
erlang:element(2, Y)
)}
end}.
-spec tuple3(
fp2@models:semigroup(ETL),
fp2@models:semigroup(ETN),
fp2@models:semigroup(ETP)
) -> fp2@models:semigroup({ETL, ETN, ETP}).
tuple3(Semigroup1, Semigroup2, Semigroup3) ->
{semigroup,
fun(X, Y) ->
{(erlang:element(2, Semigroup1))(
erlang:element(1, X),
erlang:element(1, Y)
),
(erlang:element(2, Semigroup2))(
erlang:element(2, X),
erlang:element(2, Y)
),
(erlang:element(2, Semigroup3))(
erlang:element(3, X),
erlang:element(3, Y)
)}
end}.
-spec min(fp2@models:ord(ETS)) -> fp2@models:semigroup(ETS).
min(O) ->
{semigroup, fp2@ord:min(O)}.
-spec max(fp2@models:ord(ETV)) -> fp2@models:semigroup(ETV).
max(O) ->
{semigroup, fp2@ord:max(O)}.
-spec constant(ETY) -> fp2@models:semigroup(ETY).
constant(It) ->
{semigroup, fun(_, _) -> It end}.
-spec first() -> fp2@models:semigroup(any()).
first() ->
{semigroup, fun(X, _) -> X end}.
-spec last() -> fp2@models:semigroup(any()).
last() ->
{semigroup, fun(_, Y) -> Y end}.
-spec concat_all(fp2@models:semigroup(EUE), EUE) -> fun((list(EUE)) -> EUE).
concat_all(M, Empty) ->
fun(Ass) -> gleam@list:fold(Ass, Empty, erlang:element(2, M)) end.