Files
mercury/tests/valid/lambda_switch.m
Julien Fischer 520f835b22 Replace deprecated mode and inst syntax in most
Estimated hours taken: 2
Branches: main

Replace deprecated mode and inst syntax in most
of the test suite.

TODO:
	Alter valid/mode_syntax.m when we start
	issuing warnings about the deprecated syntax.

tests/*/*.m:
	Replace deprecated mode and inst syntax.

	Replace some uses of `:' as the module
	qualifier.
2004-08-25 08:21:34 +00:00

34 lines
823 B
Mathematica

% This is a regression test. Earlier versions of the compiler did not notice
% that Acc0 is an input parameter of the lambda expression and thus did not
% detect that the disjunction is a switch on Acc0.
:- module lambda_switch.
:- interface.
:- import_module std_util.
:- type agg_func(T, S) ---> agg(S, func(S, T) = S).
:- inst agg_mode == bound(agg(ground, func(in, in) = out is det)).
:- mode agg_in == agg_mode >> agg_mode.
:- mode agg_out == free >> agg_mode.
:- func min(func(T) = int) = agg_func(T, maybe(int)).
:- mode min(func(in) = out is det) = agg_out is det.
:- implementation.
:- import_module int.
min(F) = agg(no, M) :-
M = (func(Acc0, Val0) = Acc :-
Val = apply(F, Val0),
(
Acc0 = no,
Acc = yes(Val)
;
Acc0 = yes(Acc1),
( Acc1 < Val -> Acc = yes(Acc1) ; Acc = yes(Val))
)
).