:- module ops.
:- use_module builtin, private_builtin.
:- type (ops:mercury_op_table)
	--->	mercury_op_table
	.
:- type (ops:category)
	--->	before
	;	after
	.
:- instance (ops:op_table(ops : mercury_op_table)) where [
	pred((ops:lookup_infix_op)/5) is (ops:lookup_mercury_infix_op),
	pred((ops:lookup_operator_term)/4) is (ops:lookup_mercury_operator_term),
	pred((ops:lookup_prefix_op)/4) is (ops:lookup_mercury_prefix_op),
	pred((ops:lookup_binary_prefix_op)/5) is (ops:lookup_mercury_binary_prefix_op),
	pred((ops:lookup_postfix_op)/4) is (ops:lookup_mercury_postfix_op),
	pred((ops:lookup_op)/2) is (ops:lookup_mercury_op),
	func((ops:max_priority)/1) is (ops:mercury_max_priority),
	func((ops:arg_priority)/1) is (ops:mercury_arg_priority)
].
:- pred ops:lookup_mercury_infix_op((ops:mercury_op_table), string, int, (ops:assoc), (ops:assoc)).
:- mode ops:lookup_mercury_infix_op((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)) is semidet.
:- pred ops:lookup_mercury_operator_term((ops:mercury_op_table), int, (ops:assoc), (ops:assoc)).
:- mode ops:lookup_mercury_operator_term((builtin:in), (builtin:out), (builtin:out), (builtin:out)) is det.
:- pred ops:lookup_mercury_prefix_op((ops:mercury_op_table), string, int, (ops:assoc)).
:- mode ops:lookup_mercury_prefix_op((builtin:in), (builtin:in), (builtin:out), (builtin:out)) is semidet.
:- pred ops:lookup_mercury_binary_prefix_op((ops:mercury_op_table), string, int, (ops:assoc), (ops:assoc)).
:- mode ops:lookup_mercury_binary_prefix_op((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)) is semidet.
:- pred ops:lookup_mercury_postfix_op((ops:mercury_op_table), string, int, (ops:assoc)).
:- mode ops:lookup_mercury_postfix_op((builtin:in), (builtin:in), (builtin:out), (builtin:out)) is semidet.
:- pred ops:lookup_mercury_op((ops:mercury_op_table), string).
:- mode ops:lookup_mercury_op((builtin:in), (builtin:in)) is semidet.
:- func ops:mercury_max_priority((ops:mercury_op_table)) = int.
:- mode ops:mercury_max_priority((builtin:in)) = (builtin:out) is det.
:- func ops:mercury_arg_priority((ops:mercury_op_table)) = int.
:- mode ops:mercury_arg_priority((builtin:in)) = (builtin:out) is det.
ops:init_mercury_op_table = (ops:mercury_op_table).
ops:init_op_table((ops:mercury_op_table)).
ops:init_op_table = (ops:mercury_op_table).
:- pragma termination_info(ops:lookup_infix_op((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(ops:lookup_operator_term((builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(ops:lookup_prefix_op((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(ops:lookup_binary_prefix_op((builtin:in), (builtin:in), (builtin:out), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(ops:lookup_postfix_op((builtin:in), (builtin:in), (builtin:out), (builtin:out)), infinite, can_loop).
:- pragma termination_info(ops:lookup_op((builtin:in), (builtin:in)), infinite, can_loop).
:- pragma termination_info(ops:max_priority((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info(ops:arg_priority((builtin:in)) = (builtin:out), infinite, can_loop).
:- pragma termination_info((ops:init_mercury_op_table) = (builtin:uo), finite(0, [no]), cannot_loop).
:- pragma termination_info(ops:op_specifier_to_class((builtin:in), (builtin:out)), finite(2, [no, no]), cannot_loop).
:- pragma termination_info(ops:init_op_table((builtin:uo)), finite(0, [no]), cannot_loop).
:- pragma termination_info((ops:init_op_table) = (builtin:out), finite(0, [no]), cannot_loop).
