mirror of
https://github.com/Mercury-Language/mercury.git
synced 2026-04-16 01:43:35 +00:00
63 lines
1.6 KiB
Mathematica
63 lines
1.6 KiB
Mathematica
%---------------------------------------------------------------------------%
|
|
% vim: ts=4 sw=4 et ft=mercury
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- module bug441_sub.
|
|
:- interface.
|
|
|
|
:- import_module io.
|
|
:- import_module unit.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- type fio(T).
|
|
|
|
:- type fio == fio(unit).
|
|
|
|
:- type fmain == (func(fio) = fio).
|
|
:- inst fmain == (func(di) = uo is det).
|
|
|
|
:- pred do_fmain(fmain::in(fmain), io::di, io::uo) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- func print_fio_line(T::in, fio(_)::di) = (fio::uo) is det.
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|
|
|
|
:- implementation.
|
|
|
|
:- import_module require.
|
|
|
|
:- type fio(T)
|
|
---> fio(T).
|
|
|
|
do_fmain(FMain, !IO) :-
|
|
FIO0 = fio_from_io(!.IO),
|
|
FIO = FMain(FIO0),
|
|
!:IO = io_from_fio(FIO).
|
|
|
|
:- func fio_from_io(io::di) = (fio::uo) is det.
|
|
|
|
fio_from_io(_) = FIO :-
|
|
FIO = unsafe_promise_unique(fio(unit)).
|
|
|
|
:- func io_from_fio(fio(_)::di) = (io::uo) is det.
|
|
|
|
:- pragma foreign_proc("C",
|
|
io_from_fio(_FIO::di) = (IO::uo),
|
|
[will_not_call_mercury, promise_pure, thread_safe],
|
|
"
|
|
IO = 0;
|
|
").
|
|
|
|
print_fio_line(Line, _) = FIO :-
|
|
trace [io(!IO)] (
|
|
io.print_line(Line, !IO)
|
|
),
|
|
FIO = unsafe_promise_unique(fio(unit)).
|
|
|
|
%---------------------------------------------------------------------------%
|
|
%---------------------------------------------------------------------------%
|