aoc2022/die.m

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)
).