24 lines
699 B
Plaintext
24 lines
699 B
Plaintext
:- type accumulator == (pred(int, int, io, io)).
|
|
:- inst accumulator == (pred(in, out, di, uo) is det).
|
|
|
|
:- func accumulator >> accumulator = accumulator.
|
|
:- mode in(accumulator) >> in(accumulator) = out(accumulator).
|
|
A >> B = C :-
|
|
C = (pred(!.N::in, !:N::out, !.IO::di, !:IO::uo) is det :-
|
|
A(!N, !IO),
|
|
B(!N, !IO)).
|
|
|
|
:- pred add(int::in, int::in, int::out, io::di, io::uo) is det.
|
|
add(N, !Acc, !IO) :-
|
|
io.format("adding %d to accumulator (current value: %d)\n",
|
|
[i(N), i(!.Acc)], !IO),
|
|
!:Acc = !.Acc + N.
|
|
|
|
:- pred example2(io::di, io::uo) is det.
|
|
example2(!IO) :-
|
|
F = add(5)
|
|
>> add(5)
|
|
>> add(-10),
|
|
F(0, X, !IO),
|
|
io.print_line(X, !IO).
|