try_detism.m:010: In `p'(out, di, uo): try_detism.m:010: error: `cc_nondet' is not a valid determinism for a try_detism.m:010: predicate that has I/O state arguments. The valid try_detism.m:010: determinisms for such predicates are `det', `cc_multi' and try_detism.m:010: `erroneous', since the I/O state can be neither duplicated try_detism.m:010: nor destroyed. try_detism.m:010: In `p'(out, di, uo): try_detism.m:010: error: determinism declaration not satisfied. try_detism.m:010: Declared `cc_multi', inferred `cc_nondet'. try_detism.m:010: The reason for the difference is the following. try_detism.m:017: In argument 1 of call to predicate `try_detism.q'/3: try_detism.m:017: unification with `X' can fail. try_detism.m:016: Error: call to predicate `exception.magic_exception_result'/1 try_detism.m:016: with determinism `cc_multi' occurs in a context which try_detism.m:016: requires all solutions. try_detism.m:017: Unification of X and V_17 can fail. try_detism.m:016: In clause for `p(out, di, uo)': try_detism.m:016: in call to predicate `exception.try_io'/4: try_detism.m:016: mode error: arguments try_detism.m:016: `TryLambda, TryResult, STATE_VARIABLE_IO_10, TryIOOutput' try_detism.m:016: have the following insts: try_detism.m:016: /* unique */ (pred(out, di, uo) is semidet), try_detism.m:016: free, try_detism.m:016: unique, try_detism.m:016: free try_detism.m:016: which does not match any of the modes for predicate try_detism.m:016: `exception.try_io'/4. try_detism.m:016: The first argument `TryLambda' has inst try_detism.m:016: /* unique */ (pred(out, di, uo) is semidet), try_detism.m:016: which does not match any of those modes. try_detism.m:016: (For higher order insts like this, the mismatch is try_detism.m:016: sometimes caused by the arity of the predicate or function try_detism.m:016: being different in the inst than in the type.) For more information, recompile with `-E'.