30 lines
647 B
Mathematica
30 lines
647 B
Mathematica
:- module die.
|
|
:- interface.
|
|
:- import_module io.
|
|
:- import_module list.
|
|
:- import_module string.
|
|
|
|
:- pred die(string::in) is erroneous.
|
|
:- pred die(string::in, list(poly_type)::in) is erroneous.
|
|
|
|
:- type main == (pred(io, io)).
|
|
:- inst main == (pred(di, uo) is cc_multi).
|
|
|
|
:- pred wrap_main(main::in(main), io::di, io::uo) is cc_multi.
|
|
|
|
:- implementation.
|
|
:- import_module exception.
|
|
|
|
:- type die ---> death(string).
|
|
|
|
die(Str) :- throw(death(Str)).
|
|
die(Fmt, Args) :- die(format(Fmt, Args)).
|
|
|
|
wrap_main(Main, !IO) :-
|
|
try [io(!IO)] Main(!IO)
|
|
then true
|
|
catch death(Err) -> (
|
|
format("%s\n", [s(Err)], !IO),
|
|
set_exit_status(1, !IO)
|
|
).
|