[m-dev.] ui arguments in closures

Ralph Becket rafe at csse.unimelb.edu.au
Mon Jun 23 16:00:37 AEST 2008

This is pertinent to G12.

I have a predicate

:- pred output_environment(solver::in, env::in, ps::ui, io::di, io::uo) is det.

output_environment(Solver, Env, PS, !IO) :-
    map.foldl(output_env_var(Solver, PS), Env, !IO).	% --- Line 1023 ---

:- pred output_env_var(solver::in, ps::ui, name::in, value::in, io::di, io::uo)
	is det.


The compiler is complaining thus:
flatzinc_solver.m:1023: In clause for `output_environment(in, in, ui, di, uo)':
flatzinc_solver.m:1023:   in argument 2 of call to predicate
flatzinc_solver.m:1023:   `flatzinc_solver.output_env_var'/6:
flatzinc_solver.m:1023:   mode error: variable `PS' has instantiatedness
flatzinc_solver.m:1023:   `ground',
flatzinc_solver.m:1023:   expected instantiatedness was `unique'.

Do I take it that ui arguments in closures are treated as ground by the
compiler?  If so, is this a bug or is there a reason for this behaviour?

-- Ralph
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