Files
mercury/tests/valid/transitive_instance.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

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.