mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-23 21:33:49 +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.
43 lines
628 B
Mathematica
43 lines
628 B
Mathematica
:- module transitive_instance.
|
|
|
|
:- interface.
|
|
|
|
:- type t.
|
|
|
|
:- implementation.
|
|
|
|
:- import_module transitive_instance__sub2.
|
|
|
|
:- type t ---> some [T] c(T) => c2(T).
|
|
|
|
:- module transitive_instance__sub1.
|
|
|
|
:- interface.
|
|
|
|
:- typeclass c1(T) where [].
|
|
|
|
:- instance c1(int).
|
|
|
|
:- implementation.
|
|
|
|
:- instance c1(int) where [].
|
|
|
|
:- end_module transitive_instance__sub1.
|
|
|
|
|
|
:- module transitive_instance__sub2.
|
|
|
|
:- interface.
|
|
|
|
:- import_module transitive_instance__sub1.
|
|
|
|
:- typeclass c2(T) <= c1(T) where [].
|
|
|
|
:- instance c2(int).
|
|
|
|
:- implementation.
|
|
|
|
:- instance c2(int) where [].
|
|
|
|
:- end_module transitive_instance__sub2.
|