The Haskell Refactoring Tool
See the codeHome is now https://github.com/RefactoringTools/HaRe
HaRe can rename symbols, lift definitions, convert equivalent Haskell constructs like ifs and cases and more while preserving program semantics, types and correctly handling indentation. Only HaRe can execute identity transformation!
Note:
HaRe will only work for projects using GHC 7.10.2 for compilation. Compiling HaRe with 7.10.2 and then using it against projects using an earlier compiler will not work, as HaRe needs to be able to invoke GHC to the type checker stage on the project using GHC 7.10.2.
See https://github.com/DanielG/ghc-mod/issues/615
cabal install HaRe
stack install HaRe --resolver=lts-4.0
Check that it works from the command line
$ ghc-hare --version
0.8.x.y
Running the bare command lists available refactorings and their parameters
Currently only emacs integration is offered. Add the following to your ~/.emacs using the load-path entry that matches the installation on your machine.
(add-to-load-path "~/.cabal/share/x86_64-linux-ghc-7.10.2/HaRe-0.8.2.0/elisp")
(require 'hare)
(autoload 'hare-init "hare" nil t)
Add an intializer hook to the ghc-mode command
(add-hook 'haskell-mode-hook (lambda () (ghc-init) (hare-init)))
Alternatively, if using haskell-mode, and initializing via a function
;; Haskell main editing mode key bindings.
(defun haskell-hook ()
;(lambda nil (ghc-init))
(ghc-init)
(hare-init)
...
)
If this is done correctly, there should be an additional Refactorer
menu entry when opening a haskell file. The refactorings can be
initiated via the menu, or using the keyboard shortcuts displayed in
the menu.
The installation can be fine-tuned using
M-x customize-variable
on
hare-search-paths
ghc-hare-command
Each refactoring will first ask for any information it requires, e.g. a new name if renaming, and then attempt the refactoring. If any precondition is not met this will be reported and the refactoring will abort.
If it succeeds, you will be given the option to look at an ediff session to see what changes would be made, and each file can be individually accepted or declined.
If the refactoring is commited, the original file is renamed to have a suffix containing the current timestamp.
E.g., after renaming in Foo.hs, there will be two files
Foo.hs
Foo.hs.2013-08-22T19:32:31+0200
This allows a sequence of refactorings to be undone manually if required. In theory.
See https://github.com/glittershark/vim-hare
Join in at #haskell-refactorer on freenode.
Note: (2015-10-04) HaRe cannot be tested using stack. It can be built, but the tests will fail, as HaRe makes use of ghc-mod as a library and the interaction between stack, ghc-mod and cabal-helper does not work for the tests.
To run the test suite do:
./configure.sh
cabal test
The configure.sh script simply makes sure that all the cabal projects used in
the tests are also configured.
See http://hspec.github.io/ for details on hspec
see https://travis-ci.org/#alanz/HaRe for continuous build results
Contributors: please try to follow https://github.com/tibbe/haskell-style-guide Note:A consistent coding layout style is more important than what specific on is used.
Please put a pull request for this list if you are missing.
The logo was designed by Christi du Toit, https://www.behance.net/christidutoit
Haskell
87.3%
TeX
4.5%
HTML
3.1%
Yacc
1.6%
Emacs Lisp
1.6%
The Haskell Refactoring Tool
See the codeHome is now https://github.com/RefactoringTools/HaRe
HaRe can rename symbols, lift definitions, convert equivalent Haskell constructs like ifs and cases and more while preserving program semantics, types and correctly handling indentation. Only HaRe can execute identity transformation!
Note:
HaRe will only work for projects using GHC 7.10.2 for compilation. Compiling HaRe with 7.10.2 and then using it against projects using an earlier compiler will not work, as HaRe needs to be able to invoke GHC to the type checker stage on the project using GHC 7.10.2.
See https://github.com/DanielG/ghc-mod/issues/615
cabal install HaRe
stack install HaRe --resolver=lts-4.0
Check that it works from the command line
$ ghc-hare --version
0.8.x.y
Running the bare command lists available refactorings and their parameters
Currently only emacs integration is offered. Add the following to your ~/.emacs using the load-path entry that matches the installation on your machine.
(add-to-load-path "~/.cabal/share/x86_64-linux-ghc-7.10.2/HaRe-0.8.2.0/elisp")
(require 'hare)
(autoload 'hare-init "hare" nil t)
Add an intializer hook to the ghc-mode command
(add-hook 'haskell-mode-hook (lambda () (ghc-init) (hare-init)))
Alternatively, if using haskell-mode, and initializing via a function
;; Haskell main editing mode key bindings.
(defun haskell-hook ()
;(lambda nil (ghc-init))
(ghc-init)
(hare-init)
...
)
If this is done correctly, there should be an additional Refactorer
menu entry when opening a haskell file. The refactorings can be
initiated via the menu, or using the keyboard shortcuts displayed in
the menu.
The installation can be fine-tuned using
M-x customize-variable
on
hare-search-paths
ghc-hare-command
Each refactoring will first ask for any information it requires, e.g. a new name if renaming, and then attempt the refactoring. If any precondition is not met this will be reported and the refactoring will abort.
If it succeeds, you will be given the option to look at an ediff session to see what changes would be made, and each file can be individually accepted or declined.
If the refactoring is commited, the original file is renamed to have a suffix containing the current timestamp.
E.g., after renaming in Foo.hs, there will be two files
Foo.hs
Foo.hs.2013-08-22T19:32:31+0200
This allows a sequence of refactorings to be undone manually if required. In theory.
See https://github.com/glittershark/vim-hare
Join in at #haskell-refactorer on freenode.
Note: (2015-10-04) HaRe cannot be tested using stack. It can be built, but the tests will fail, as HaRe makes use of ghc-mod as a library and the interaction between stack, ghc-mod and cabal-helper does not work for the tests.
To run the test suite do:
./configure.sh
cabal test
The configure.sh script simply makes sure that all the cabal projects used in
the tests are also configured.
See http://hspec.github.io/ for details on hspec
see https://travis-ci.org/#alanz/HaRe for continuous build results
Contributors: please try to follow https://github.com/tibbe/haskell-style-guide Note:A consistent coding layout style is more important than what specific on is used.
Please put a pull request for this list if you are missing.
The logo was designed by Christi du Toit, https://www.behance.net/christidutoit
Haskell
87.3%
TeX
4.5%
HTML
3.1%
Yacc
1.6%
Emacs Lisp
1.6%