mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-20 20:03:44 +00:00
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.
42 lines
910 B
Mathematica
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.
|
|
|
|
|