Packages

A porting of some parts of fp-ts to Gleam

Current section

Files

Jump to
fp_gl src fp_gl@semigroup.erl
Raw

src/fp_gl@semigroup.erl

-module(fp_gl@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(fp_gl@models:semigroup(EVA)) -> fp_gl@models:semigroup(EVA).
reverse(S) ->
{semigroup, fun(X, Y) -> (erlang:element(2, S))(Y, X) end}.
-spec intercalate(EVD) -> fun((fp_gl@models:semigroup(EVD)) -> fp_gl@models:semigroup(EVD)).
intercalate(Middle) ->
fun(S) ->
{semigroup,
fun(X, Y) ->
(erlang:element(2, S))(X, (erlang:element(2, S))(Middle, Y))
end}
end.
-spec struct1(fp_gl@defunc:defunc1(EVF, EVG), fp_gl@models:semigroup(EVF)) -> fp_gl@models:semigroup(EVG).
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(
fp_gl@defunc:defunc2(EVL, EVM, EVN),
fp_gl@models:semigroup(EVL),
fp_gl@models:semigroup(EVM)
) -> fp_gl@models:semigroup(EVN).
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(
fp_gl@defunc:defunc3(EVU, EVV, EVW, EVX),
fp_gl@models:semigroup(EVU),
fp_gl@models:semigroup(EVV),
fp_gl@models:semigroup(EVW)
) -> fp_gl@models:semigroup(EVX).
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(fp_gl@models:semigroup(EWG)) -> fp_gl@models:semigroup({EWG}).
tuple1(Semigroup1) ->
{semigroup,
fun(X, Y) ->
{(erlang:element(2, Semigroup1))(
erlang:element(1, X),
erlang:element(1, Y)
)}
end}.
-spec tuple2(fp_gl@models:semigroup(EWJ), fp_gl@models:semigroup(EWL)) -> fp_gl@models:semigroup({EWJ,
EWL}).
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(
fp_gl@models:semigroup(EWO),
fp_gl@models:semigroup(EWQ),
fp_gl@models:semigroup(EWS)
) -> fp_gl@models:semigroup({EWO, EWQ, EWS}).
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(fp_gl@models:ord(EWV)) -> fp_gl@models:semigroup(EWV).
min(O) ->
{semigroup, fp_gl@ord:min(O)}.
-spec max(fp_gl@models:ord(EWY)) -> fp_gl@models:semigroup(EWY).
max(O) ->
{semigroup, fp_gl@ord:max(O)}.
-spec constant(EXB) -> fp_gl@models:semigroup(EXB).
constant(It) ->
{semigroup, fun(_, _) -> It end}.
-spec first() -> fp_gl@models:semigroup(any()).
first() ->
{semigroup, fun(X, _) -> X end}.
-spec last() -> fp_gl@models:semigroup(any()).
last() ->
{semigroup, fun(_, Y) -> Y end}.
-spec concat_all(fp_gl@models:semigroup(EXH), EXH) -> fun((list(EXH)) -> EXH).
concat_all(M, Empty) ->
fun(Ass) -> gleam@list:fold(Ass, Empty, erlang:element(2, M)) end.