<div dir="auto">It took me about five minutes to arrive at the guess that this is about the syntax in Cabal files for using backpack - is that right?<div dir="auto"><br></div><div dir="auto">What is the intent of what got implemented, anyway? Are there example use cases?</div></div><br><div class="gmail_quote"><div dir="ltr" class="gmail_attr">Den tors 25 feb. 2021 18:14Edward Z Yang <<a href="mailto:ezyang@mit.edu" target="_blank" rel="noreferrer">ezyang@mit.edu</a>> skrev:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">




<div dir="ltr" style="font-size:12pt;color:#000000;background-color:#ffffff;font-family:Calibri,Arial,Helvetica,sans-serif">
<p>Today, using the 'mixins' field you can rename modules that come from other packages by manually expressing a renaming one-by-one. In some Backpack use cases, you may have a lot of modules that you would like to mechanically rename into some subnamespace;
 today, you have manually list each renaming one by one.<br>
</p>
<p><br>
</p>
<p><a href="https://github.com/haskell/cabal/pull/7303" rel="noreferrer noreferrer" target="_blank">https://github.com/haskell/cabal/pull/7303</a> contains an implementation of one possible way to extend mixin syntax to support qualified renaming; the implementation is very simple. The syntax here is
 based off of Richard Eisenberg's local modules proposal (<a href="https://github.com/ghc-proposals/ghc-proposals/pull/283" rel="noreferrer noreferrer" target="_blank">https://github.com/ghc-proposals/ghc-proposals/pull/283</a>) which supports the qualified keyword before module exports/imports which has the same effect (bring the module into scope under a sub-module namespace).
 However, the PR isn't really meant to be an end all to the discussion: it's just to show that it's pretty simple to implement this functionality.<br>
</p>
<p><br>
</p>
<p>There are two primary axes which I am looking for feedback:<br>
</p>
<p><br>
</p>
<p>* Expressivity. The current PoC implementation only permits unconditionally prefix-ing all modules that would have been brought into scope by the mixin; e.g., transforming module A to Prefix.A. Edward Kmett has expressed that in some cases, he would like
 it if you could implement the import as a suffix. One could also imagine allowing arbitrary string transformations. Opinions on where to draw the line for expressivity are solicited.<br>
</p>
<p><br>
</p>
<p>* Syntax. The current syntax is "pkgname qualified Prefix" as it is symmetric with "pkgname hiding (A, B)" and it was simple to implement. But I am not particularly attached to this syntax, and am open to other suggestions. If we permit suffixing, a wildcard
 based syntax like "pkgname (* as *.Suffix)" may be preferable (though modestly more complex to specify and implement; for example, is the glob recursive over dots?). Edward Kmett has offered some other possibilities at <a href="https://github.com/haskell/cabal/issues/7290#issue-812744575" rel="noreferrer noreferrer" target="_blank">https://github.com/haskell/cabal/issues/7290#issue-812744575</a>​<br>
</p>
<p><br>
</p>
<p>Thanks Oleg for reminding me to send this RFC to this mailing list.<br>
</p>
<p><br>
</p>
<p>Cheers,<br>
</p>
<p>Edward<br>
</p>
</div>

_______________________________________________<br>
cabal-devel mailing list<br>
<a href="mailto:cabal-devel@haskell.org" rel="noreferrer noreferrer" target="_blank">cabal-devel@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/cabal-devel" rel="noreferrer noreferrer noreferrer" target="_blank">http://mail.haskell.org/cgi-bin/mailman/listinfo/cabal-devel</a><br>
</blockquote></div>