[mercury-users] using 'try' for exception handling

Fergus Henderson fjh at cs.mu.OZ.AU
Mon Jun 2 11:39:55 AEST 2003

On 02-Jun-2003, Goncalo Jorge Coelho e Silva <l10454 at alunos.uevora.pt> wrote:
> I was searching the archive on this subject, found
> something, but could use that to solve my problem.
> I'm trying to make/use a predicate that would 
> catch (using 'try') the exception thrown by an
> incorrect use of 'string__det_to_int' (for example).

In that specific case, you're probably better off
calling string__to_int rather than string__det_to_int.

> Here's the code I used to try it:
> :- pred tryexcept(io__state, io__state).
> :- mode tryexcept(di, uo) is det.
> %:- pred tryexcept(string ,io__state, io__state).
> %:- mode tryexcept(in, di, uo) is det.

The commented out version is the one that you need.

> main(IO1, IO):-
>         try_io(tryexcept(IO2, IO3), IO1, IO, Result),
>         %try_io( tryexcept(IO1, IO), Result),
>         %try_io( tryexcept("string", IO1, IO), Result),

The syntax that you are looking for here is

	try_io(try_except, Result, IO1, IO)

> Also,
> I noticed on bit of Fergus' code, the following lines:
> >		else
> >			require.error("make_term_with_arglist failed")
>  I tried this out but got a message saying I was using 
> the '.' on a bizarre place, or something like that...

Oh, sorry, that syntax has been added recently, but I forgot that
it is not yet present in the current official release (0.11.0).
Use "require__error" instead.  Same goes for all other uses of "." as
a module qualifier -- use "__" instead.

> When should I use try/throw VS require.error?

Generally require.error should be used for situations that "cannot happen",
i.e. those for which if the situation did occur, it would indicate a bug
in (some other part of) the program.  "throw" can be used for any other
kinds of errors that you want to deal with using exception handling,
e.g. I/O errors, network timeouts, etc.

Fergus Henderson <fjh at cs.mu.oz.au>  |  "I have always known that the pursuit
The University of Melbourne         |  of excellence is a lethal habit"
WWW: <http://www.cs.mu.oz.au/~fjh>  |     -- the last words of T. S. Garp.
mercury-users mailing list
post:  mercury-users at cs.mu.oz.au
administrative address: owner-mercury-users at cs.mu.oz.au
unsubscribe: Address: mercury-users-request at cs.mu.oz.au Message: unsubscribe
subscribe:   Address: mercury-users-request at cs.mu.oz.au Message: subscribe

More information about the users mailing list