mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-24 13:53:54 +00:00
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.
25 lines
514 B
Mathematica
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.
|
|
|
|
%-----------------------------------------------------------------------------%
|