Current section
Files
Jump to
Current section
Files
src/fp2@monoid.erl
-module(fp2@monoid).
-compile(no_auto_import).
-export([monoid_string/0, concat_all/1, to_semigroup/1, from_semigroup/2]).
-export_type([monoid/1]).
-type monoid(EOC) :: {monoid, fun((EOC, EOC) -> EOC), EOC}.
-spec monoid_string() -> monoid(binary()).
monoid_string() ->
{monoid, fun(A, B) -> gleam@string:concat([A, B]) end, <<""/utf8>>}.
-spec concat_all(monoid(EOE)) -> fun((list(EOE)) -> EOE).
concat_all(M) ->
fun(Ass) ->
gleam@list:fold(Ass, erlang:element(3, M), erlang:element(2, M))
end.
-spec to_semigroup(monoid(EOH)) -> fp2@semigroup:semigroup(EOH).
to_semigroup(M) ->
{semigroup, erlang:element(2, M)}.
-spec from_semigroup(fp2@semigroup:semigroup(EOK), EOK) -> monoid(EOK).
from_semigroup(S, Empty) ->
{monoid, erlang:element(2, S), Empty}.