<div>Hi,<br></div><div><br></div><div>In one of the module, I am trying to add impurity to Mercury. I code looks like below and I get the following error:<br></div><div><br></div><div><i>ex2.m:023: In clause for predicate `ex2.print'/2:</i><br></div><div><i>ex2.m:023:   warning: variable `IOState_out' occurs only once in this scope.</i><br></div><div><i>ex2.m:025: In clause for `print(in, out)':</i><br></div><div><i>ex2.m:025:   in argument 2 of call to predicate `io.write_string'/3:</i><br></div><div><i>ex2.m:025:   mode error: variable `IOState_in' has instantiatedness `ground',</i><br></div><div><i>ex2.m:025:   expected instantiatedness was `unique'.</i><br></div><div><i>ex2.m:034: In clause for `main(di, uo)':</i><br></div><div><i>ex2.m:034:   in argument 2 of call to predicate `io.write_string'/3:</i><br></div><div><i>ex2.m:034:   mode error: variable `IOState_temp' has instantiatedness `ground',</i><br></div><div><i>ex2.m:034:   expected instantiatedness was `unique'.</i><br></div><div><br></div><div><b>How do I solve it?</b><br></div><div><br></div><div>I don't want to use the All solutions predicate or even Foreign language interface!<br></div><div><br></div><div><br></div><div><br></div><div><i>:- module ex2.</i><br></div><div><i>:- interface.</i><br></div><div><i>:- import_module io.</i><br></div><div><i>:- pred main(io::di, io::uo) is det.</i><br></div><div><i>:- implementation.</i><br></div><div><i>:- pred text(string::out) is multi.</i><br></div><div><i>:- pred print(io::in, io::out) is det.</i><br></div><div><br></div><div><i>text("A").</i><br></div><div><i>text("B").</i><br></div><div><i>text("C").</i><br></div><div><i>text("D").</i><br></div><div><i>text("E").</i><br></div><div><i>text("F").</i><br></div><div><br></div><div><i>print(IOState_in, IOState_out) :-</i><br></div><div><i>    text(X),</i><br></div><div><i>    io.write_string(X, IOState_in, _),</i><br></div><div><i>    X = "D".</i><br></div><div><br></div><div><i>print(IOState_in, IOState_out) :-</i><br></div><div><i>    IOState_out = IOState_in.</i><br></div><div><br></div><div><i>main(IOState_in, IOState_out) :-</i><br></div><div><i>    print(IOState_in, IOState_temp),</i><br></div><div><i>    io.write_string("Hello, World!\n", IOState_temp, IOState_out).</i><br></div><div><br></div>