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.


https://github.com/haskell/cabal/pull/7303 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.


There are two primary axes which I am looking for feedback:


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


* 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 https://github.com/haskell/cabal/issues/7290#issue-812744575?


Thanks Oleg for reminding me to send this RFC to this mailing list.


Cheers,

Edward
_______________________________________________
cabal-devel mailing list
cabal-devel@haskell.org
http://mail.haskell.org/cgi-bin/mailman/listinfo/cabal-devel

Reply via email to