[m-dev.] not_reached inst

Simon Taylor staylr at gmail.com
Thu Apr 12 10:39:07 AEST 2007

I wrote:
> For example, inst_util.abstractly_unify_inst gives the unification
> of a not_reached inst with anything a determinism of `det', where it should
> probably be `failure'.

Actually, it can't be `failure' because that would break the axiom 
"all [X] X = X".  It has to be `erroneous', and the compiler would need to
replace the unification with a goal that throws an exception (or calls
MR_fatal_error) and prune away the rest of the conjunction to avoid
compiler aborts later.  Terms with inst `not_reached' are a bit like quiet
NaNs (see the comment in float.m), except that there is no way to create

> A hack that might give you what you want without any change is to use a
> constructor in the bound inst that isn't valid for the type (e.g. bound([])
> for this example).  That should be illegal but currently the compiler doesn't
> check.

And that won't work because unification of two terms with that inst will
be found to be det.

mercury-developers mailing list
Post messages to:       mercury-developers at csse.unimelb.edu.au
Administrative Queries: owner-mercury-developers at csse.unimelb.edu.au
Subscriptions:          mercury-developers-request at csse.unimelb.edu.au

More information about the developers mailing list