<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class=""><div class="">I have an error that I get a notion for the problem but I cannot fully understand the rue cause and what the solution is. I have written a tokeniser that works fine and hands back a list of tokens so I had to change my primitive DCG to use a list of tokens as input and I thought that I may as well pass in the !IO state so that as each command was detected it could print the output there and then and finish.</div><div class=""><br class=""></div><div class="">HOwever, I get the following error message and I don’t truly understand what it is trying to tell me:</div><div class=""><br class=""></div><div class="">repl.m:096: In clause for `execute(in, di, uo)':<br class="">repl.m:096:   in argument 1 of call to predicate `repl.parse_cmd'/4:<br class="">repl.m:096:   mode error: variable `STATE_VARIABLE_IO_16' has instantiatedness<br class="">repl.m:096:   `mostly_unique',<br class="">repl.m:096:   expected instantiatedness was `unique’.</div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><font face="Courier" class="">    :- pred execute(string::in, io::di, io::uo) is det.<br class=""><br class=""></font><div class=""><font face="Courier" class="">    execute(Input, !IO) :-<br class="">        lexer.on_string(chomp(Input), Lx, !IO),<br class="">        % dump_lexer(Lx, !IO),<br class="">        ( if lex_error(Lx) = yes(ok_eob) then<br class="">              io.format("DCG this: %s\n", [s(string(tokens(Lx)))], !IO),<br class="">96 ===>       ( if parse_cmd(!IO, tokens(Lx), _) % do I care what's left?<br class="">              then io.format("DID IT\n", [], !IO)<br class="">              else io.format("PARSE FAILED\n", [], !IO)<br class="">              )<br class="">        else<br class="">            io.format("%sERROR! %s\n”,<br class="">                [s(prompt), s(string(lex_error(Lx)))], !IO)<br class="">        ).<br class=""><br class=""><br class=""></font></div><div class=""><font face="Courier" class="">:- pred parse_cmd(io::di, io::uo, list(token)::in, list(token)::out) is det.<br class=""><br class=""></font></div><div class=""><font face="Courier" class="">parse_cmd(!IO) —><br class="">    ( if [(tk(_, "help"))] then<br class="">        {io.format("read the manual :|\n", [], !IO)}<br class="">    else<br class="">       {io.format("whatever.\n", [], !IO)},<br class="">       []<br class="">    ).</font><div class=""><br class=""></div><div class="">I tried using `mui` but that just elicited a different error so I realised I was playing in the dark at this point.</div><div class="">Any advice would be greatly appreciated at this point!</div><div class=""><br class=""></div></div></body></html>