[m-rev.] for review: do not allow non-abstract instance decls in interfaces
Julien Fischer
juliensf at cs.mu.OZ.AU
Tue Apr 12 15:10:56 AEST 2005
On Mon, 11 Apr 2005, Julien Fischer wrote:
>
> On Mon, 11 Apr 2005, Ian MacLarty wrote:
>
> > On 11 Apr 2005, at 13:51, Julien Fischer wrote:
> >
> > >
> > > For review by anyone.
> > >
> > > Estimated hours taken: 2
> > > Branches: main, release
> > >
> > > Fix a long standing problem where the compiler would accept
> > > non-abstract instance declarations in module interfaces, despite
> > > the reference manual disallowing these.
> > >
> > > compiler/modules.m:
> > > Emit an error message when a non-abstract instance
> > > declaration occurs in a module interface.
> > >
> > > tests/invalid/Mmakefile:
> > > tests/invalid/instance_bug.m:
> > > tests/invalid/instance_bug.err_exp:
> > > Test case for the above.
> > >
> > > Julien.
> > >
> >
> > This all looks fine to me.
> >
>
> By itself yes; unfortunately there were about 37 test cases that had
> non-abstract instances in their interfaces and parts of the reference
> manual are a bit misleading as well. I'll post a revised diff of this
> either tonight or tomorrow.
>
Here is a revised diff that fixes the test cases as well as the formatting
of a lot of the error messages regarding typeclasses and instances.
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.
Workspace:/home/swordfish/juliensf/ws75
Index: compiler/check_typeclass.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/check_typeclass.m,v
retrieving revision 1.66
diff -u -r1.66 check_typeclass.m
--- compiler/check_typeclass.m 2 Apr 2005 17:10:00 -0000 1.66
+++ compiler/check_typeclass.m 11 Apr 2005 23:35:55 -0000
@@ -59,6 +59,9 @@
:- pred check_typeclass__check_typeclasses(qual_info::in, qual_info::out,
module_info::in, module_info::out, bool::out, io::di, io::uo) is det.
+%---------------------------------------------------------------------------%
+%---------------------------------------------------------------------------%
+
:- implementation.
:- import_module check_hlds__inst_match.
@@ -92,6 +95,8 @@
:- import_module term.
:- import_module varset.
+%---------------------------------------------------------------------------%
+
check_typeclass__check_typeclasses(!QualInfo, !ModuleInfo, FoundError, !IO) :-
check_typeclass__check_instance_decls(!QualInfo, !ModuleInfo,
FoundInstanceError, !IO),
@@ -159,13 +164,10 @@
Interface = abstract
->
ClassId = class_id(ClassName, ClassArity),
- sym_name_and_arity_to_string(ClassName / ClassArity,
- ClassNameStr),
ErrorPieces = [
words("Error: no definition for typeclass"),
- words(string__append_list(["`", ClassNameStr, "'."]))
+ sym_name_and_arity(ClassName / ClassArity)
],
-
Messages0 = !.CheckTCInfo ^ error_messages,
!:CheckTCInfo = !.CheckTCInfo ^ error_messages :=
[TermContext - ErrorPieces | Messages0],
@@ -237,12 +239,11 @@
(
ClassInterface = abstract,
ClassId = class_id(ClassName, ClassArity),
- sym_name_and_arity_to_string(ClassName / ClassArity,
- ClassNameStr),
ErrorPieces = [
words("Error: instance declaration for"),
words("abstract typeclass"),
- words(string__append_list(["`", ClassNameStr, "'."]))
+ sym_name_and_arity(ClassName / ClassArity),
+ suffix(".")
],
!:Errors = [TermContext - ErrorPieces | !.Errors]
;
@@ -333,29 +334,29 @@
% Construct an appropriate error message.
%
ClassId = class_id(ClassName, ClassArity),
- mdbcomp__prim_data__sym_name_to_string(ClassName,
- ClassNameString),
- string__int_to_string(ClassArity, ClassArityString),
- string__append_list([
- "In instance declaration for `",
- ClassNameString, "/", ClassArityString, "': ",
- "incorrect method name(s): "],
- ErrorMsgStart),
- BogusInstanceMethodNames = list__map(format_method_name,
+ ErrorMsgStart = [
+ words("In instance declaration for"),
+ sym_name_and_arity(ClassName / ClassArity),
+ suffix(":"),
+ words("incorrect method name(s):")
+ ],
+ ErrorMsgBody0 = list.map(format_method_name,
BogusInstanceMethods),
- ErrorMsgBody0 = list_to_pieces(BogusInstanceMethodNames),
- ErrorMsgBody = list__append(ErrorMsgBody0, [words(".")]),
- NewError = Context - [words(ErrorMsgStart) | ErrorMsgBody],
+ ErrorMsgBody1 = list.condense(ErrorMsgBody0),
+ ErrorMsgBody = list__append(ErrorMsgBody1, [suffix(".")]),
+ NewError = Context - ( ErrorMsgStart ++ ErrorMsgBody ),
!:Errors = [NewError | !.Errors]
).
-:- func format_method_name(instance_method) = string.
+:- func format_method_name(instance_method) = format_components.
-format_method_name(Method) = StringName :-
+format_method_name(Method) = MethodName :-
Method = instance_method(PredOrFunc, Name, _Defn, Arity, _Context),
adjust_func_arity(PredOrFunc, Arity, PredArity),
- StringName = hlds_out__simple_call_id_to_string(
- PredOrFunc - Name/PredArity).
+ MethodName = [
+ pred_or_func(PredOrFunc),
+ sym_name_and_arity(Name / PredArity)
+ ].
%----------------------------------------------------------------------------%
@@ -540,7 +541,7 @@
MethodNameString),
mdbcomp__prim_data__sym_name_to_string(ClassName,
ClassNameString),
- pred_or_func_to_string(PredOrFunc, PredOrFuncString),
+ PredOrFuncString = pred_or_func_to_string(PredOrFunc),
string__int_to_string(Arity, ArityString),
InstanceTypesString = mercury_type_list_to_string(
InstanceVarSet, InstanceTypes),
@@ -575,22 +576,23 @@
OrderedInstanceMethods = OrderedInstanceMethods0,
InstanceDefn = InstanceDefn0,
ClassId = class_id(ClassName, _ClassArity),
- mdbcomp__prim_data__sym_name_to_string(MethodName,
- MethodNameString),
mdbcomp__prim_data__sym_name_to_string(ClassName,
ClassNameString),
- pred_or_func_to_string(PredOrFunc, PredOrFuncString),
- string__int_to_string(Arity, ArityString),
InstanceTypesString = mercury_type_list_to_string(
InstanceVarSet, InstanceTypes),
- string__append_list([
- "In instance declaration for `",
- ClassNameString, "(", InstanceTypesString, ")': ",
- "no implementation for type class ",
- PredOrFuncString, " method `",
- MethodNameString, "/", ArityString, "'."],
- NewError),
- Errors = [InstanceContext - [words(NewError)] | Errors0],
+
+ Error = [words("In instance declaration for"),
+ fixed("`" ++ ClassNameString
+ ++ "(" ++ InstanceTypesString
+ ++ ")'"),
+ suffix(":"),
+ words("no implementation for type class"),
+ pred_or_func(PredOrFunc),
+ words("method"),
+ sym_name_and_arity(MethodName / Arity),
+ suffix(".")
+ ],
+ Errors = [InstanceContext - Error | Errors0],
Info = instance_method_info(ModuleInfo, QualInfo, PredName,
Arity, ExistQVars, ArgTypes, ClassContext,
ArgModes, Errors,
@@ -651,11 +653,6 @@
ResultList = MatchingMethods
).
-:- pred pred_or_func_to_string(pred_or_func::in, string::out) is det.
-
-pred_or_func_to_string(predicate, "predicate").
-pred_or_func_to_string(function, "function").
-
:- pred produce_auxiliary_procs(class_id::in, list(tvar)::in, pred_markers::in,
list(type)::in, list(prog_constraint)::in, tvarset::in,
module_name::in, instance_proc_def::in, prog_context::in,
@@ -1025,3 +1022,6 @@
add_path_element(class_id(Name, Arity), RevPieces0) =
[sym_name_and_arity(Name/Arity), words("<=") | RevPieces0].
+%---------------------------------------------------------------------------%
+:- end_module check_typeclass.
+%---------------------------------------------------------------------------%
Index: compiler/error_util.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/error_util.m,v
retrieving revision 1.35
diff -u -r1.35 error_util.m
--- compiler/error_util.m 7 Apr 2005 06:32:07 -0000 1.35
+++ compiler/error_util.m 11 Apr 2005 08:06:41 -0000
@@ -67,9 +67,15 @@
% The output should contain the string form of
% the sym_name, followed by '/' and the arity,
% all surrounded by `' quotes.
-
- ; nl. % Insert a line break if there has been text
+
+ ; nl % Insert a line break if there has been text
% output since the last line break.
+
+ ; pred_or_func(pred_or_func).
+ % Output the string "predicate" or "function"
+ % as appropriate.
+
+:- type format_components == list(format_component).
% Convert a list of strings into a list of format_components
% separated by commas, with the last two elements separated by `and'.
@@ -128,6 +134,7 @@
% Append a punctuation character to a message, avoiding unwanted
% line splitting between the message and the punctuation.
+ %
:- func append_punctuation(list(format_component), char) =
list(format_component).
@@ -375,6 +382,9 @@
Str = Word ++ " " ++ TailStr
)
;
+ Component = pred_or_func(PredOrFunc),
+ Str = pred_or_func_to_string(PredOrFunc)
+ ;
Component = nl,
Str = "\n" ++ TailStr
).
@@ -389,39 +399,37 @@
list(word)::in, list(list(string))::in, list(list(string))::out)
is det.
-convert_components_to_word_list([], RevWords0, Paras0, Paras) :-
+convert_components_to_word_list([], RevWords0, !Paras) :-
Strings = rev_words_to_strings(RevWords0),
- list__reverse([Strings | Paras0], Paras).
-convert_components_to_word_list([Component | Components], RevWords0,
- Paras0, Paras) :-
+ list__reverse([Strings | !.Paras], !:Paras).
+convert_components_to_word_list([Component | Components], RevWords0, !Paras) :-
(
Component = fixed(Word),
- RevWords1 = [word(Word) | RevWords0],
- Paras1 = Paras0
+ RevWords1 = [word(Word) | RevWords0]
;
Component = suffix(Word),
- RevWords1 = [suffix_word(Word) | RevWords0],
- Paras1 = Paras0
+ RevWords1 = [suffix_word(Word) | RevWords0]
;
Component = words(WordsStr),
- break_into_words(WordsStr, RevWords0, RevWords1),
- Paras1 = Paras0
+ break_into_words(WordsStr, RevWords0, RevWords1)
;
Component = sym_name(SymName),
- RevWords1 = [word(sym_name_to_word(SymName)) | RevWords0],
- Paras1 = Paras0
+ RevWords1 = [word(sym_name_to_word(SymName)) | RevWords0]
;
Component = sym_name_and_arity(SymNameAndArity),
Word = sym_name_and_arity_to_word(SymNameAndArity),
- RevWords1 = [word(Word) | RevWords0],
- Paras1 = Paras0
+ RevWords1 = [word(Word) | RevWords0]
+ ;
+ Component = pred_or_func(PredOrFunc),
+ Word = pred_or_func_to_string(PredOrFunc),
+ RevWords1 = [word(Word) | RevWords0]
;
Component = nl,
Strings = rev_words_to_strings(RevWords0),
- Paras1 = [Strings | Paras0],
+ list.cons(Strings, !Paras),
RevWords1 = []
),
- convert_components_to_word_list(Components, RevWords1, Paras1, Paras).
+ convert_components_to_word_list(Components, RevWords1, !Paras).
:- func rev_words_to_strings(list(word)) = list(string).
@@ -617,6 +625,10 @@
;
Piece0 = sym_name_and_arity(SymNameAndArity),
String = sym_name_and_arity_to_word(SymNameAndArity),
+ Piece = fixed(string__append(String, char_to_string(Punc)))
+ ;
+ Piece0 = pred_or_func(PredOrFunc),
+ String = pred_or_func_to_string(PredOrFunc),
Piece = fixed(string__append(String, char_to_string(Punc)))
;
Piece0 = nl,
Index: compiler/make_hlds.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/make_hlds.m,v
retrieving revision 1.509
diff -u -r1.509 make_hlds.m
--- compiler/make_hlds.m 7 Apr 2005 06:32:09 -0000 1.509
+++ compiler/make_hlds.m 11 Apr 2005 07:56:52 -0000
@@ -9208,7 +9208,8 @@
unspecified_det_for_method(Name, Arity, PredOrFunc, Context, !IO) :-
Pieces = [words("Error: no determinism declaration"),
words("for type class method"),
- words(simple_call_id_to_string(PredOrFunc, Name, Arity)),
+ pred_or_func(PredOrFunc),
+ sym_name_and_arity(Name / Arity),
suffix(".")],
write_error_pieces(Context, 0, Pieces, !IO),
io__set_exit_status(1, !IO).
@@ -9218,7 +9219,8 @@
unspecified_det_for_exported(Name, Arity, PredOrFunc, Context, !IO) :-
Pieces = [words("Error: no determinism declaration for exported"),
- words(simple_call_id_to_string(PredOrFunc, Name, Arity)),
+ pred_or_func(PredOrFunc),
+ sym_name_and_arity(Name / Arity),
suffix(".")],
write_error_pieces(Context, 0, Pieces, !IO),
io__set_exit_status(1, !IO).
@@ -9228,7 +9230,8 @@
clause_for_imported_pred_error(Name, Arity, PredOrFunc, Context, !IO) :-
Pieces = [words("Error: clause for imported"),
- words(simple_call_id_to_string(PredOrFunc, Name, Arity)),
+ pred_or_func(PredOrFunc),
+ sym_name_and_arity(Name / Arity),
suffix(".")],
write_error_pieces(Context, 0, Pieces, !IO),
io__set_exit_status(1, !IO).
Index: compiler/modules.m
===================================================================
RCS file: /home/mercury1/repository/mercury/compiler/modules.m,v
retrieving revision 1.325
diff -u -r1.325 modules.m
--- compiler/modules.m 11 Apr 2005 02:50:58 -0000 1.325
+++ compiler/modules.m 11 Apr 2005 03:41:26 -0000
@@ -463,7 +463,9 @@
% - report an error if the `implementation' section of a sub-module
% is contained inside the `interface' section of its parent module
% - check for modules declared as both nested and separate sub-modules.
-
+ % - check for non-abstract typeclass instance declarations in module
+ % interfaces.
+ %
:- type module_list == list(pair(module_name, item_list)).
:- pred split_into_submodules(module_name::in, item_list::in, module_list::out,
@@ -6797,6 +6799,7 @@
InParentInterface = no,
split_into_submodules_2(ModuleName, Items0, InParentInterface,
Items, ModuleList, !IO),
+
%
% Check that there are no items after the end_module declaration.
%
@@ -6896,11 +6899,11 @@
%
( Item = module_defn(_, interface) - _Context ->
InInterface1 = yes
- ; Item = module_defn(_, implementation) - Context ->
+ ; Item = module_defn(_, implementation) - ImplContext ->
(
InParentInterface = yes,
- report_error_implementation_in_interface(ModuleName, Context,
- !IO)
+ report_error_implementation_in_interface(ModuleName,
+ ImplContext, !IO)
;
InParentInterface = no
),
@@ -6909,6 +6912,20 @@
InInterface1 = InInterface0
),
%
+ % Check to make sure that a non-abstract instance declaration
+ % does not occur in a module interface.
+ %
+ (
+ InInterface1 = yes,
+ Item = instance(_, _, _, Body, _, _) - InstanceContext,
+ Body \= abstract
+ ->
+ report_non_abstract_instance_in_interface(InstanceContext, !IO)
+ ;
+ true
+ ),
+
+ %
% parse the remaining items for this module,
%
split_into_submodules_3(ModuleName, Items1,
@@ -7019,6 +7036,15 @@
report_items_after_end_module(Context, !IO) :-
ErrorPieces = [words("Error: item(s) after end_module declaration.")],
+ write_error_pieces(Context, 0, ErrorPieces, !IO),
+ io.set_exit_status(1, !IO).
+
+:- pred report_non_abstract_instance_in_interface(prog_context::in,
+ io::di, io::uo) is det.
+
+report_non_abstract_instance_in_interface(Context, !IO) :-
+ ErrorPieces = [words("Error: non-abstract instance declaration"),
+ words("in module interface.")],
write_error_pieces(Context, 0, ErrorPieces, !IO),
io.set_exit_status(1, !IO).
Index: tests/hard_coded/typeclasses/arbitrary_constraint_class.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/arbitrary_constraint_class.m,v
retrieving revision 1.1
diff -u -r1.1 arbitrary_constraint_class.m
--- tests/hard_coded/typeclasses/arbitrary_constraint_class.m 26 Jul 2002 06:33:18 -0000 1.1
+++ tests/hard_coded/typeclasses/arbitrary_constraint_class.m 11 Apr 2005 05:28:05 -0000
@@ -9,12 +9,6 @@
:- typeclass solver_for_float(U) <= solver_for(float, U) where [].
-:- instance solver_for(float, string) where [
- coerce(Float) = string__float_to_string(Float)
-].
-
-:- instance solver_for_float(string) where [].
-
:- pred mg(T, T) <= solver_for_float(T).
:- mode mg(in, out) is det.
@@ -22,6 +16,12 @@
:- implementation.
:- import_module std_util.
+
+:- instance solver_for(float, string) where [
+ coerce(Float) = string__float_to_string(Float)
+].
+
+:- instance solver_for_float(string) where [].
mg(S0, S) :-
( semidet_succeed ->
Index: tests/hard_coded/typeclasses/arbitrary_constraint_pred_1.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/arbitrary_constraint_pred_1.m,v
retrieving revision 1.1
diff -u -r1.1 arbitrary_constraint_pred_1.m
--- tests/hard_coded/typeclasses/arbitrary_constraint_pred_1.m 26 Jul 2002 06:33:18 -0000 1.1
+++ tests/hard_coded/typeclasses/arbitrary_constraint_pred_1.m 11 Apr 2005 05:29:23 -0000
@@ -7,10 +7,6 @@
func coerce(B) = S
].
-:- instance solver_for(float, string) where [
- coerce(Float) = string__float_to_string(Float)
-].
-
:- pred mg(T, T) <= solver_for(float, T).
:- mode mg(in, out) is det.
@@ -18,6 +14,10 @@
:- implementation.
:- import_module std_util.
+
+:- instance solver_for(float, string) where [
+ coerce(Float) = string__float_to_string(Float)
+].
mg(S0, S) :-
( semidet_succeed ->
Index: tests/hard_coded/typeclasses/arbitrary_constraint_pred_2.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/arbitrary_constraint_pred_2.m,v
retrieving revision 1.1
diff -u -r1.1 arbitrary_constraint_pred_2.m
--- tests/hard_coded/typeclasses/arbitrary_constraint_pred_2.m 26 Jul 2002 06:33:19 -0000 1.1
+++ tests/hard_coded/typeclasses/arbitrary_constraint_pred_2.m 11 Apr 2005 05:29:42 -0000
@@ -8,10 +8,6 @@
func coerce(B) = S
].
-:- instance solver_for(list(T), float) where [
- coerce(_) = 42.0
-].
-
:- pred mg(T, T) <= solver_for(list(T), T).
:- mode mg(in, out) is det.
@@ -19,6 +15,10 @@
:- implementation.
:- import_module std_util.
+
+:- instance solver_for(list(T), float) where [
+ coerce(_) = 42.0
+].
mg(S0, S) :-
( semidet_succeed ->
Index: tests/hard_coded/typeclasses/existential_rtti.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/existential_rtti.m,v
retrieving revision 1.2
diff -u -r1.2 existential_rtti.m
--- tests/hard_coded/typeclasses/existential_rtti.m 1 Dec 2003 15:56:10 -0000 1.2
+++ tests/hard_coded/typeclasses/existential_rtti.m 11 Apr 2005 05:31:53 -0000
@@ -8,16 +8,10 @@
:- typeclass c(T) where [].
-:- instance c(int) where [].
-
:- typeclass c2(T1, T2) where [].
-:- instance c2(int, string) where [].
-
:- typeclass c3(T1, T2) where [].
-:- instance c3(int, float) where [].
-
:- type f(X) ---> some [T] f(int, T, list(X), int).
:- type myf ---> some [T] myf(T) => c(T).
@@ -49,6 +43,10 @@
:- implementation.
:- import_module std_util.
+
+:- instance c(int) where [].
+:- instance c2(int, string) where [].
+:- instance c3(int, float) where [].
main -->
io__write_string("Writing copies of terms:\n"),
Index: tests/hard_coded/typeclasses/func_default_mode_bug.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/func_default_mode_bug.m,v
retrieving revision 1.1
diff -u -r1.1 func_default_mode_bug.m
--- tests/hard_coded/typeclasses/func_default_mode_bug.m 17 Mar 1999 20:41:48 -0000 1.1
+++ tests/hard_coded/typeclasses/func_default_mode_bug.m 11 Apr 2005 05:32:36 -0000
@@ -61,6 +61,9 @@
func minus_one = C
].
+% ++++++++++++++++
+:- implementation.
+% ++++++++++++++++
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -79,13 +82,6 @@
func( minus_one/0) is my_minus_one
].
-
-
-% ++++++++++++++++
-:- implementation.
-% ++++++++++++++++
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Index: tests/hard_coded/typeclasses/impure_methods.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/impure_methods.m,v
retrieving revision 1.3
diff -u -r1.3 impure_methods.m
--- tests/hard_coded/typeclasses/impure_methods.m 20 Feb 2004 06:01:42 -0000 1.3
+++ tests/hard_coded/typeclasses/impure_methods.m 11 Apr 2005 05:33:11 -0000
@@ -12,20 +12,8 @@
:- type foo ---> foo.
- % impure implementations of impure methods
-:- instance c(foo) where [
- pred(m1/1) is foo_m1,
- pred(m2/2) is foo_m2
-].
-
:- type goo ---> goo.
- % pure implementations of impure methods
-:- instance c(goo) where [
- pred(m1/1) is goo_m1,
- pred(m2/2) is goo_m2
-].
-
:- impure pred foo_m1(foo::in) is det.
:- semipure pred foo_m2(foo::in, int::out) is det.
@@ -33,6 +21,18 @@
:- pred goo_m2(goo::in, int::out) is det.
:- implementation.
+
+% impure implementations of impure methods
+:- instance c(foo) where [
+ pred(m1/1) is foo_m1,
+ pred(m2/2) is foo_m2
+].
+
+% pure implementations of impure methods
+:- instance c(goo) where [
+ pred(m1/1) is goo_m1,
+ pred(m2/2) is goo_m2
+].
:- pragma promise_pure(main/2).
Index: tests/hard_coded/typeclasses/instance_unconstrained_tvar.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/instance_unconstrained_tvar.m,v
retrieving revision 1.1
diff -u -r1.1 instance_unconstrained_tvar.m
--- tests/hard_coded/typeclasses/instance_unconstrained_tvar.m 10 Apr 2000 07:20:51 -0000 1.1
+++ tests/hard_coded/typeclasses/instance_unconstrained_tvar.m 11 Apr 2005 05:33:28 -0000
@@ -11,11 +11,11 @@
mode m(in, di, uo) is det
].
+:- implementation.
+
:- instance p(list(T)) where [
pred(m/3) is io__write
].
-
-:- implementation.
main -->
m([1,2,3]),
Index: tests/hard_coded/typeclasses/instance_unconstrained_tvar_dup.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/instance_unconstrained_tvar_dup.m,v
retrieving revision 1.1
diff -u -r1.1 instance_unconstrained_tvar_dup.m
--- tests/hard_coded/typeclasses/instance_unconstrained_tvar_dup.m 24 Aug 2000 06:08:21 -0000 1.1
+++ tests/hard_coded/typeclasses/instance_unconstrained_tvar_dup.m 11 Apr 2005 05:33:50 -0000
@@ -19,11 +19,11 @@
mode m(in, in, di, uo) is det
].
+:- implementation.
+
:- instance p(list(T), list(T)) where [
pred(m/4) is write_list_pair
].
-
-:- implementation.
main -->
m([1,2,3], [4,5,6]),
Index: tests/hard_coded/typeclasses/instance_unconstrained_tvar_type_spec.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/instance_unconstrained_tvar_type_spec.m,v
retrieving revision 1.1
diff -u -r1.1 instance_unconstrained_tvar_type_spec.m
--- tests/hard_coded/typeclasses/instance_unconstrained_tvar_type_spec.m 1 Sep 2000 11:48:22 -0000 1.1
+++ tests/hard_coded/typeclasses/instance_unconstrained_tvar_type_spec.m 11 Apr 2005 05:34:14 -0000
@@ -11,11 +11,11 @@
mode m(in, di, uo) is det
].
+:- implementation.
+
:- instance p(list(T)) where [
pred(m/3) is io__write
].
-
-:- implementation.
main -->
call_m([1, 2, 3]),
Index: tests/hard_coded/typeclasses/mode_decl_order_bug.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/mode_decl_order_bug.m,v
retrieving revision 1.1
diff -u -r1.1 mode_decl_order_bug.m
--- tests/hard_coded/typeclasses/mode_decl_order_bug.m 17 Mar 1999 20:41:50 -0000 1.1
+++ tests/hard_coded/typeclasses/mode_decl_order_bug.m 11 Apr 2005 05:35:26 -0000
@@ -65,6 +65,9 @@
mode is_null_for_plus( in) is semidet
].
+% ++++++++++++++++
+:- implementation.
+% ++++++++++++++++
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
@@ -83,13 +86,6 @@
func( minus_one/0) is my_minus_one
].
-
-
-% ++++++++++++++++
-:- implementation.
-% ++++++++++++++++
-
-
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
Index: tests/hard_coded/typeclasses/operator_classname.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/operator_classname.m,v
retrieving revision 1.1
diff -u -r1.1 operator_classname.m
--- tests/hard_coded/typeclasses/operator_classname.m 29 Jan 1998 23:52:01 -0000 1.1
+++ tests/hard_coded/typeclasses/operator_classname.m 11 Apr 2005 05:37:48 -0000
@@ -10,11 +10,11 @@
pred p(T::in, io__state::di, io__state::uo) is det
].
+:- implementation.
+
:- instance +(int) where [
pred(p/3) is io__write_int
].
-
-:- implementation.
main --> foo(1), io__nl.
Index: tests/hard_coded/typeclasses/recursive_instance_1.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/recursive_instance_1.m,v
retrieving revision 1.1
diff -u -r1.1 recursive_instance_1.m
--- tests/hard_coded/typeclasses/recursive_instance_1.m 26 Jul 2002 06:33:19 -0000 1.1
+++ tests/hard_coded/typeclasses/recursive_instance_1.m 11 Apr 2005 06:26:53 -0000
@@ -1,13 +1,18 @@
:- module recursive_instance_1.
:- interface.
-:- import_module int, io.
-:- import_module list.
+:- import_module io.
:- typeclass foo(T, U) where [
func bar(T) = U
].
+:- pred main(io::di, io::uo) is det.
+
+:- implementation.
+:- import_module std_util, char.
+:- import_module int, list.
+
:- instance foo(int, list(T)) <= foo(list(int), T) where [
bar(N) = ( N < 0 -> [bar([N+1])] ; [] )
].
@@ -22,11 +27,6 @@
),
( bar([]) = 0 )
].
-
-:- pred main(io::di, io::uo) is det.
-
-:- implementation.
-:- import_module std_util, char.
main -->
{ X = bar([0,1,2]) },
Index: tests/hard_coded/typeclasses/type_spec.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/type_spec.m,v
retrieving revision 1.2
diff -u -r1.2 type_spec.m
--- tests/hard_coded/typeclasses/type_spec.m 10 Oct 2000 23:39:35 -0000 1.2
+++ tests/hard_coded/typeclasses/type_spec.m 11 Apr 2005 05:39:55 -0000
@@ -11,9 +11,6 @@
pred compare_t(comparison_result::out, T::in, T::in) is det
].
-:- instance comparable_t(int) where [
- pred(compare_t/3) is compare_int
-].
:- pred compare_int(comparison_result::out, int::in, int::in) is det.
:- pred type_spec(list(T)::in, list(T)::in, list(T)::out) is det.
@@ -27,14 +24,6 @@
pred all_zero(T::in) is semidet
].
-:- instance all_zero(list(T)) <= all_zero(T) where [
- pred(all_zero/1) is list_all_zero
- ].
-
-:- instance all_zero(int) where [
- pred(all_zero/1) is is_zero
- ].
-
:- pred is_zero(int::in) is semidet.
% This tests the case where higher_order.m must extract
@@ -63,6 +52,18 @@
:- implementation.
:- import_module type_spec_2.
+
+:- instance comparable_t(int) where [
+ pred(compare_t/3) is compare_int
+].
+
+:- instance all_zero(list(T)) <= all_zero(T) where [
+ pred(all_zero/1) is list_all_zero
+ ].
+
+:- instance all_zero(int) where [
+ pred(all_zero/1) is is_zero
+ ].
main -->
{ type_spec([1,2,3], [3,4,5], Result1) },
Index: tests/hard_coded/typeclasses/typeclass_order_bug.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/typeclass_order_bug.m,v
retrieving revision 1.2
diff -u -r1.2 typeclass_order_bug.m
--- tests/hard_coded/typeclasses/typeclass_order_bug.m 15 Jan 2001 07:27:31 -0000 1.2
+++ tests/hard_coded/typeclasses/typeclass_order_bug.m 11 Apr 2005 05:39:06 -0000
@@ -20,11 +20,11 @@
mode m(in, in, di, uo) is det
].
+:- implementation.
+
:- instance p(maybe(T), maybe(U)) where [
pred(m/4) is write_maybe_pair
].
-
-:- implementation.
main -->
m(yes("ok"), yes(1)),
Index: tests/hard_coded/typeclasses/unqualified_method2.m
===================================================================
RCS file: /home/mercury1/repository/tests/hard_coded/typeclasses/unqualified_method2.m,v
retrieving revision 1.1
diff -u -r1.1 unqualified_method2.m
--- tests/hard_coded/typeclasses/unqualified_method2.m 3 Dec 1999 12:52:17 -0000 1.1
+++ tests/hard_coded/typeclasses/unqualified_method2.m 11 Apr 2005 05:40:33 -0000
@@ -10,6 +10,10 @@
mode print_modified(in, di, uo) is det
].
+:- instance class(int).
+
+:- implementation.
+
:- instance class(int) where [
pred(print_modified/3) is print_modified_int
].
Index: tests/invalid/Mmakefile
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/Mmakefile,v
retrieving revision 1.161
diff -u -r1.161 Mmakefile
--- tests/invalid/Mmakefile 6 Apr 2005 05:08:08 -0000 1.161
+++ tests/invalid/Mmakefile 11 Apr 2005 03:36:49 -0000
@@ -85,6 +85,7 @@
impure_method_impl \
inline_conflict \
inst_list_dup \
+ instance_bug \
invalid_export_detism \
invalid_import_detism \
invalid_main \
Index: tests/invalid/impure_method_impl.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/impure_method_impl.err_exp,v
retrieving revision 1.5
diff -u -r1.5 impure_method_impl.err_exp
--- tests/invalid/impure_method_impl.err_exp 17 Jan 2005 05:01:40 -0000 1.5
+++ tests/invalid/impure_method_impl.err_exp 11 Apr 2005 06:22:50 -0000
@@ -1,15 +1,15 @@
-impure_method_impl.m:017: In call to impure predicate
-impure_method_impl.m:017: `impure_method_impl.foo_m2/2':
-impure_method_impl.m:017: purity error: call must be preceded by `impure'
-impure_method_impl.m:017: indicator.
-impure_method_impl.m:017: In type class method implementation:
-impure_method_impl.m:017: purity error: predicate is impure.
-impure_method_impl.m:017: It must be declared `impure' or promised semipure.
-impure_method_impl.m:016: In call to semipure predicate
-impure_method_impl.m:016: `impure_method_impl.foo_m1/2':
-impure_method_impl.m:016: purity error: call must be preceded by `semipure'
-impure_method_impl.m:016: indicator.
-impure_method_impl.m:016: In type class method implementation:
-impure_method_impl.m:016: purity error: predicate is semipure.
-impure_method_impl.m:016: It must be declared `semipure' or promised pure.
+impure_method_impl.m:022: In call to impure predicate
+impure_method_impl.m:022: `impure_method_impl.foo_m2/2':
+impure_method_impl.m:022: purity error: call must be preceded by `impure'
+impure_method_impl.m:022: indicator.
+impure_method_impl.m:022: In type class method implementation:
+impure_method_impl.m:022: purity error: predicate is impure.
+impure_method_impl.m:022: It must be declared `impure' or promised semipure.
+impure_method_impl.m:021: In call to semipure predicate
+impure_method_impl.m:021: `impure_method_impl.foo_m1/2':
+impure_method_impl.m:021: purity error: call must be preceded by `semipure'
+impure_method_impl.m:021: indicator.
+impure_method_impl.m:021: In type class method implementation:
+impure_method_impl.m:021: purity error: predicate is semipure.
+impure_method_impl.m:021: It must be declared `semipure' or promised pure.
For more information, try recompiling with `-E'.
Index: tests/invalid/impure_method_impl.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/impure_method_impl.m,v
retrieving revision 1.2
diff -u -r1.2 impure_method_impl.m
--- tests/invalid/impure_method_impl.m 7 Nov 2002 16:17:08 -0000 1.2
+++ tests/invalid/impure_method_impl.m 11 Apr 2005 05:45:51 -0000
@@ -12,15 +12,15 @@
:- type foo ---> foo.
-:- instance c(foo) where [
- pred(m1/2) is foo_m1,
- pred(m2/2) is foo_m2
-].
-
:- semipure pred foo_m1(foo::in, int::out) is det.
:- impure pred foo_m2(foo::in, int::out) is det.
:- implementation.
+
+:- instance c(foo) where [
+ pred(m1/2) is foo_m1,
+ pred(m2/2) is foo_m2
+].
main -->
[].
Index: tests/invalid/instance_bug.err_exp
===================================================================
RCS file: tests/invalid/instance_bug.err_exp
diff -N tests/invalid/instance_bug.err_exp
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ tests/invalid/instance_bug.err_exp 11 Apr 2005 03:37:43 -0000
@@ -0,0 +1,3 @@
+instance_bug.m:009: Error: non-abstract instance declaration in module
+instance_bug.m:009: interface.
+For more information, try recompiling with `-E'.
Index: tests/invalid/instance_bug.m
===================================================================
RCS file: tests/invalid/instance_bug.m
diff -N tests/invalid/instance_bug.m
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ tests/invalid/instance_bug.m 11 Apr 2005 03:36:21 -0000
@@ -0,0 +1,18 @@
+:- module instance_bug.
+
+:- interface.
+
+:- typeclass foo(T) where [
+ func id(T) = T
+].
+ % Compiler should complain about this.
+:- instance foo(int) where [
+ id(X) = X
+].
+
+:- implementation.
+
+ % Compiler shouldn't complain about this.
+:- instance foo(float) where [
+ id(X) = X
+].
Index: tests/invalid/invalid_typeclass.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/invalid_typeclass.err_exp,v
retrieving revision 1.4
diff -u -r1.4 invalid_typeclass.err_exp
--- tests/invalid/invalid_typeclass.err_exp 20 Mar 2005 02:24:39 -0000 1.4
+++ tests/invalid/invalid_typeclass.err_exp 12 Apr 2005 02:29:29 -0000
@@ -5,7 +5,7 @@
invalid_typeclass.m:009: `invalid_typeclass.class2'/1.
invalid_typeclass.m:017: The superclass constraints do not match.
invalid_typeclass.m:007: Error: no definition for typeclass
-invalid_typeclass.m:007: `invalid_typeclass.class/1'.
+invalid_typeclass.m:007: `invalid_typeclass.class'/1
invalid_typeclass.m:009: Error: no definition for typeclass
-invalid_typeclass.m:009: `invalid_typeclass.class2/1'.
+invalid_typeclass.m:009: `invalid_typeclass.class2'/1
For more information, try recompiling with `-E'.
Index: tests/invalid/method_impl.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/method_impl.err_exp,v
retrieving revision 1.1
diff -u -r1.1 method_impl.err_exp
--- tests/invalid/method_impl.err_exp 5 Nov 2000 01:13:12 -0000 1.1
+++ tests/invalid/method_impl.err_exp 11 Apr 2005 06:29:28 -0000
@@ -1,7 +1,7 @@
-method_impl.m:016: In clause for type class method implementation:
-method_impl.m:016: in argument 2 of predicate `foo_m1/2':
-method_impl.m:016: type error: variable `HeadVar__2' has type `int',
-method_impl.m:016: expected type was `string'.
-method_impl.m:019: In clause for type class method implementation:
-method_impl.m:019: error: undefined predicate `bar_m1/2'.
+method_impl.m:022: In clause for type class method implementation:
+method_impl.m:022: in argument 2 of predicate `foo_m1/2':
+method_impl.m:022: type error: variable `HeadVar__2' has type `int',
+method_impl.m:022: expected type was `string'.
+method_impl.m:025: In clause for type class method implementation:
+method_impl.m:025: error: undefined predicate `bar_m1/2'.
For more information, try recompiling with `-E'.
Index: tests/invalid/method_impl.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/method_impl.m,v
retrieving revision 1.1
diff -u -r1.1 method_impl.m
--- tests/invalid/method_impl.m 3 Nov 2000 03:12:03 -0000 1.1
+++ tests/invalid/method_impl.m 11 Apr 2005 06:24:19 -0000
@@ -12,18 +12,18 @@
:- type foo ---> foo.
:- type bar ---> bar.
+:- pred foo_m1(foo::in, string::out) is det.
+
+:- pred foo_m2(foo::in, int::in) is det.
+
+:- implementation.
+
:- instance c(foo) where [
pred(m1/2) is foo_m1
].
:- instance c(bar) where [
pred(m1/2) is bar_m1
].
-
-:- pred foo_m1(foo::in, string::out) is det.
-
-:- pred foo_m2(foo::in, int::in) is det.
-
-:- implementation.
main -->
[].
Index: tests/invalid/missing_det_decls.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/missing_det_decls.err_exp,v
retrieving revision 1.8
diff -u -r1.8 missing_det_decls.err_exp
--- tests/invalid/missing_det_decls.err_exp 14 Feb 2005 08:26:38 -0000 1.8
+++ tests/invalid/missing_det_decls.err_exp 12 Apr 2005 02:33:37 -0000
@@ -1,7 +1,7 @@
missing_det_decls.m:005: Error: no determinism declaration for exported
-missing_det_decls.m:005: predicate `missing_det_decls.exp1/0'.
+missing_det_decls.m:005: predicate `missing_det_decls.exp1'/0.
missing_det_decls.m:008: Error: no determinism declaration for exported
-missing_det_decls.m:008: predicate `missing_det_decls.exp2/1'.
+missing_det_decls.m:008: predicate `missing_det_decls.exp2'/1.
missing_det_decls.m:013: Error: no determinism declaration for local predicate
missing_det_decls.m:013: `missing_det_decls.loc1/0'.
missing_det_decls.m:016: Error: no determinism declaration for local predicate
Index: tests/invalid/tc_err1.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/tc_err1.err_exp,v
retrieving revision 1.4
diff -u -r1.4 tc_err1.err_exp
--- tests/invalid/tc_err1.err_exp 17 Jan 2003 05:57:09 -0000 1.4
+++ tests/invalid/tc_err1.err_exp 12 Apr 2005 00:43:11 -0000
@@ -1,8 +1,8 @@
tc_err1.m:025: Error: no determinism declaration for type class method
-tc_err1.m:025: predicate `tc_err1.handle_typedefs/3'.
-tc_err1.m:028: In instance declaration for `tc_err1.actions(tc_err1.pstate)':
-tc_err1.m:028: no implementation for type class predicate method
-tc_err1.m:028: `tc_err1.handle_typedefs/3'.
-tc_err1.m:028: In instance declaration for `tc_err1.actions/1': incorrect
-tc_err1.m:028: method name(s): predicate `tc_err1.handle_typedefs/2' .
+tc_err1.m:025: predicate `tc_err1.handle_typedefs'/3.
+tc_err1.m:032: In instance declaration for `tc_err1.actions(tc_err1.pstate)':
+tc_err1.m:032: no implementation for type class predicate method
+tc_err1.m:032: `tc_err1.handle_typedefs'/3.
+tc_err1.m:032: In instance declaration for `tc_err1.actions'/1: incorrect
+tc_err1.m:032: method name(s): predicate `tc_err1.handle_typedefs'/2.
For more information, try recompiling with `-E'.
Index: tests/invalid/tc_err1.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/tc_err1.m,v
retrieving revision 1.1
diff -u -r1.1 tc_err1.m
--- tests/invalid/tc_err1.m 11 May 2000 06:29:36 -0000 1.1
+++ tests/invalid/tc_err1.m 11 Apr 2005 05:46:24 -0000
@@ -25,6 +25,10 @@
mode handle_typedefs(in, in, out)
].
+:- instance actions(pstate).
+
+:- implementation.
+
:- instance actions(pstate) where [
pred(handle_typedefs/2) is pstate_handle_typedefs
].
Index: tests/invalid/tc_err2.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/tc_err2.err_exp,v
retrieving revision 1.3
diff -u -r1.3 tc_err2.err_exp
--- tests/invalid/tc_err2.err_exp 17 Jan 2003 05:57:09 -0000 1.3
+++ tests/invalid/tc_err2.err_exp 12 Apr 2005 00:43:34 -0000
@@ -1,6 +1,6 @@
-tc_err2.m:034: In instance declaration for `tc_err2.actions(tc_err2.pstate)':
-tc_err2.m:034: no implementation for type class predicate method
-tc_err2.m:034: `tc_err2.handle_typedefs/3'.
-tc_err2.m:034: In instance declaration for `tc_err2.actions/1': incorrect
-tc_err2.m:034: method name(s): predicate `tc_err2.handle_typedefs/2' .
+tc_err2.m:044: In instance declaration for `tc_err2.actions(tc_err2.pstate)':
+tc_err2.m:044: no implementation for type class predicate method
+tc_err2.m:044: `tc_err2.handle_typedefs'/3.
+tc_err2.m:044: In instance declaration for `tc_err2.actions'/1: incorrect
+tc_err2.m:044: method name(s): predicate `tc_err2.handle_typedefs'/2.
For more information, try recompiling with `-E'.
Index: tests/invalid/tc_err2.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/tc_err2.m,v
retrieving revision 1.1
diff -u -r1.1 tc_err2.m
--- tests/invalid/tc_err2.m 11 May 2000 06:29:37 -0000 1.1
+++ tests/invalid/tc_err2.m 11 Apr 2005 05:47:02 -0000
@@ -28,12 +28,8 @@
mode handle_typedefs(in, in, out) is det
].
-:- instance super(pstate) where [
-].
-
-:- instance actions(pstate) where [
- pred(handle_typedefs/2) is id
-].
+:- instance super(pstate).
+:- instance actions(pstate).
:- pred foo(A) <= super(A).
:- mode foo(in) is det.
@@ -41,6 +37,13 @@
:- pred bar is det.
:- implementation.
+
+:- instance super(pstate) where [
+].
+
+:- instance actions(pstate) where [
+ pred(handle_typedefs/2) is id
+].
bar :-
foo(pstate).
Index: tests/invalid/transitive_import.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/transitive_import.err_exp,v
retrieving revision 1.3
diff -u -r1.3 transitive_import.err_exp
--- tests/invalid/transitive_import.err_exp 20 Mar 2005 02:24:39 -0000 1.3
+++ tests/invalid/transitive_import.err_exp 11 Apr 2005 06:31:44 -0000
@@ -1,8 +1,8 @@
-transitive_import.m:016: In declaration of instance of typeclass `enum.enum'/1:
-transitive_import.m:016: error: undefined typeclass `enum.enum'/1.
-transitive_import.m:016: (The module `enum' has not been imported.)
-transitive_import.m:025: In definition of function
-transitive_import.m:025: `transitive_import.assoc_list_first'/3:
-transitive_import.m:025: error: undefined type `std_util.pair'/2.
-transitive_import.m:025: (The module `std_util' has not been imported.)
+transitive_import.m:016: In definition of function
+transitive_import.m:016: `transitive_import.assoc_list_first'/3:
+transitive_import.m:016: error: undefined type `std_util.pair'/2.
+transitive_import.m:016: (The module `std_util' has not been imported.)
+transitive_import.m:023: In declaration of instance of typeclass `enum.enum'/1:
+transitive_import.m:023: error: undefined typeclass `enum.enum'/1.
+transitive_import.m:023: (The module `enum' has not been imported.)
For more information, try recompiling with `-E'.
Index: tests/invalid/transitive_import.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/transitive_import.m,v
retrieving revision 1.1
diff -u -r1.1 transitive_import.m
--- tests/invalid/transitive_import.m 2 May 2001 17:34:49 -0000 1.1
+++ tests/invalid/transitive_import.m 11 Apr 2005 05:41:18 -0000
@@ -13,6 +13,13 @@
; b
; c.
+:- func assoc_list_first(assoc_list(int, V)) =
+ std_util__pair(int, V) is semidet.
+
+:- implementation.
+
+:- import_module list.
+
:- instance enum__enum(enum) where [
to_int(a) = 1,
to_int(b) = 2,
@@ -21,12 +28,5 @@
from_int(2) = b,
from_int(3) = c
].
-
-:- func assoc_list_first(assoc_list(int, V)) =
- std_util__pair(int, V) is semidet.
-
-:- implementation.
-
-:- import_module list.
assoc_list_first([H | _]) = H.
Index: tests/invalid/typeclass_bogus_method.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_bogus_method.err_exp,v
retrieving revision 1.2
diff -u -r1.2 typeclass_bogus_method.err_exp
--- tests/invalid/typeclass_bogus_method.err_exp 17 Jan 2003 05:57:10 -0000 1.2
+++ tests/invalid/typeclass_bogus_method.err_exp 12 Apr 2005 02:37:04 -0000
@@ -1,21 +1,21 @@
typeclass_bogus_method.m:022: In instance declaration for
-typeclass_bogus_method.m:022: `typeclass_bogus_method.tc1/1': incorrect
+typeclass_bogus_method.m:022: `typeclass_bogus_method.tc1'/1: incorrect
typeclass_bogus_method.m:022: method name(s): function
-typeclass_bogus_method.m:022: `typeclass_bogus_method.bar/2' .
+typeclass_bogus_method.m:022: `typeclass_bogus_method.bar'/3.
typeclass_bogus_method.m:026: In instance declaration for
-typeclass_bogus_method.m:026: `typeclass_bogus_method.tc2/1': incorrect
+typeclass_bogus_method.m:026: `typeclass_bogus_method.tc2'/1: incorrect
typeclass_bogus_method.m:026: method name(s): function
-typeclass_bogus_method.m:026: `typeclass_bogus_method.baz/1' .
+typeclass_bogus_method.m:026: `typeclass_bogus_method.baz'/2.
typeclass_bogus_method.m:029: In instance declaration for
typeclass_bogus_method.m:029: `typeclass_bogus_method.tc3(int)': no
typeclass_bogus_method.m:029: implementation for type class function method
-typeclass_bogus_method.m:029: `typeclass_bogus_method.foo3/1'.
+typeclass_bogus_method.m:029: `typeclass_bogus_method.foo3'/1.
typeclass_bogus_method.m:029: In instance declaration for
-typeclass_bogus_method.m:029: `typeclass_bogus_method.tc3/1': incorrect
+typeclass_bogus_method.m:029: `typeclass_bogus_method.tc3'/1: incorrect
typeclass_bogus_method.m:029: method name(s): function
-typeclass_bogus_method.m:029: `typeclass_bogus_method.foo5/1' .
+typeclass_bogus_method.m:029: `typeclass_bogus_method.foo5'/2.
typeclass_bogus_method.m:033: In instance declaration for
-typeclass_bogus_method.m:033: `typeclass_bogus_method.tc4/1': incorrect
+typeclass_bogus_method.m:033: `typeclass_bogus_method.tc4'/1: incorrect
typeclass_bogus_method.m:033: method name(s): function
-typeclass_bogus_method.m:033: `typeclass_bogus_method.foo5/1' .
+typeclass_bogus_method.m:033: `typeclass_bogus_method.foo5'/2.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_constraint_extra_var.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_constraint_extra_var.err_exp,v
retrieving revision 1.3
diff -u -r1.3 typeclass_constraint_extra_var.err_exp
--- tests/invalid/typeclass_constraint_extra_var.err_exp 14 Feb 2005 08:26:38 -0000 1.3
+++ tests/invalid/typeclass_constraint_extra_var.err_exp 11 Apr 2005 06:59:04 -0000
@@ -1,9 +1,9 @@
-typeclass_constraint_extra_var.m:015: In declaration for predicate
-typeclass_constraint_extra_var.m:015: `typeclass_constraint_extra_var.mg/2':
-typeclass_constraint_extra_var.m:015: error in type class constraints: type
-typeclass_constraint_extra_var.m:015: variable `U' occurs only in the
-typeclass_constraint_extra_var.m:015: constraints, not in the predicate's
-typeclass_constraint_extra_var.m:015: argument types.
+typeclass_constraint_extra_var.m:011: In declaration for predicate
+typeclass_constraint_extra_var.m:011: `typeclass_constraint_extra_var.mg/2':
+typeclass_constraint_extra_var.m:011: error in type class constraints: type
+typeclass_constraint_extra_var.m:011: variable `U' occurs only in the
+typeclass_constraint_extra_var.m:011: constraints, not in the predicate's
+typeclass_constraint_extra_var.m:011: argument types.
typeclass_constraint_extra_var.m:025: In clause for predicate `typeclass_constraint_extra_var.mg/2':
typeclass_constraint_extra_var.m:025: unsatisfiable typeclass constraint(s):
typeclass_constraint_extra_var.m:025: `typeclass_constraint_extra_var.solver_for((list.list(T)), T)'.
Index: tests/invalid/typeclass_constraint_extra_var.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_constraint_extra_var.m,v
retrieving revision 1.1
diff -u -r1.1 typeclass_constraint_extra_var.m
--- tests/invalid/typeclass_constraint_extra_var.m 26 Jul 2002 06:33:20 -0000 1.1
+++ tests/invalid/typeclass_constraint_extra_var.m 11 Apr 2005 06:32:20 -0000
@@ -1,24 +1,24 @@
:- module typeclass_constraint_extra_var.
:- interface.
-:- import_module float, io.
+:- import_module io.
:- import_module list.
:- typeclass solver_for(B, S) where [
func coerce(B) = S
].
-:- instance solver_for(list(T), float) where [
- coerce(_) = 42.0
-].
-
:- pred mg(T, T) <= solver_for(list(U), T).
:- mode mg(in, out) is det.
:- pred main(io::di, io::uo) is det.
:- implementation.
-:- import_module std_util.
+:- import_module float, std_util.
+
+:- instance solver_for(list(T), float) where [
+ coerce(_) = 42.0
+].
mg(S0, S) :-
( semidet_succeed ->
Index: tests/invalid/typeclass_missing_det.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_missing_det.err_exp,v
retrieving revision 1.3
diff -u -r1.3 typeclass_missing_det.err_exp
--- tests/invalid/typeclass_missing_det.err_exp 14 Feb 2005 08:26:38 -0000 1.3
+++ tests/invalid/typeclass_missing_det.err_exp 12 Apr 2005 04:53:11 -0000
@@ -1,3 +1,3 @@
typeclass_missing_det.m:010: Error: no determinism declaration for type class
-typeclass_missing_det.m:010: method predicate `typeclass_missing_det.p/1'.
+typeclass_missing_det.m:010: method predicate `typeclass_missing_det.p'/1.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_missing_det_2.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_missing_det_2.err_exp,v
retrieving revision 1.3
diff -u -r1.3 typeclass_missing_det_2.err_exp
--- tests/invalid/typeclass_missing_det_2.err_exp 14 Feb 2005 08:26:38 -0000 1.3
+++ tests/invalid/typeclass_missing_det_2.err_exp 12 Apr 2005 04:54:15 -0000
@@ -1,4 +1,4 @@
typeclass_missing_det_2.m:011: Error: no determinism declaration for type class
typeclass_missing_det_2.m:011: method predicate
-typeclass_missing_det_2.m:011: `typeclass_missing_det_2.p/1'.
+typeclass_missing_det_2.m:011: `typeclass_missing_det_2.p'/1.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_missing_det_3.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_missing_det_3.err_exp,v
retrieving revision 1.4
diff -u -r1.4 typeclass_missing_det_3.err_exp
--- tests/invalid/typeclass_missing_det_3.err_exp 14 Feb 2005 08:26:38 -0000 1.4
+++ tests/invalid/typeclass_missing_det_3.err_exp 12 Apr 2005 04:54:32 -0000
@@ -3,5 +3,5 @@
typeclass_missing_det_3.m:001: anything.
typeclass_missing_det_3.m:013: Error: no determinism declaration for type class
typeclass_missing_det_3.m:013: method predicate
-typeclass_missing_det_3.m:013: `typeclass_missing_det_3.write/3'.
+typeclass_missing_det_3.m:013: `typeclass_missing_det_3.write'/3.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_missing_mode_2.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_missing_mode_2.err_exp,v
retrieving revision 1.4
diff -u -r1.4 typeclass_missing_mode_2.err_exp
--- tests/invalid/typeclass_missing_mode_2.err_exp 20 Mar 2005 02:24:40 -0000 1.4
+++ tests/invalid/typeclass_missing_mode_2.err_exp 12 Apr 2005 00:44:16 -0000
@@ -1,8 +1,8 @@
typeclass_missing_mode_2.m:011: Error: no mode declaration for type class
typeclass_missing_mode_2.m:011: method predicate
typeclass_missing_mode_2.m:011: `typeclass_missing_mode_2.p'/1.
-typeclass_missing_mode_2.m:013: In instance declaration for
-typeclass_missing_mode_2.m:013: `typeclass_missing_mode_2.c/1': incorrect
-typeclass_missing_mode_2.m:013: method name(s): predicate
-typeclass_missing_mode_2.m:013: `typeclass_missing_mode_2.p/1' .
+typeclass_missing_mode_2.m:018: In instance declaration for
+typeclass_missing_mode_2.m:018: `typeclass_missing_mode_2.c'/1: incorrect
+typeclass_missing_mode_2.m:018: method name(s): predicate
+typeclass_missing_mode_2.m:018: `typeclass_missing_mode_2.p'/1.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_missing_mode_2.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_missing_mode_2.m,v
retrieving revision 1.1
diff -u -r1.1 typeclass_missing_mode_2.m
--- tests/invalid/typeclass_missing_mode_2.m 29 Apr 2001 07:54:37 -0000 1.1
+++ tests/invalid/typeclass_missing_mode_2.m 11 Apr 2005 06:33:32 -0000
@@ -10,6 +10,11 @@
:- typeclass c(T) where [
pred p(T) % error -- missing mode declaration for p/1
].
+
+:- instance c(int).
+
+:- implementation.
+
:- instance c(int) where [
p(_) :- true
].
Index: tests/invalid/typeclass_test_10.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_test_10.err_exp,v
retrieving revision 1.2
diff -u -r1.2 typeclass_test_10.err_exp
--- tests/invalid/typeclass_test_10.err_exp 20 Mar 2005 02:24:40 -0000 1.2
+++ tests/invalid/typeclass_test_10.err_exp 12 Apr 2005 00:44:49 -0000
@@ -1,10 +1,7 @@
-typeclass_test_10.m:001: In module `typeclass_test_10':
-typeclass_test_10.m:001: warning: module `std_util' is imported in the
-typeclass_test_10.m:001: interface, but is not used in the interface.
-typeclass_test_10.m:006: In instance declaration for `typeclass_test_10.bar/1':
-typeclass_test_10.m:006: incorrect method name(s): predicate
-typeclass_test_10.m:006: `typeclass_test_10.p/0' .
-typeclass_test_10.m:011: In instance declaration for `typeclass_test_10.baz/1':
-typeclass_test_10.m:011: incorrect method name(s): predicate
-typeclass_test_10.m:011: `typeclass_test_10.r/0' .
+typeclass_test_10.m:012: In instance declaration for `typeclass_test_10.bar'/1:
+typeclass_test_10.m:012: incorrect method name(s): predicate
+typeclass_test_10.m:012: `typeclass_test_10.p'/0.
+typeclass_test_10.m:017: In instance declaration for `typeclass_test_10.baz'/1:
+typeclass_test_10.m:017: incorrect method name(s): predicate
+typeclass_test_10.m:017: `typeclass_test_10.r'/0.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_test_10.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_test_10.m,v
retrieving revision 1.1
diff -u -r1.1 typeclass_test_10.m
--- tests/invalid/typeclass_test_10.m 12 Feb 2003 22:58:19 -0000 1.1
+++ tests/invalid/typeclass_test_10.m 11 Apr 2005 06:34:05 -0000
@@ -1,8 +1,14 @@
:- module typeclass_test_10.
:- interface.
-:- import_module std_util.
:- typeclass bar(T) where [].
:- typeclass baz(T) where [pred q(T::in) is semidet].
+
+:- instance bar(int).
+:- instance baz(int).
+
+:- implementation.
+:- import_module std_util.
+
:- instance bar(int) where [
pred(p/0) is semidet_fail
].
Index: tests/invalid/typeclass_test_3.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_test_3.err_exp,v
retrieving revision 1.11
diff -u -r1.11 typeclass_test_3.err_exp
--- tests/invalid/typeclass_test_3.err_exp 17 Jan 2003 05:57:10 -0000 1.11
+++ tests/invalid/typeclass_test_3.err_exp 12 Apr 2005 04:55:21 -0000
@@ -1,8 +1,8 @@
typeclass_test_3.m:014: In instance declaration for
typeclass_test_3.m:014: `typeclass_test_3.numbered_type(int)': no
typeclass_test_3.m:014: implementation for type class function method
-typeclass_test_3.m:014: `typeclass_test_3.type_num/1'.
+typeclass_test_3.m:014: `typeclass_test_3.type_num'/1.
typeclass_test_3.m:014: In instance declaration for
-typeclass_test_3.m:014: `typeclass_test_3.numbered_type/1': incorrect method
-typeclass_test_3.m:014: name(s): function `typeclass_test_3.type_num/0' .
+typeclass_test_3.m:014: `typeclass_test_3.numbered_type'/1: incorrect method
+typeclass_test_3.m:014: name(s): function `typeclass_test_3.type_num'/1.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_test_4.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_test_4.err_exp,v
retrieving revision 1.9
diff -u -r1.9 typeclass_test_4.err_exp
--- tests/invalid/typeclass_test_4.err_exp 17 Jan 2003 05:57:10 -0000 1.9
+++ tests/invalid/typeclass_test_4.err_exp 12 Apr 2005 04:55:36 -0000
@@ -1,8 +1,8 @@
typeclass_test_4.m:014: In instance declaration for
typeclass_test_4.m:014: `typeclass_test_4.numbered_type(int)': no
typeclass_test_4.m:014: implementation for type class function method
-typeclass_test_4.m:014: `typeclass_test_4.type_num/1'.
+typeclass_test_4.m:014: `typeclass_test_4.type_num'/1.
typeclass_test_4.m:014: In instance declaration for
-typeclass_test_4.m:014: `typeclass_test_4.numbered_type/1': incorrect method
-typeclass_test_4.m:014: name(s): function `typeclass_test_4.type_num/0' .
+typeclass_test_4.m:014: `typeclass_test_4.numbered_type'/1: incorrect method
+typeclass_test_4.m:014: name(s): function `typeclass_test_4.type_num'/1.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_test_5.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_test_5.err_exp,v
retrieving revision 1.7
diff -u -r1.7 typeclass_test_5.err_exp
--- tests/invalid/typeclass_test_5.err_exp 17 Jan 2003 05:57:10 -0000 1.7
+++ tests/invalid/typeclass_test_5.err_exp 11 Apr 2005 06:34:41 -0000
@@ -1,9 +1,9 @@
-typeclass_test_5.m:015: In instance declaration for `typeclass_test_5.c2(int)':
-typeclass_test_5.m:015: multiple implementations of type class predicate
-typeclass_test_5.m:015: method `typeclass_test_5.p/1'.
-typeclass_test_5.m:016: First definition appears here.
-typeclass_test_5.m:017: Subsequent definition appears here.
-typeclass_test_5.m:015: In instance declaration for `typeclass_test_5.c2(int)':
-typeclass_test_5.m:015: superclass constraint(s) not satisfied:
-typeclass_test_5.m:015: `typeclass_test_5.c1(int)'.
+typeclass_test_5.m:020: In instance declaration for `typeclass_test_5.c2(int)':
+typeclass_test_5.m:020: multiple implementations of type class predicate
+typeclass_test_5.m:020: method `typeclass_test_5.p/1'.
+typeclass_test_5.m:021: First definition appears here.
+typeclass_test_5.m:022: Subsequent definition appears here.
+typeclass_test_5.m:020: In instance declaration for `typeclass_test_5.c2(int)':
+typeclass_test_5.m:020: superclass constraint(s) not satisfied:
+typeclass_test_5.m:020: `typeclass_test_5.c1(int)'.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_test_5.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_test_5.m,v
retrieving revision 1.1
diff -u -r1.1 typeclass_test_5.m
--- tests/invalid/typeclass_test_5.m 22 Sep 1998 16:19:35 -0000 1.1
+++ tests/invalid/typeclass_test_5.m 11 Apr 2005 05:49:03 -0000
@@ -12,15 +12,15 @@
pred p(T), mode p(out) is det
].
-:- instance c2(int) where [
- pred(p/1) is get_int,
- pred(p/1) is get_int2
-].
-
:- pred get_int(int::out) is det.
:- pred get_int2(int::out) is det.
:- implementation.
+
+:- instance c2(int) where [
+ pred(p/1) is get_int,
+ pred(p/1) is get_int2
+].
main --> [].
Index: tests/invalid/typeclass_test_9.err_exp
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_test_9.err_exp,v
retrieving revision 1.7
diff -u -r1.7 typeclass_test_9.err_exp
--- tests/invalid/typeclass_test_9.err_exp 20 Mar 2005 02:24:40 -0000 1.7
+++ tests/invalid/typeclass_test_9.err_exp 11 Apr 2005 06:50:02 -0000
@@ -1,15 +1,12 @@
-typeclass_test_9.m:001: In module `typeclass_test_9':
-typeclass_test_9.m:001: warning: module `std_util' is imported in the
-typeclass_test_9.m:001: interface, but is not used in the interface.
-typeclass_test_9.m:004: In declaration for predicate `typeclass_test_9.p/0':
-typeclass_test_9.m:004: error in type class constraints: type variable `T'
-typeclass_test_9.m:004: occurs only in the constraints, not in the
-typeclass_test_9.m:004: predicate's argument types.
-typeclass_test_9.m:006: In declaration for predicate `typeclass_test_9.q/0':
-typeclass_test_9.m:006: error in type class constraints: type variable `T'
-typeclass_test_9.m:006: occurs only in the constraints, not in the
-typeclass_test_9.m:006: predicate's argument types.
-typeclass_test_9.m:010: Error: multiply defined (or overlapping) instance
-typeclass_test_9.m:010: declarations for class `typeclass_test_9.foo'/1.
-typeclass_test_9.m:007: Previous instance declaration was here.
+typeclass_test_9.m:003: In declaration for predicate `typeclass_test_9.p/0':
+typeclass_test_9.m:003: error in type class constraints: type variable `T'
+typeclass_test_9.m:003: occurs only in the constraints, not in the
+typeclass_test_9.m:003: predicate's argument types.
+typeclass_test_9.m:005: In declaration for predicate `typeclass_test_9.q/0':
+typeclass_test_9.m:005: error in type class constraints: type variable `T'
+typeclass_test_9.m:005: occurs only in the constraints, not in the
+typeclass_test_9.m:005: predicate's argument types.
+typeclass_test_9.m:018: Error: multiply defined (or overlapping) instance
+typeclass_test_9.m:018: declarations for class `typeclass_test_9.foo'/1.
+typeclass_test_9.m:015: Previous instance declaration was here.
For more information, try recompiling with `-E'.
Index: tests/invalid/typeclass_test_9.m
===================================================================
RCS file: /home/mercury1/repository/tests/invalid/typeclass_test_9.m,v
retrieving revision 1.1
diff -u -r1.1 typeclass_test_9.m
--- tests/invalid/typeclass_test_9.m 12 Feb 1999 04:19:31 -0000 1.1
+++ tests/invalid/typeclass_test_9.m 11 Apr 2005 06:35:05 -0000
@@ -1,9 +1,17 @@
:- module typeclass_test_9.
:- interface.
-:- import_module std_util.
:- typeclass foo(T) where [pred p is semidet].
:- typeclass bar(T) where [].
:- typeclass baz(T) where [pred q is semidet].
+
+:- instance foo(int).
+:- instance foo(int).
+:- instance bar(int).
+:- instance baz(int).
+
+:- implementation.
+:- import_module std_util.
+
:- instance foo(int) where [
pred(p/0) is semidet_succeed
].
Index: tests/recompilation/add_instance_2_r.m.1
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/add_instance_2_r.m.1,v
retrieving revision 1.1
diff -u -r1.1 add_instance_2_r.m.1
--- tests/recompilation/add_instance_2_r.m.1 27 Jun 2001 05:04:45 -0000 1.1
+++ tests/recompilation/add_instance_2_r.m.1 11 Apr 2005 06:36:40 -0000
@@ -13,14 +13,16 @@
:- typeclass io(T) where [
pred output(T::in, io__state::di, io__state::uo) is det
].
-
-:- instance io(foo) where [
- pred(output/3) is io__write
-].
+
+:- instance io(foo).
:- pred main(io__state::di, io__state::uo) is det.
:- implementation.
+
+:- instance io(foo) where [
+ pred(output/3) is io__write
+].
init_foo(a).
Index: tests/recompilation/change_class_r_2.m.1
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/change_class_r_2.m.1,v
retrieving revision 1.1
diff -u -r1.1 change_class_r_2.m.1
--- tests/recompilation/change_class_r_2.m.1 27 Jun 2001 05:04:53 -0000 1.1
+++ tests/recompilation/change_class_r_2.m.1 11 Apr 2005 06:37:20 -0000
@@ -13,12 +13,14 @@
:- typeclass io(T) where [
pred output(T::in, io__state::di, io__state::uo) is det
].
-
+
+:- instance io(foo).
+
+:- implementation.
+
:- instance io(foo) where [
pred(output/3) is io__write
].
-
-:- implementation.
init_foo(a).
Index: tests/recompilation/change_class_r_2.m.2
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/change_class_r_2.m.2,v
retrieving revision 1.1
diff -u -r1.1 change_class_r_2.m.2
--- tests/recompilation/change_class_r_2.m.2 27 Jun 2001 05:04:53 -0000 1.1
+++ tests/recompilation/change_class_r_2.m.2 11 Apr 2005 06:37:34 -0000
@@ -15,6 +15,12 @@
pred input(T::out, io__state::di, io__state::uo) is det
].
+:- instance io(foo).
+
+:- implementation.
+
+:- import_module require.
+
:- instance io(foo) where [
pred(output/3) is io__write,
(input(T) -->
@@ -26,10 +32,6 @@
}
)
].
-
-:- implementation.
-
-:- import_module require.
init_foo(a).
Index: tests/recompilation/change_instance_r.m.1
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/change_instance_r.m.1,v
retrieving revision 1.1
diff -u -r1.1 change_instance_r.m.1
--- tests/recompilation/change_instance_r.m.1 27 Jun 2001 05:04:54 -0000 1.1
+++ tests/recompilation/change_instance_r.m.1 11 Apr 2005 06:38:06 -0000
@@ -13,10 +13,8 @@
:- typeclass io(T) where [
pred output(T::in, io__state::di, io__state::uo) is det
].
-
-:- instance io(foo) where [
- pred(output/3) is io__write
-].
+
+:- instance io(foo).
:- pred main(io__state::di, io__state::uo) is det.
@@ -25,6 +23,10 @@
init_foo(a).
:- import_module change_instance_r_2.
+
+:- instance io(foo) where [
+ pred(output/3) is io__write
+].
main -->
{ init_foo(X) },
Index: tests/recompilation/combined_type_mode_nr_2.m.1
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/combined_type_mode_nr_2.m.1,v
retrieving revision 1.1
diff -u -r1.1 combined_type_mode_nr_2.m.1
--- tests/recompilation/combined_type_mode_nr_2.m.1 24 Jul 2001 10:47:24 -0000 1.1
+++ tests/recompilation/combined_type_mode_nr_2.m.1 11 Apr 2005 06:39:21 -0000
@@ -12,11 +12,13 @@
io__state::di, io__state::uo) is det
].
+:- instance io(int).
+
+:- implementation.
+
:- instance io(int) where [
id(T, T),
(output(U, U, T) --> io__write(T))
].
-
-:- implementation.
p(T, T).
Index: tests/recompilation/combined_type_mode_nr_2.m.2
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/combined_type_mode_nr_2.m.2,v
retrieving revision 1.1
diff -u -r1.1 combined_type_mode_nr_2.m.2
--- tests/recompilation/combined_type_mode_nr_2.m.2 24 Jul 2001 10:47:25 -0000 1.1
+++ tests/recompilation/combined_type_mode_nr_2.m.2 11 Apr 2005 06:39:40 -0000
@@ -12,13 +12,15 @@
io__state::di, io__state::uo) is det
].
-:- instance io(int) where [
- id(T, T),
- (output(U, U, T) --> io__write(T))
-].
+:- instance io(int).
:- type t == int.
:- implementation.
+
+:- instance io(int) where [
+ id(T, T),
+ (output(U, U, T) --> io__write(T))
+].
p(T, T).
Index: tests/recompilation/typeclass_method_pragma_r_2.m.1
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/typeclass_method_pragma_r_2.m.1,v
retrieving revision 1.1
diff -u -r1.1 typeclass_method_pragma_r_2.m.1
--- tests/recompilation/typeclass_method_pragma_r_2.m.1 24 Jul 2001 10:47:27 -0000 1.1
+++ tests/recompilation/typeclass_method_pragma_r_2.m.1 11 Apr 2005 06:40:11 -0000
@@ -14,11 +14,13 @@
pred output(T::in, io__state::di, io__state::uo) is det
].
+:- instance io(foo).
+
+:- implementation.
+
:- instance io(foo) where [
pred(output/3) is io__write
].
-
-:- implementation.
init_foo(a).
Index: tests/recompilation/typeclass_method_pragma_r_2.m.2
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/typeclass_method_pragma_r_2.m.2,v
retrieving revision 1.1
diff -u -r1.1 typeclass_method_pragma_r_2.m.2
--- tests/recompilation/typeclass_method_pragma_r_2.m.2 24 Jul 2001 10:47:27 -0000 1.1
+++ tests/recompilation/typeclass_method_pragma_r_2.m.2 11 Apr 2005 06:40:48 -0000
@@ -10,16 +10,20 @@
:- pred init_foo(foo::out) is det.
+:- pragma obsolete(output/3).
+
:- typeclass io(T) where [
pred output(T::in, io__state::di, io__state::uo) is det
].
-:- pragma obsolete(output/3).
+
+:- instance io(foo).
+
+:- implementation.
:- instance io(foo) where [
pred(output/3) is io__write
].
-:- implementation.
init_foo(a).
Index: tests/recompilation/unchanged_with_type_nr_2.m.1
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/unchanged_with_type_nr_2.m.1,v
retrieving revision 1.3
diff -u -r1.3 unchanged_with_type_nr_2.m.1
--- tests/recompilation/unchanged_with_type_nr_2.m.1 25 Aug 2004 08:21:30 -0000 1.3
+++ tests/recompilation/unchanged_with_type_nr_2.m.1 11 Apr 2005 06:43:55 -0000
@@ -27,9 +27,12 @@
:- func with_type_6 `with_type` map_func(T, T) is det <= string(T).
:- typeclass string(T) where [].
-:- instance string(string) where [].
+
+:- instance string(string).
:- implementation.
+
+:- instance string(string) where [].
with_type_1(_, _, X, X).
Index: tests/recompilation/unchanged_with_type_nr_2.m.2
===================================================================
RCS file: /home/mercury1/repository/tests/recompilation/unchanged_with_type_nr_2.m.2,v
retrieving revision 1.3
diff -u -r1.3 unchanged_with_type_nr_2.m.2
--- tests/recompilation/unchanged_with_type_nr_2.m.2 25 Aug 2004 08:21:30 -0000 1.3
+++ tests/recompilation/unchanged_with_type_nr_2.m.2 11 Apr 2005 06:44:10 -0000
@@ -27,11 +27,13 @@
:- func with_type_6 `with_type` map_func(T, T) is det <= string(T).
:- typeclass string(T) where [].
-:- instance string(string) where [].
+:- instance string(string).
:- type t == int.
:- implementation.
+
+:- instance string(string) where [].
with_type_1(_, _, X, X).
Index: tests/valid/func_method.m
===================================================================
RCS file: /home/mercury1/repository/tests/valid/func_method.m,v
retrieving revision 1.1
diff -u -r1.1 func_method.m
--- tests/valid/func_method.m 29 Jul 1998 06:28:17 -0000 1.1
+++ tests/valid/func_method.m 11 Apr 2005 05:50:21 -0000
@@ -9,11 +9,13 @@
mode op(in) = out is det
].
+:- instance c(int).
+
+:- implementation.
+
:- instance c(int) where [
func(op/1) is op_int
].
-
-:- implementation.
:- func op_int(pair(int, T)) = pair(int, T).
:- mode op_int(in) = out is det.
Index: tests/valid/instance_superclass.m
===================================================================
RCS file: /home/mercury1/repository/tests/valid/instance_superclass.m,v
retrieving revision 1.2
diff -u -r1.2 instance_superclass.m
--- tests/valid/instance_superclass.m 18 Jun 1998 04:11:45 -0000 1.2
+++ tests/valid/instance_superclass.m 11 Apr 2005 05:50:52 -0000
@@ -11,12 +11,14 @@
:- typeclass c1(T) where [ ].
:- typeclass c2(T) <= c1(T) where [ ].
-:- instance c1(list(T)) where [ ].
-:- instance c2(list(T)) where [ ].
-
+:- instance c1(list(T)).
+:- instance c2(list(T)).
:- pred p(T::in) is det.
:- implementation.
+
+:- instance c1(list(T)) where [].
+:- instance c2(list(T)) where [].
% The bug that this test case is checking for is at the creation of
% the typeclass info for this call: if the substitution from "T" in
Index: tests/valid/instance_unconstrained_tvar.m
===================================================================
RCS file: /home/mercury1/repository/tests/valid/instance_unconstrained_tvar.m,v
retrieving revision 1.1
diff -u -r1.1 instance_unconstrained_tvar.m
--- tests/valid/instance_unconstrained_tvar.m 19 Jun 1998 00:43:17 -0000 1.1
+++ tests/valid/instance_unconstrained_tvar.m 11 Apr 2005 05:51:19 -0000
@@ -7,12 +7,15 @@
:- typeclass c1(T) where [ ].
:- typeclass c2(T) <= c1(T) where [ ].
-:- instance c1(list(T)) where [ ].
-:- instance c2(list(T)) where [ ].
+:- instance c1(list(T)).
+:- instance c2(list(T)).
:- pred p is det.
:- implementation.
+
+:- instance c1(list(T)) where [].
+:- instance c2(list(T)) where [].
% The bug that this test case is checking for is at the creation of
% the typeclass info for this call, when creating the type-info the
Index: tests/valid/transitive_instance.m
===================================================================
RCS file: /home/mercury1/repository/tests/valid/transitive_instance.m,v
retrieving revision 1.1
diff -u -r1.1 transitive_instance.m
--- tests/valid/transitive_instance.m 23 Jul 2002 13:34:04 -0000 1.1
+++ tests/valid/transitive_instance.m 11 Apr 2005 06:46:19 -0000
@@ -15,6 +15,10 @@
:- interface.
:- typeclass c1(T) where [].
+
+ :- instance c1(int).
+
+ :- implementation.
:- instance c1(int) where [].
@@ -28,6 +32,10 @@
:- import_module transitive_instance__sub1.
:- typeclass c2(T) <= c1(T) where [].
+
+ :- instance c2(int).
+
+ :- implementation.
:- instance c2(int) where [].
Index: tests/valid/typeclass_constraint_no_var.m
===================================================================
RCS file: /home/mercury1/repository/tests/valid/typeclass_constraint_no_var.m,v
retrieving revision 1.1
diff -u -r1.1 typeclass_constraint_no_var.m
--- tests/valid/typeclass_constraint_no_var.m 25 Sep 2002 06:49:43 -0000 1.1
+++ tests/valid/typeclass_constraint_no_var.m 11 Apr 2005 05:51:40 -0000
@@ -8,10 +8,6 @@
func coerce(B) = S
].
-:- instance solver_for(list(T), float) where [
- coerce(_) = 42.0
-].
-
:- pred mg(T, T) <= solver_for(list(float), float).
:- mode mg(in, out) is det.
@@ -19,6 +15,10 @@
:- implementation.
:- import_module std_util.
+
+:- instance solver_for(list(T), float) where [
+ coerce(_) = 42.0
+].
mg(S0, S) :-
( semidet_succeed ->
Index: tests/valid/typeclass_constraint_nonvar_bug.m
===================================================================
RCS file: /home/mercury1/repository/tests/valid/typeclass_constraint_nonvar_bug.m,v
retrieving revision 1.1
diff -u -r1.1 typeclass_constraint_nonvar_bug.m
--- tests/valid/typeclass_constraint_nonvar_bug.m 13 Mar 2003 11:53:36 -0000 1.1
+++ tests/valid/typeclass_constraint_nonvar_bug.m 11 Apr 2005 05:54:58 -0000
@@ -25,9 +25,58 @@
:- typeclass lin_int_solver(T) <= lin_arith_solver(int, T) where [].
:- typeclass int_solver(T) <= (arith(T), lin_int_solver(T)) where [].
-:- instance eq(int) where [
- pred(unify_oo/2) is int_unify_oo
-].
+:- instance eq(int).
+
+:- instance add(int).
+:- instance neq(int).
+:- instance ord(int).
+:- instance mult(int).
+:- instance sord(int).
+:- instance strict(int).
+:- instance arith(int).
+
+:- type cint ---> a ; b.
+
+:- instance eq(cint).
+
+:- instance add(cint).
+:- instance neq(cint).
+:- instance ord(cint).
+:- instance mult(cint).
+:- instance sord(cint).
+:- instance strict(cint).
+:- instance arith(cint).
+
+:- instance solver(cint).
+
+:- instance solver_for(int, cint).
+:- instance lin_mult(int, cint).
+:- instance lin_arith_solver(int, cint).
+:- instance arith_solver(int, cint).
+
+:- instance lin_int_solver(cint).
+:- instance int_solver(cint).
+
+:- type list(T) ---> [] ; [T | list(T)].
+:- instance eq(list(T)).
+
+:- type arc ---> arc(int, int).
+:- instance eq(arc).
+
+:- type graph ---> graph(list(arc)).
+:- instance eq(graph).
+
+:- pred int_unify_oo(int::in, int::in) is semidet.
+
+:- pred cint_unify_oo(cint::in, cint::in) is semidet.
+
+:- pred list_unify_oo(list(T)::in, list(T)::in) is semidet <= eq(T).
+
+:- pred arc_unify_oo(arc::in, arc::in) is semidet.
+
+:- pred graph_unify_oo(graph::in, graph::in) is semidet.
+
+:- implementation.
:- instance add(int) where [].
:- instance neq(int) where [].
@@ -37,8 +86,6 @@
:- instance strict(int) where [].
:- instance arith(int) where [].
-:- type cint ---> a ; b.
-
:- instance eq(cint) where [
pred(unify_oo/2) is cint_unify_oo
].
@@ -61,34 +108,17 @@
:- instance lin_int_solver(cint) where [].
:- instance int_solver(cint) where [].
-
-:- type list(T) ---> [] ; [T | list(T)].
:- instance eq(list(T)) <= eq(T) where [
pred(unify_oo/2) is list_unify_oo
].
-:- type arc ---> arc(int, int).
:- instance eq(arc) where [
pred(unify_oo/2) is arc_unify_oo
].
-:- type graph ---> graph(list(arc)).
:- instance eq(graph) where [
pred(unify_oo/2) is graph_unify_oo
].
-
-
-:- pred int_unify_oo(int::in, int::in) is semidet.
-
-:- pred cint_unify_oo(cint::in, cint::in) is semidet.
-
-:- pred list_unify_oo(list(T)::in, list(T)::in) is semidet <= eq(T).
-
-:- pred arc_unify_oo(arc::in, arc::in) is semidet.
-
-:- pred graph_unify_oo(graph::in, graph::in) is semidet.
-
-:- implementation.
int_unify_oo(X, X).
--------------------------------------------------------------------------
mercury-reviews mailing list
post: mercury-reviews at cs.mu.oz.au
administrative address: owner-mercury-reviews at cs.mu.oz.au
unsubscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: unsubscribe
subscribe: Address: mercury-reviews-request at cs.mu.oz.au Message: subscribe
--------------------------------------------------------------------------
More information about the reviews
mailing list