<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="">Hi Peter,<div class=""><br class=""></div><div class="">Thank you very much indeed. It has taken me the best part of my day here but I have finally managed to understand things to the point where I now have what I would call ’standard higher order behaviours’ that Haskell provides for example. And more remarkably, I think, after many hours of writing small test programs to grok it, that I may be in serious danger of understanding what’s going on, at least in part!</div><div class=""><br class=""></div><div class="">The final working code feels clean now, I am sure you guys would shudder but here it is as a summary:</div><div class=""><br class=""></div><div class=""><font face="Menlo" style="font-size: 14px;" class="">:- type renderer == (pred(render_inst, rop_error, tcon, tcon)).<br class="">:- mode renderer == (pred(in, out, in, out) is det).</font><br class=""><br class=""></div><div class="">my top level processing function is now declared as:</div><div class=""><br class=""></div><div class=""><span style="font-size: 14px;" class=""><font face="Menlo" class="">:- pred translate_top_level_term(renderer, lsnode, tcon, tcon, io, io).<br class="">:- mode translate_top_level_term(renderer, in, in, out, di, uo) is det.</font></span><br class=""><br class=""></div><div class="">and the intermediate level evaluation is:</div><div class=""><br class=""></div><div class=""><font face="Menlo" style="font-size: 14px;" class="">:- pred eval(renderer, location, instruction, lsnode, renderout, tcon, tcon).<br class="">:- mode eval(renderer, in, in, in, out, in, out) is semidet.</font></div><div class=""><br class=""></div><div class="">It all works well but there is ONE fly left in the ointment… I currently have some inline code to decide on what target backend is going to do the rendering, currently there is only one but this code is to prove that I can have many:</div><div class=""><br class=""></div><div class=""><font face="Menlo" style="font-size: 14px;" class=""> LCTarget = string.to_lower(Target),<br class=""> ( if LCTarget = "php" then<br class=""> Renderer = target_c.render<br class=""> else<br class=""> Renderer = target_c.render<br class=""> ),<br class=""> % Renderer = get_target_renderer(Target),</font><br class=""><br class=""></div><div class="">The commented out line I cannot get to work, basically I moved that code into a small helper function for code clarity:</div><div class=""><br class=""></div><div class=""><font face="Menlo" style="font-size: 14px;" class="">:- func get_target_renderer(string::in) = (renderer::out).<br class=""><br class="">get_target_renderer(T) = R :-<br class=""> LCTarget = string.to_lower(T),<br class=""> ( if LCTarget = "php" then<br class=""> R = target_c.render<br class=""> else<br class=""> R = target_c.render<br class=""> ).</font></div><div class=""><br class=""></div><div class="">It compiles but when I try to use it seven types of hell break loose and I don’t understand the message, pasted at the end, and I would very much appreciate it if you had the time to explain what I have done this time to upset the compiler that tolerates me so wonderfully most of the time.</div><div class=""><br class=""></div><div class="">Again, thanks for that reply, it got me thinking, learning and tinkering to the point of success, mostly!</div><div class="">Sean.</div><div class=""><br class=""></div><div class="">————</div><div class=""><div class="">translate.m:143: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:143: mode error in conjunction. The next 13 error messages</div><div class="">translate.m:143: indicate possible causes of this error.</div><div class="">translate.m:143: </div><div class="">translate.m:126: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:126: in argument 1 (i.e. the predicate term) of higher-order</div><div class="">translate.m:126: predicate call:</div><div class="">translate.m:126: mode error: variable `Renderer' has instantiatedness</div><div class="">translate.m:126: `ground',</div><div class="">translate.m:126: expecting higher-order pred inst of arity 4.</div><div class="">translate.m:143: </div><div class="">translate.m:128: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:128: in argument 1 of call to function `string.string'/1:</div><div class="">translate.m:128: mode error: variable `Result' has instantiatedness `free',</div><div class="">translate.m:128: expected instantiatedness was `ground'.</div><div class="">translate.m:143: </div><div class="">translate.m:128: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:128: in argument 2 of call to predicate `io.format'/4:</div><div class="">translate.m:128: mode error: variable `V_45' has instantiatedness `free',</div><div class="">translate.m:128: expected instantiatedness was `ground'.</div><div class="">translate.m:143: </div><div class="">translate.m:130: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:130: in argument 5 of call to predicate</div><div class="">translate.m:130: `translate.translate_top_level_term'/6:</div><div class="">translate.m:130: unique-mode error: the called procedure would clobber its</div><div class="">translate.m:130: argument, but variable `STATE_VARIABLE_IO_46' is still live.</div><div class="">translate.m:143: </div><div class="">translate.m:139: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:139: in argument 1 of call to function `list.reverse'/1:</div><div class="">translate.m:139: mode error: variable `V_52' has instantiatedness `free',</div><div class="">translate.m:139: expected instantiatedness was `ground'.</div><div class="">translate.m:143: </div><div class="">translate.m:139: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:139: in argument 1 of functor `reverse/1':</div><div class="">translate.m:139: mode error in unification of `STATE_VARIABLE_T_50' and</div><div class="">translate.m:139: `translate.tcon(V_107, V_52, V_108, V_109)'.</div><div class="">translate.m:139: Variable `STATE_VARIABLE_T_50' has instantiatedness `free',</div><div class="">translate.m:139: term `translate.tcon(V_107, V_52, V_108, V_109)' has</div><div class="">translate.m:139: instantiatedness</div><div class="">translate.m:139: named inst translate.tcon(free, free, free, free).</div><div class="">translate.m:143: </div><div class="">translate.m:140: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:140: in argument 1 of call to function `list.reverse'/1:</div><div class="">translate.m:140: mode error: variable `V_53' has instantiatedness `free',</div><div class="">translate.m:140: expected instantiatedness was `ground'.</div><div class="">translate.m:143: </div><div class="">translate.m:140: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:140: in argument 1 of functor `reverse/1':</div><div class="">translate.m:140: mode error in unification of `STATE_VARIABLE_T_50' and</div><div class="">translate.m:140: `translate.tcon(V_110, V_111, V_112, V_53)'.</div><div class="">translate.m:140: Variable `STATE_VARIABLE_T_50' has instantiatedness `free',</div><div class="">translate.m:140: term `translate.tcon(V_110, V_111, V_112, V_53)' has</div><div class="">translate.m:140: instantiatedness</div><div class="">translate.m:140: named inst translate.tcon(free, free, free, free).</div><div class="">translate.m:143: </div><div class="">translate.m:141: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:141: in argument 1 of call to function `list.reverse'/1:</div><div class="">translate.m:141: mode error: variable `V_54' has instantiatedness `free',</div><div class="">translate.m:141: expected instantiatedness was `ground'.</div><div class="">translate.m:143: </div><div class="">translate.m:141: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:141: in argument 1 of functor `reverse/1':</div><div class="">translate.m:141: mode error in unification of `STATE_VARIABLE_T_50' and</div><div class="">translate.m:141: `translate.tcon(V_113, V_114, V_54, V_115)'.</div><div class="">translate.m:141: Variable `STATE_VARIABLE_T_50' has instantiatedness `free',</div><div class="">translate.m:141: term `translate.tcon(V_113, V_114, V_54, V_115)' has</div><div class="">translate.m:141: instantiatedness</div><div class="">translate.m:141: named inst translate.tcon(free, free, free, free).</div><div class="">translate.m:143: </div><div class="">translate.m:143: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:143: in argument 1 of call to predicate</div><div class="">translate.m:143: `io.unsafe_set_io_state'/1:</div><div class="">translate.m:143: unique-mode error: the called procedure would clobber its</div><div class="">translate.m:143: argument, but variable `STATE_VARIABLE_Dbg_106' is still</div><div class="">translate.m:143: live.</div><div class="">translate.m:143: </div><div class="">translate.m:128: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:128: in argument 2 of call to predicate `io.format'/4:</div><div class="">translate.m:128: in list element #0:</div><div class="">translate.m:128: mode error in unification of `V_47' and `string.s(V_48)'.</div><div class="">translate.m:128: Variable `V_47' has instantiatedness `free',</div><div class="">translate.m:128: term `string.s(V_48)' has instantiatedness</div><div class="">translate.m:128: `named inst string.s(free)'.</div><div class="">translate.m:143: </div><div class="">translate.m:128: In clause for `translate(in, in, in, di, uo)':</div><div class="">translate.m:128: in argument 2 of call to predicate `io.format'/4:</div><div class="">translate.m:128: mode error in unification of `V_45' and `list.[V_47 |</div><div class="">translate.m:128: V_49]'.</div><div class="">translate.m:128: Variable `V_45' has instantiatedness `free',</div><div class="">translate.m:128: term `list.[V_47 | V_49]' has instantiatedness</div><div class="">translate.m:128: `named inst list.'[|]'(free, unique([]))’.</div></div><div class=""><br class=""></div><div class="">and here is the full section of code, with line numbers…...</div><div class=""><br class=""></div><div class=""><font face="Menlo" style="font-size: 14px;" class="">101 translate(Options, Target, AstTerms, !IO) :-<br class="">102 % TODO: Env = map.init(string, univ),<br class="">103 % TODO: replace !IO with a stream I open into a file!<br class="">104 some [!T]<br class="">105 (<br class="">106 % LCTarget = string.to_lower(Target),<br class="">107 % ( if LCTarget = "php" then<br class="">108 % Renderer = target_c.render<br class="">109 % else<br class="">110 % Renderer = target_c.render<br class="">111 % ),<br class="">112 Renderer = get_target_renderer(Target),<br class="">113<br class="">114 trace[io(!Dbg), runtime(env("FELT_TRN"))]<br class="">115 (ttrace(0, "selected target:%s\n%s\n",<br class="">116 [s(string(Renderer)), s(string(AstTerms))],<br class="">117 !Dbg)),<br class="">118<br class="">119 !:T = tcon(<br class="">120 Options, % command line<br class="">121 [], % output<br class="">122 [], % warnings<br class="">123 [] % errors<br class="">124 ),<br class="">125<br class="">126 Renderer(include([pstring(pos(0,0,0),"testing")]),<br class="">127 Result,!T),<br class="">128 io.format("TESTED OUTPUT: %s",[s(string(Result))], !IO),<br class="">129<br class="">130 translate_top_level_term(<br class="">131 Renderer,<br class="">132 AstTerms,<br class="">133 !T,<br class="">134 !IO<br class="">135 ),<br class="">136<br class="">137 % CodeList MAY be invalid of errors are present.<br class="">138 % ^^^<br class="">139 Code = reverse(output(!.T)),<br class="">140 Errors = reverse(errors(!.T)), %sort by pos(!,_,_)<br class="">141 Warnings = reverse(warnings(!.T)),<br class="">142<br class="">143 trace[io(!Dbg), runtime(env("FELT_TRN"))]<br class="">144 (<br class="">145 ttrace(0, "%s:WARNINGS%s", [s(colour(yellow)),<br class="">146 s(colour(reset))], !Dbg),<br class="">147 list.foldl(io.print_line, Warnings, !Dbg),<br class="">148<br class="">149 ttrace(0, "%s:ERRORS%s", [s(colour(red)),<br class="">150 s(colour(reset))], !Dbg),<br class="">151 list.foldl(io.print_line, Errors, !Dbg),<br class="">152<br class="">153 ttrace(0, "%s:TRANSLATIONS%s", [s(colour(green)),<br class="">154 s(colour(reset))], !Dbg),<br class="">155 list.foldl(io.print_line, Code, !Dbg),<br class="">156<br class="">157 io.format("\n**************\n", [], !Dbg),<br class="">158 list.foldl(render_op(0, Options), Code, !Dbg),<br class="">159 io.format("\n**************\n", [], !Dbg)<br class="">160 )<br class="">161 ).</font></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""></div><div class=""><br class=""><div><br class=""><blockquote type="cite" class=""><div class="">On 2 Oct 2021, at 02:57, Peter Wang <<a href="mailto:novalazy@gmail.com" class="">novalazy@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">On Fri, 01 Oct 2021 21:27:40 +0100 "Sean Charles (emacstheviking)" <</span><a href="mailto:objitsu@gmail.com" style="font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px;" class="">objitsu@gmail.com</a><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">> wrote:</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class="">Hi,<br class=""><br class="">I am trying to pass around a predicate to execute at a later point in my translation process:<br class=""><br class="">:- type renderer == (pred(instruction, lstring, rop_error, tcon, tcon)).<br class="">:- inst renderer == (pred(in, in, out, in, out) is det).<br class=""><br class="">then to set the renderer:<br class=""><br class=""> Renderer = target_c.render<br class=""><br class="">then I have a work in progress evaluation predicate:<br class=""><br class="">:- pred eval(renderer::in, location::in, instruction::in, lsnode::in,<br class=""> renderout::out, tcon::in, tcon::out) is semidet.<br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">The mode 'in' is defined as 'ground >> ground',</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">so the pred-mode declaration declares that the first argument has</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">initial inst 'ground' and final inst 'ground'.</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><blockquote type="cite" style="font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; orphans: auto; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; widows: auto; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br class="">eval(Render, Pos, defvar, Args, Result, !T) :-<br class=""> trace[io(!Dbg), runtime(env("FELT_TRN"))]<br class=""> (sdump($pred, $line, Args, !Dbg)),<br class=""><br class=""> ( if Args = [tk(Pos, VarName)] then<br class=""> %<br class=""> % this it not working well<br class=""> % ...what can be done to make it better ?<br class=""> %<br class="">348 Render(defvar, lstring(Pos, VarName), CodeM, !T),<br class=""></blockquote><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Renderer has inst 'ground' here, meaning it has no higher-order inst</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">information, so it cannot be called. (It is possible to call a</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">higher-order *function* term without higher-order inst information,</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">but that is a special case.)</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">You need to change the mode of the first argument from 'in' to</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">'in(renderer)', which expands to 'renderer >> renderer',</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">where 'renderer' refers to the inst you have defined earlier.</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">There is no implied connection between the type name 'renderer'</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">and the inst name 'renderer'.</span><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><br style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none;" class=""><span style="caret-color: rgb(0, 0, 0); font-family: CourierNewPSMT; font-size: 16px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px; text-decoration: none; float: none; display: inline !important;" class="">Peter</span></div></blockquote></div><br class=""></div></body></html>