Files
mercury/tests/valid/func_method.m
Julien Fischer a0e5667af5 Do not allow non-abstract instance declarations to occur in module
For review by anyone.

Estimated hours taken: 10
Branches: main, release

Do not allow non-abstract instance declarations to occur in module
interfaces.  Emit an error message if this occurs.

Fix the formatting of some error messages regarding typeclasses
and instances.

compiler/check_typeclass.m:
	Use error_util to generate the error messages from this module.
	This fixes a problem where the printing of sym_names and arities
	differed in the same error message.

compiler/error_util.m:
	Add a format component for the pred_or_func type.
	Add the equivalence type format_components.

compiler/make_hlds.m:
	Make the format of some error messages concerning typeclasses
	more consistent.

compiler/modules.m:
	Check for non-abstract instance declarations in module interfaces
	and emit an error message if they do.

tests/invalid/Mmakefile:
tests/invalid/instance_bug.m:
tests/invalid/instance_bug.err_exp:
 	Test case for the above.

tests/hard_coded/typeclasses/*:
tests/invalid/*:
tests/recompilation/*:
tests/valid/*:
	Update test cases as necessary.
2005-04-12 07:58:24 +00:00

25 lines
514 B
Mathematica

%-----------------------------------------------------------------------------%
:- module func_method.
:- interface.
:- type pair(A, B) ---> pair(A, B).
:- typeclass c(A) where [
func op(pair(A, B)) = pair(A, B),
mode op(in) = out is det
].
:- instance c(int).
:- implementation.
:- instance c(int) where [
func(op/1) is op_int
].
:- func op_int(pair(int, T)) = pair(int, T).
:- mode op_int(in) = out is det.
op_int(X) = X.
%-----------------------------------------------------------------------------%