Packages

A porting of some parts of fp-ts to Gleam

Current section

Files

Jump to
fp2 src fp2@ord.erl
Raw

src/fp2@ord.erl

-module(fp2@ord).
-compile(no_auto_import).
-export([min/1, max/1, get_semigroup/0, get_monoid/0]).
-spec min(fp2@models:ord(ELQ)) -> fun((ELQ, ELQ) -> ELQ).
min(O) ->
fun(First, Second) -> case (erlang:element(2, O))(First, Second) of
eq ->
First;
lt ->
First;
gt ->
Second
end end.
-spec max(fp2@models:ord(ELT)) -> fun((ELT, ELT) -> ELT).
max(O) ->
fun(First, Second) -> case (erlang:element(2, O))(First, Second) of
eq ->
First;
lt ->
Second;
gt ->
First
end end.
-spec get_semigroup() -> fp2@models:semigroup(fp2@models:ord(any())).
get_semigroup() ->
{semigroup,
fun(First, Second) ->
{ord,
fun(A, B) ->
First_res = (erlang:element(2, First))(A, B),
case First_res of
eq ->
(erlang:element(2, Second))(A, B);
_@1 ->
First_res
end
end}
end}.
-spec get_monoid() -> fp2@models:monoid(fp2@models:ord(any())).
get_monoid() ->
{monoid, erlang:element(2, get_semigroup()), {ord, fun(_, _) -> eq end}}.