-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}}.