Files
mercury/tests/valid/func_default_modes.m
Zoltan Somogyi c03b11ca48 Update the style of more test cases.
And updated expected outputs for changed line numbers.
2021-07-27 19:29:21 +10:00

39 lines
1.1 KiB
Mathematica

%---------------------------------------------------------------------------%
% vim: ts=4 sw=4 et ft=mercury
%---------------------------------------------------------------------------%
%
% This test ensures that functions can be declared with a determinism,
% but without the modes. The compiler should give them the default
% modes of `in' for the arguments and `out' for the return value.
%
% We test :- func definitions, lambda expressions and type class methods.
:- module func_default_modes.
:- interface.
:- import_module io.
:- pred main(io::di, io::uo) is det.
:- implementation.
:- import_module list.
:- func bar(int) = (int) is semidet.
:- typeclass tc(T) where [
func method1(T) = int is semidet
].
:- instance tc(int) where [
func(method1/1) is bar
].
main(!IO) :-
A = (func(X) = Y is semidet :- X = 4, Y = 7),
B = (func(X) = (Y) is semidet :- Y = method1(X)),
io.write_line(list.filter_map(A, [1, 2, 3, 4, 5, 6]), !IO),
io.write_line(list.filter_map(bar, [1, 2, 3, 4, 5, 6]), !IO),
io.write_line(list.filter_map(B, [1, 2, 3, 4, 5, 6]), !IO).
bar(4) = 7.