# Haskell contribution layer for Spacemacs ![logo](img/haskell.png) This layer adds support for the [Haskell][] language. The layer uses company-ghc for completetion. **This layer is still not fully adapted for Spacemacs, it needs you, Haskell experts, to improve it and make it consistent with the Spacemacs experience.** ## Install To use this contribution add it to your `~/.spacemacs` ```elisp (setq-default dotspacemacs-configuration-layers '(haskell) "List of contribution to load." ) ``` This layer requires some external binaries to function. These are listed below, and can all be installed with `cabal install`: - `ghc-mod` - `hlint` - `stylish-haskell` Next Emacs needs to know of the directory of the binaries `~/.cabal/bin/` (or where ever cabal installs to by default on your system), which means that the directory has to be either added to your systems' `$PATH` or to Emacs' own `exec-path`. Only one of the options below is needed: - Add it to `$PATH`: `export PATH=~/.cabal/bin/:$PATH` Sidenote: emacs.app for OS X does not pick up `$PATH` from `~/.bashrc` or `~/.zshrc` when launched from outside a terminal. - Add it to Emacs, add the following to `.spacemacs` in `dotspacemacs/config`: `(add-to-list 'exec-path "~/.cabal/bin/")` ## Key bindings All Haskell specific bindings are prefixed with SPC m ### Haskell source code: #### Haskell commands: Top-level commands are prefixed by SPC m: Key Binding | Description ----------------------|------------------------------------------------------------ SPC m t | gets the type of the identifier under the cursor SPC m i | gets information for the identifier under the cursor SPC m u | finds uses of identifier SPC m g | go to definition or tag SPC m f | format buffer using haskell-stylish #### Documentation commands: Documentation commands are prefixed by SPC m h Key Binding | Description ----------------------|------------------------------------------------------------ SPC m h d | find or generate Haddock documentation for the identifier under the cursor SPC m h h | do a Hoogle lookup SPC m h y | do a Hayoo lookup #### Cabal commands: Cabal commands are prefixed by SPC m c: Key Binding | Description ----------------------|------------------------------------------------------------ SPC m c a | cabal actions SPC m c b | build the current cabal project, i.e. invoke `cabal build` SPC m c c | compile the current project, i.e. invoke `ghc` SPC m c v | visit the cabal file #### Debug commands: Debug commands are prefixed by SPC m d: Key Binding | Description ----------------------|------------------------------------------------------------ SPC m d d | start debug process, needs to be run first SPC m d b | insert breakpoint at function SPC m d n | next breakpoint SPC m d N | previous breakpoint SPC m d B | delete breakpoint SPC m d c | continue current process SPC m d a | abandon current process SPC m d r | refresh process buffer #### REPL commands: REPL commands are prefixed by SPC m s: Key Binding | Description ----------------------|------------------------------------------------------------ SPC m s b | load or reload the current buffer into the REPL SPC m s c | clear the REPL SPC m s s | show the REPL SPC m s S | show and switch to the REPL ### Cabal files: Key Binding | Description ----------------------|------------------------------------------------------------ SPC m d | add a dependency to the project SPC m b | go to benchmark section SPC m e | go to executable section SPC m t | go to test-suite section SPC m m | go to exposed modules SPC m l | go to libary section SPC m n | go to next subsection SPC m p | go to previous subsection SPC m N | go to next section SPC m P | go to previous section SPC m f | find or create source-file under the cursor **TODO** [Haskell]: https://www.haskell.org/