Files
mercury/tests/valid/func_default_modes.m
Tyson Dowd f9b942b30e Allow functions to be declared by supplying the determinism but not the
Estimated hours taken: 12

Allow functions to be declared by supplying the determinism but not the
modes (we assume the default modes).

compiler/make_hlds.m:
	Assume default modes if determinism is declared without modes
	in the :- func declaration.

compiler/prog_io.m:
	Don't give an error message for determinism without modes for
	function.

compiler/prog_io_goal.m:
	Update documentation to reflect default mode syntax.
	Assume default modes if determinism is declared without modes
	in lambda expressions.

compiler/prog_util.m:
	Mention that declaring modes for some but not all of the
	arguments of a function will be noticed in prog_io, so shouldn't
	be a concern in this code.

doc/reference_manual.texi:
	Document the new syntax.

tests/valid/Mmakefile:
tests/valid/func_default_modes.m:
	A test case for the new syntax.
2000-02-16 07:28:13 +00:00

42 lines
910 B
Mathematica

% 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__state::di, io__state::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 -->
{ A = (func(X) = Y is semidet :- X = 4, Y = 7) },
{ B = (func(X) = (Y) is semidet :- Y = method1(X)) },
io__write(list__filter_map(A, [1,2,3,4,5,6])),
io__nl,
io__write(list__filter_map(bar, [1,2,3,4,5,6])),
io__nl,
io__write(list__filter_map(B, [1,2,3,4,5,6])),
io__nl.
bar(4) = 7.