<div dir="ltr">Thanks, Mark. I wanted f and g to be defined at the top level for use throughout my whole file, rather just inside of a let. Of course, I could also put the definitions of f, g, and h in their own module/file that hides the name h and then import this, but I was hoping to have this all in one place.<div><br></div><div>--Todd</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">On Wed, Nov 22, 2023 at 5:26 PM Mark McConnell <<a href="mailto:mmcconnell17704@yahoo.com">mmcconnell17704@yahoo.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex"><div><div style="font-family:"courier new",courier,monaco,monospace,sans-serif;font-size:13px"><div></div>
        <div dir="ltr">What about</div><div dir="ltr"><br></div><div dir="ltr">let h ... = ... h ...</div><div dir="ltr">in let f ... = ... f,g,h ...</div><div dir="ltr">       g ... = ... f,g,h ...</div><div dir="ltr">   in ... (main body that uses f and g) ...</div><div><br></div><div dir="ltr">This makes the dependencies clear.  h stands on its own, f and g use each other together with h, and the main body can use f, g, and h.</div><div dir="ltr"><br></div><div dir="ltr">I believe what you wanted, however, was to express that the main body *cannot* (will not, should not) use h.  This version does not express that.</div>
        
        </div><div id="m_8373804378597952047yahoo_quoted_0896897052">
            <div style="font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;font-size:13px;color:rgb(38,40,42)">
                
                <div>
                    On Wednesday, November 22, 2023 at 07:40:25 PM EST, Todd Wilson <<a href="mailto:twilson@csufresno.edu" target="_blank">twilson@csufresno.edu</a>> wrote:
                </div>
                <div><br></div>
                <div><br></div>
                <div><div id="m_8373804378597952047yiv1415212935"><div dir="ltr">Hello, Cafe:<div><br></div><div>Is there a preferred way to define two top-level mutually recursive functions, f and g, that both use a common local function h such that h is (1) only defined once and (2) does not escape the scope of f and g? I suppose it could be done like this:</div><div><br></div><div><blockquote style="margin:0px 0px 0px 40px;border:none;padding:0px"><font face="monospace">fg = let f ... = ... f,g,h ...<br>         g ... = ... f,g,h ...<br>         h ... = ... h ...<br>      in (f,g)<br></font><font face="monospace">f = fst fg<br>g = snd fg<br></font> </blockquote>but is there something more elegant than this that I'm not seeing?<br></div><div><br></div><div>Todd Wilson</div></div>
</div>_______________________________________________<br>Haskell-Cafe mailing list<br>To (un)subscribe, modify options or view archives go to:<br><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br>Only members subscribed via the mailman list are allowed to post.</div>
            </div>
        </div></div></blockquote></div>