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