mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-15 17:33:38 +00:00
Replace __ with . as the module qualifier symbol. Replace references to io.state with just io. Replace DCGs with state variables. Replace (C->T;E) syntax for if-then-elses with (if C then T else E) syntax. Replace if-then-elses with switches when possible and where this does not affect what is being tested. Replace separate pred and mode declarations with predmode declarations. Put predicate and function declarations just before the definition of the predicate or function. Delete unneeded module qualifications on predicate and function declarations and definitions. Update .exp files (and if needed, .inp files) for the line number changes that result from the above. For tests that have more than one .exp file and where one of those files is affected by the above, add a section to the source file header that says which .exp file is for what grade, with XXXs for the (as yet) unknown parts.
136 lines
3.7 KiB
Mathematica
136 lines
3.7 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module class_decl.
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
|
|
:- pred main(io::di, io::uo) is det.
|
|
|
|
:- implementation.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- typeclass foo(T) where [
|
|
pred foo_method(T::in, io::di, io::uo) is det
|
|
].
|
|
|
|
:- typeclass bar(T, U) where [
|
|
pred bar_method(T::in, U::in, io::di, io::uo) is det
|
|
].
|
|
|
|
:- type t1
|
|
---> t1(int).
|
|
|
|
:- type t2(T)
|
|
---> t2a(T)
|
|
; t2b(T, T).
|
|
|
|
:- instance foo(string) where [pred(foo_method/3) is foo_string].
|
|
:- instance foo(t1) where [pred(foo_method/3) is foo_t1].
|
|
:- instance foo(t2(U)) where [pred(foo_method/3) is foo_t2].
|
|
|
|
:- instance bar(int, int) where [pred(bar_method/4) is bar_int_int].
|
|
:- instance bar(string, int) where [pred(bar_method/4) is bar_str_int].
|
|
:- instance bar(string, string) where [pred(bar_method/4) is bar_str_str].
|
|
:- instance bar(t1, int) where [pred(bar_method/4) is bar_t1_int].
|
|
:- instance bar(t1, t2(U)) where [pred(bar_method/4) is bar_t1_t2].
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
main(!IO) :-
|
|
foo_method("zero", !IO),
|
|
foo_method(t1(10), !IO),
|
|
foo_method(t2a(20), !IO),
|
|
foo_method(t2b(30, 40), !IO),
|
|
foo_method(t2b("thirty", "forty"), !IO),
|
|
bar_method(11, 22, !IO),
|
|
bar_method("eleven", 22, !IO),
|
|
bar_method("eleven", "twentytwo", !IO),
|
|
bar_method(t1(111), 222, !IO),
|
|
bar_method(t1(333), t2a(444), !IO),
|
|
bar_method(t1(333), t2b(444, 555), !IO),
|
|
bar_method(t1(888), t2b("sixsixsix", "sevensevenseven"), !IO).
|
|
|
|
:- pred foo_string(string::in, io::di, io::uo) is det.
|
|
|
|
foo_string(S, !IO) :-
|
|
io.write_string("string: ", !IO),
|
|
io.write_string(S, !IO),
|
|
io.nl(!IO).
|
|
|
|
:- pred foo_t1(t1::in, io::di, io::uo) is det.
|
|
|
|
foo_t1(t1(I), !IO) :-
|
|
io.write_string("t1: ", !IO),
|
|
io.write_int(I, !IO),
|
|
io.nl(!IO).
|
|
|
|
:- pred foo_t2(t2(V)::in, io::di, io::uo) is det.
|
|
|
|
foo_t2(t2a(I), !IO) :-
|
|
io.write_string("t2a: ", !IO),
|
|
io.write(I, !IO),
|
|
io.nl(!IO).
|
|
foo_t2(t2b(I1, I2), !IO) :-
|
|
io.write_string("t2b: ", !IO),
|
|
io.write(I1, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write(I2, !IO),
|
|
io.nl(!IO).
|
|
|
|
:- pred bar_int_int(int::in, int::in, io::di, io::uo) is det.
|
|
|
|
bar_int_int(I1, I2, !IO) :-
|
|
io.write_string("ii: ", !IO),
|
|
io.write_int(I1, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write_int(I2, !IO),
|
|
io.nl(!IO).
|
|
|
|
:- pred bar_str_int(string::in, int::in, io::di, io::uo) is det.
|
|
|
|
bar_str_int(S1, I2, !IO) :-
|
|
io.write_string("si: ", !IO),
|
|
io.write_string(S1, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write_int(I2, !IO),
|
|
io.nl(!IO).
|
|
|
|
:- pred bar_str_str(string::in, string::in, io::di, io::uo) is det.
|
|
|
|
bar_str_str(S1, S2, !IO) :-
|
|
io.write_string("ss: ", !IO),
|
|
io.write_string(S1, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write_string(S2, !IO),
|
|
io.nl(!IO).
|
|
|
|
:- pred bar_t1_int(t1::in, int::in, io::di, io::uo) is det.
|
|
|
|
bar_t1_int(t1(I1), I2, !IO) :-
|
|
io.write_string("t1int: ", !IO),
|
|
io.write_int(I1, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write_int(I2, !IO),
|
|
io.nl(!IO).
|
|
|
|
:- pred bar_t1_t2(t1::in, t2(V)::in, io::di, io::uo) is det.
|
|
|
|
bar_t1_t2(t1(I1), t2a(I2), !IO) :-
|
|
io.write_string("t1t2a: ", !IO),
|
|
io.write_int(I1, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write(I2, !IO),
|
|
io.nl(!IO).
|
|
bar_t1_t2(t1(I1), t2b(I2, I3), !IO) :-
|
|
io.write_string("t1t2b: ", !IO),
|
|
io.write_int(I1, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write(I2, !IO),
|
|
io.write_string(", ", !IO),
|
|
io.write(I3, !IO),
|
|
io.nl(!IO).
|