<div dir="ltr">Update: Version 0.8.1 is out, which fixes renaming that crosses module boundaries and preserves CPP directives</div><div class="gmail_extra"><br><div class="gmail_quote">On Sun, Oct 4, 2015 at 10:18 PM, Alan & Kim Zimmerman <span dir="ltr"><<a href="mailto:alan.zimm@gmail.com" target="_blank">alan.zimm@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div>I'm pleased to announce the release of HaRe 0.8, available on hackage [1]<br><br>What's new?<br>===========<br><br>Everything, and nothing.<br><br>Everything in the sense that it has been completely reworked internally to make<br>use of the new API Annotations [2] in GHC 7.10.2, via the ghc-exactprint [3]<br>library.<br><br>Nothing in the sense that the functionality in this version is/should be<br>identical to that in 0.7.2.8<br><br>Limitations<br>===========<br><br>HaRe 0.8 will only work for projects using GHC 7.10.2 for compilation. Compiling<br>HaRe with 7.10.2 and then using it against projects using an earlier compiler<br>will not work, as HaRe needs to be able to invoke GHC to the type checker stage<br>on the project using GHC 7.10.2.<br><br>What is it?<br>===========<br><br>HaRe makes changes to working code, so that it still works once the change is<br>made.<br><br>Refactorings it can do are<br><br>* demote<br><br>  Take a declaration from the level where it is defined and move it down to the<br>  place where it is used. This only works if it is used in one place only.<br><br>* dupdef<br><br>  Duplicate a definition with a new name.<br><br>* iftocase<br><br>  Convert an if declaration to a case declaration.<br><br>* liftOneLevel<br><br>  Move a declaration one level up, adding parameters as needed to pass in<br>  locally declared variables.<br><br>* liftToTopLevel<br><br>  Move a declaration to the top level, adding parameters as needed to pass in<br>  locally declared variables.<br><br>* rename<br><br>  Change a name throughout the project. This makes use of the GHC renamed source<br>  so will not change other names that just happen to be lexically identical, but<br>  are in fact different names.<br><br>It currently has an emacs integration only, assistance in supporting other<br>environnments welcome.<br><br>[1] <a href="https://hackage.haskell.org/package/HaRe" target="_blank">https://hackage.haskell.org/package/HaRe</a><br>[2] <a href="https://ghc.haskell.org/trac/ghc/wiki/ApiAnnotations" target="_blank">https://ghc.haskell.org/trac/ghc/wiki/ApiAnnotations</a><br>[3] <a href="https://hackage.haskell.org/package/ghc-exactprint" target="_blank">https://hackage.haskell.org/package/ghc-exactprint</a><span class="HOEnZb"><font color="#888888"><br><br></font></span></div><span class="HOEnZb"><font color="#888888">Alan<br><div><br></div></font></span></div>
</blockquote></div><br></div>