<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
<style type="text/css" style="display:none"><!-- p { margin-top: 0px; margin-bottom: 0px; }--></style>
</head>
<body 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">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 (https://github.com/ghc-proposals/ghc-proposals/pull/283) 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">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>
</body>
</html>