<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">Alan, Andrew,<div class=""><br class=""></div><div class="">The original version of HaRe did integrate with vim. This work was done more than 10 years ago, and it may well be that the mechanisms have changed. Still, the code should be in the HaRe repo. On the other hand, may be easier to start from scratch.</div><div class=""><br class=""></div><div class="">Kind regards, and great to hear that you’re planning to do this!</div><div class=""><br class=""></div><div class="">Simon T.</div><div class=""><br class=""></div><div class=""><br class=""><div><blockquote type="cite" class=""><div class="">On 5 Oct 2015, at 07:19, Alan & Kim Zimmerman <<a href="mailto:alan.zimm@gmail.com" class="">alan.zimm@gmail.com</a>> wrote:</div><br class="Apple-interchange-newline"><div class=""><div dir="ltr" class=""><div class=""><div class=""><div class="">Hi Andrew<br class=""><br class=""></div>Thanks for the offer, that will be awesome.<br class=""><br class=""></div>In emacs the process is to highlight in a buffer the point where a change should happen, for example place the cursor on something that needs renaming, and then press the key binding for the relevant refactoring. The elisp uses the name of the buffer, location of the cursor and/or current highlighted region to construct the parameters for a call to ghc-hare.<br class=""><br class=""></div><div class="">When it is done, ghc-hare returns either (ok [files]) to indicate success and the names of the files that were changed, or (error "description of error").<br class=""><br class=""></div><div class="">HaRe does not actually change any files, it just places a new version next to to it with an extension of .refactored.hs. In emacs a (optional) series of ediff buffers are presented to review the changes. If the user accepts them the elisp copies the original files to the same name but with a date-time string as a suffix, and renames the refactored file to be the original. It should then reload the buffer, but I think that is missing right now.<br class=""><br class=""></div><div class="">Alan<br class=""></div></div><div class="gmail_extra"><br class=""><div class="gmail_quote">On Mon, Oct 5, 2015 at 8:07 AM, Andrew Gibiansky <span dir="ltr" class=""><<a href="mailto:andrew.gibiansky@gmail.com" target="_blank" class="">andrew.gibiansky@gmail.com</a>></span> wrote:<br class=""><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr" class="">Alan,<div class=""><br class=""></div><div class="">This is awesome. I can't express how excited I am to see this develop further.</div><div class=""><br class=""></div><div class="">I'll gladly start working on Vim support.</div><div class=""><br class=""></div><div class="">Could you describe how it works with emacs?</div><div class=""><br class=""></div><div class="">-- Andrew</div></div><div class="gmail_extra"><br class=""><div class="gmail_quote"><div class=""><div class="h5">On Sun, Oct 4, 2015 at 1:18 PM, Alan & Kim Zimmerman <span dir="ltr" class=""><<a href="mailto:alan.zimm@gmail.com" target="_blank" class="">alan.zimm@gmail.com</a>></span> wrote:<br class=""></div></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class=""><div class="h5"><div dir="ltr" class=""><div class="">I'm pleased to announce the release of HaRe 0.8, available on hackage [1]<br class=""><br class="">What's new?<br class="">===========<br class=""><br class="">Everything, and nothing.<br class=""><br class="">Everything in the sense that it has been completely reworked internally to make<br class="">use of the new API Annotations [2] in GHC 7.10.2, via the ghc-exactprint [3]<br class="">library.<br class=""><br class="">Nothing in the sense that the functionality in this version is/should be<br class="">identical to that in 0.7.2.8<br class=""><br class="">Limitations<br class="">===========<br class=""><br class="">HaRe 0.8 will only work for projects using GHC 7.10.2 for compilation. Compiling<br class="">HaRe with 7.10.2 and then using it against projects using an earlier compiler<br class="">will not work, as HaRe needs to be able to invoke GHC to the type checker stage<br class="">on the project using GHC 7.10.2.<br class=""><br class="">What is it?<br class="">===========<br class=""><br class="">HaRe makes changes to working code, so that it still works once the change is<br class="">made.<br class=""><br class="">Refactorings it can do are<br class=""><br class="">* demote<br class=""><br class="">  Take a declaration from the level where it is defined and move it down to the<br class="">  place where it is used. This only works if it is used in one place only.<br class=""><br class="">* dupdef<br class=""><br class="">  Duplicate a definition with a new name.<br class=""><br class="">* iftocase<br class=""><br class="">  Convert an if declaration to a case declaration.<br class=""><br class="">* liftOneLevel<br class=""><br class="">  Move a declaration one level up, adding parameters as needed to pass in<br class="">  locally declared variables.<br class=""><br class="">* liftToTopLevel<br class=""><br class="">  Move a declaration to the top level, adding parameters as needed to pass in<br class="">  locally declared variables.<br class=""><br class="">* rename<br class=""><br class="">  Change a name throughout the project. This makes use of the GHC renamed source<br class="">  so will not change other names that just happen to be lexically identical, but<br class="">  are in fact different names.<br class=""><br class="">It currently has an emacs integration only, assistance in supporting other<br class="">environnments welcome.<br class=""><br class="">[1] <a href="https://hackage.haskell.org/package/HaRe" target="_blank" class="">https://hackage.haskell.org/package/HaRe</a><br class="">[2] <a href="https://ghc.haskell.org/trac/ghc/wiki/ApiAnnotations" target="_blank" class="">https://ghc.haskell.org/trac/ghc/wiki/ApiAnnotations</a><br class="">[3] <a href="https://hackage.haskell.org/package/ghc-exactprint" target="_blank" class="">https://hackage.haskell.org/package/ghc-exactprint</a><span class=""><font color="#888888" class=""><br class=""><br class=""></font></span></div><span class=""><font color="#888888" class="">Alan<br class=""><div class=""><br class=""></div></font></span></div>
<br class=""></div></div>_______________________________________________<br class="">
Haskell-Cafe mailing list<br class="">
<a href="mailto:Haskell-Cafe@haskell.org" target="_blank" class="">Haskell-Cafe@haskell.org</a><br class="">
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" target="_blank" class="">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe</a><br class="">
<br class=""></blockquote></div><br class=""></div>
</blockquote></div><br class=""></div>
_______________________________________________<br class="">Haskell-Cafe mailing list<br class=""><a href="mailto:Haskell-Cafe@haskell.org" class="">Haskell-Cafe@haskell.org</a><br class="">http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe<br class=""></div></blockquote></div><br class=""><div apple-content-edited="true" class="">
Simon Thompson | Professor of Logic and Computation <br class="">School of Computing | University of Kent | Canterbury, CT2 7NF, UK<br class=""><a href="mailto:s.j.thompson@kent.ac.uk" class="">s.j.thompson@kent.ac.uk</a> | M +44 7986 085754 | W <a href="http://www.cs.kent.ac.uk/~sjt" class="">www.cs.kent.ac.uk/~sjt</a><br class=""><br class="">

</div>
<br class=""></div></body></html>