:- module std_util. :- interface. :- import_module list, set. :- type (std_util:univ). :- pred std_util:type_to_univ(T, (std_util:univ)). :- mode std_util:type_to_univ(mercury_builtin:di, mercury_builtin:uo) is det. :- mode std_util:type_to_univ(mercury_builtin:in, mercury_builtin:out) is det. :- mode std_util:type_to_univ(mercury_builtin:out, mercury_builtin:in) is semidet. :- pred std_util:univ_to_type((std_util:univ), T). :- mode std_util:univ_to_type(mercury_builtin:in, mercury_builtin:out) is semidet. :- mode std_util:univ_to_type(mercury_builtin:out, mercury_builtin:in) is det. :- mode std_util:univ_to_type(mercury_builtin:uo, mercury_builtin:di) is det. :- func std_util:univ(T) = (std_util:univ). :- mode std_util:univ(mercury_builtin:in) = mercury_builtin:out is det. :- mode std_util:univ(mercury_builtin:di) = mercury_builtin:uo is det. :- mode std_util:univ(mercury_builtin:out) = mercury_builtin:in is semidet. :- func std_util:univ_type((std_util:univ)) = (std_util:type_info). :- type (std_util:maybe(T)) ---> std_util:no ; std_util:yes(T). :- type (std_util:unit) ---> std_util:unit. :- type (std_util:pair(T1, T2)) ---> std_util:'-'(T1, T2). :- type (std_util:pair(T)) == (std_util:pair(T, T)). :- pred std_util:solutions((pred T), (list:list(T))). :- mode std_util:solutions((pred(mercury_builtin:out) is multi), mercury_builtin:out) is det. :- mode std_util:solutions((pred(mercury_builtin:out) is nondet), mercury_builtin:out) is det. :- pred std_util:solutions_set((pred T), (set:set(T))). :- mode std_util:solutions_set((pred(mercury_builtin:out) is multi), mercury_builtin:out) is det. :- mode std_util:solutions_set((pred(mercury_builtin:out) is nondet), mercury_builtin:out) is det. :- pred std_util:unsorted_solutions((pred T), (list:list(T))). :- mode std_util:unsorted_solutions((pred(mercury_builtin:out) is multi), mercury_builtin:out) is cc_multi. :- mode std_util:unsorted_solutions((pred(mercury_builtin:out) is nondet), mercury_builtin:out) is cc_multi. :- pred std_util:aggregate((pred T), pred(T, U, U), U, U). :- mode std_util:aggregate((pred(mercury_builtin:out) is multi), (pred(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det), mercury_builtin:in, mercury_builtin:out) is det. :- mode std_util:aggregate((pred(mercury_builtin:out) is multi), (pred(mercury_builtin:in, mercury_builtin:di, mercury_builtin:uo) is det), mercury_builtin:di, mercury_builtin:uo) is det. :- mode std_util:aggregate((pred(mercury_builtin:out) is nondet), (pred(mercury_builtin:in, mercury_builtin:di, mercury_builtin:uo) is det), mercury_builtin:di, mercury_builtin:uo) is det. :- mode std_util:aggregate((pred(mercury_builtin:out) is nondet), (pred(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det), mercury_builtin:in, mercury_builtin:out) is det. :- pred std_util:unsorted_aggregate((pred T), pred(T, U, U), U, U). :- mode std_util:unsorted_aggregate((pred(mercury_builtin:out) is multi), (pred(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det), mercury_builtin:in, mercury_builtin:out) is cc_multi. :- mode std_util:unsorted_aggregate((pred(mercury_builtin:out) is multi), (pred(mercury_builtin:in, mercury_builtin:di, mercury_builtin:uo) is det), mercury_builtin:di, mercury_builtin:uo) is cc_multi. :- mode std_util:unsorted_aggregate((pred(mercury_builtin:muo) is multi), (pred(mercury_builtin:mdi, mercury_builtin:di, mercury_builtin:uo) is det), mercury_builtin:di, mercury_builtin:uo) is cc_multi. :- mode std_util:unsorted_aggregate((pred(mercury_builtin:out) is nondet), (pred(mercury_builtin:in, mercury_builtin:di, mercury_builtin:uo) is det), mercury_builtin:di, mercury_builtin:uo) is cc_multi. :- mode std_util:unsorted_aggregate((pred(mercury_builtin:out) is nondet), (pred(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out) is det), mercury_builtin:in, mercury_builtin:out) is cc_multi. :- mode std_util:unsorted_aggregate((pred(mercury_builtin:muo) is nondet), (pred(mercury_builtin:mdi, mercury_builtin:di, mercury_builtin:uo) is det), mercury_builtin:di, mercury_builtin:uo) is cc_multi. :- pred std_util:maybe_pred(pred(T1, T2), T1, (std_util:maybe(T2))). :- mode std_util:maybe_pred((pred(mercury_builtin:in, mercury_builtin:out) is semidet), mercury_builtin:in, mercury_builtin:out) is det. :- pred std_util:semidet_succeed is semidet. :- pred std_util:semidet_fail is semidet. :- pred std_util:cc_multi_equal(T, T). :- mode std_util:cc_multi_equal(mercury_builtin:di, mercury_builtin:uo) is cc_multi. :- mode std_util:cc_multi_equal(mercury_builtin:in, mercury_builtin:out) is cc_multi. :- type (std_util:type_info). :- type (std_util:type_ctor_info). :- func std_util:type_of(T) = (std_util:type_info). :- mode std_util:type_of(mercury_builtin:unused) = mercury_builtin:out is det. :- func std_util:type_name((std_util:type_info)) = string. :- pred std_util:type_ctor_and_args((std_util:type_info), (std_util:type_ctor_info), (list:list((std_util:type_info)))). :- mode std_util:type_ctor_and_args(mercury_builtin:in, mercury_builtin:out, mercury_builtin:out) is det. :- func std_util:type_ctor((std_util:type_info)) = (std_util:type_ctor_info). :- func std_util:type_args((std_util:type_info)) = (list:list((std_util:type_info))). :- func std_util:type_ctor_name((std_util:type_ctor_info)) = string. :- func std_util:type_ctor_module_name((std_util:type_ctor_info)) = string. :- func std_util:type_ctor_arity((std_util:type_ctor_info)) = int. :- pred std_util:type_ctor_name_and_arity((std_util:type_ctor_info), string, string, int). :- mode std_util:type_ctor_name_and_arity(mercury_builtin:in, mercury_builtin:out, mercury_builtin:out, mercury_builtin:out) is det. :- func std_util:make_type((std_util:type_ctor_info), (list:list((std_util:type_info)))) = (std_util:type_info). :- mode std_util:make_type(mercury_builtin:in, mercury_builtin:in) = mercury_builtin:out is semidet. :- mode std_util:make_type(mercury_builtin:out, mercury_builtin:out) = mercury_builtin:in is cc_multi. :- func std_util:det_make_type((std_util:type_ctor_info), (list:list((std_util:type_info)))) = (std_util:type_info). :- mode std_util:det_make_type(mercury_builtin:in, mercury_builtin:in) = mercury_builtin:out is det. :- func std_util:num_functors((std_util:type_info)) = int. :- pred std_util:get_functor((std_util:type_info), int, string, int, (list:list((std_util:type_info)))). :- mode std_util:get_functor(mercury_builtin:in, mercury_builtin:in, mercury_builtin:out, mercury_builtin:out, mercury_builtin:out) is semidet. :- func std_util:construct((std_util:type_info), int, (list:list((std_util:univ)))) = (std_util:univ). :- mode std_util:construct(mercury_builtin:in, mercury_builtin:in, mercury_builtin:in) = mercury_builtin:out is semidet. :- pred std_util:functor(T, string, int). :- mode std_util:functor(mercury_builtin:in, mercury_builtin:out, mercury_builtin:out) is det. :- func std_util:arg(T, int) = ArgT. :- mode std_util:arg(mercury_builtin:in, mercury_builtin:in) = mercury_builtin:out is semidet. :- func std_util:argument(T, int) = (std_util:univ). :- mode std_util:argument(mercury_builtin:in, mercury_builtin:in) = mercury_builtin:out is semidet. :- func std_util:det_arg(T, int) = ArgT. :- mode std_util:det_arg(mercury_builtin:in, mercury_builtin:in) = mercury_builtin:out is det. :- func std_util:det_argument(T, int) = (std_util:univ). :- mode std_util:det_argument(mercury_builtin:in, mercury_builtin:in) = mercury_builtin:out is det. :- pred std_util:deconstruct(T, string, int, (list:list((std_util:univ)))). :- mode std_util:deconstruct(mercury_builtin:in, mercury_builtin:out, mercury_builtin:out, mercury_builtin:out) is det.