Files
mercury/tests/invalid/ambiguous_method_2.m
Zoltan Somogyi 3dc4babb24 Update the style of more test cases.
And update expected output files for changes in line numbers.
2021-07-27 13:29:46 +10:00

49 lines
1.1 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
:- module ambiguous_method_2.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module list.
main(!IO) :-
( if test(intcoll([0]), 1) then
io.write_string("yes\n", !IO)
else
io.write_string("no\n", !IO)
),
( if e = intcoll([1]) then
io.write_string("yes\n", !IO)
else
io.write_string("no\n", !IO)
).
:- typeclass foo(T) where [].
:- instance foo(int) where [].
:- typeclass coll(C, E) <= foo(E) where [
func e = C,
func i(C, E) = C,
pred m(E::in, C::in) is semidet
].
:- type intcoll
---> intcoll(list(int)).
:- instance coll(intcoll, int) where [
(e = intcoll([])),
(i(intcoll(Ns), N) = intcoll([N | Ns])),
m(N, intcoll([N | _])),
m(N, intcoll([_ | Ns])) :- m(N, intcoll(Ns))
].
:- pred test(C::in, E::in) is semidet <= coll(C, E).
test(C, E) :-
m(E, i(C, E)).