doomemacs/modules/lang/haskell
Henrik Lissner a79275a476 Bump :lang
200ok-ch/counsel-jq@f5bfed8 -> 200ok-ch/counsel-jq@153d70b
Andersbakken/rtags@63a7d9b -> Andersbakken/rtags@aa4c827
MatthewFluet/company-mlton@b87e363 -> MatthewFluet/company-mlton@9b09d20
NixOS/nix-mode@e32c6bf -> NixOS/nix-mode@0023fc5
OmniSharp/omnisharp-emacs@e26ff8b -> OmniSharp/omnisharp-emacs@8ec5929
ProofGeneral/PG@702f5b9 -> ProofGeneral/PG@bdb6782
Wilfred/elisp-def@da1f763 -> Wilfred/elisp-def@dfca043
agda/agda@5070bd8 -> agda/agda@9d08edb
ananthakumaran/exunit.el@c77b039 -> ananthakumaran/exunit.el@5bb115f
ananthakumaran/tide@a43a37b -> ananthakumaran/tide@7f7334b
asok/projectile-rails@7a256b1 -> asok/projectile-rails@8d6b373
brotzeit/rustic@f7d5ac0 -> brotzeit/rustic@61d600e
clojure-emacs/cider@1a34f89 -> clojure-emacs/cider@815204f
clojure-emacs/clj-refactor.el@9dcc50d -> clojure-emacs/clj-refactor.el@b24ce76
clojure-emacs/clojure-mode@53ef8ac -> clojure-emacs/clojure-mode@f26379b
crystal-lang-tools/emacs-crystal-mode@f9e4db1 -> crystal-lang-tools/emacs-crystal-mode@1599814
cython/cython@17e03b8 -> cython/cython@9a761a6
dgutov/robe@f04dcc7 -> dgutov/robe@3ef165c
diml/utop@7bc5117) -> diml/utop@a5ff52b)
dominikh/go-mode.el@fdf46fe -> dominikh/go-mode.el@49a5380
elixir-editors/emacs-elixir@b78e7f7 -> elixir-editors/emacs-elixir@9de08c1
emacs-csharp/csharp-mode@4916829 -> emacs-csharp/csharp-mode@09b4d57
emacs-ess/ESS@d013616 -> emacs-ess/ESS@5169b0d
emacs-lsp/lsp-dart@b81b1ec -> emacs-lsp/lsp-dart@71902ca
emacs-lsp/lsp-haskell@4d85cb3 -> emacs-lsp/lsp-haskell@7efbef3
emacs-lsp/lsp-java@f43b00a -> emacs-lsp/lsp-java@5f6d357
emacs-lsp/lsp-metals@31dafff -> emacs-lsp/lsp-metals@c76eeb6
emacs-lsp/lsp-pyright@71ff088 -> emacs-lsp/lsp-pyright@65fb141
emacs-lsp/lsp-python-ms@5470ada -> emacs-lsp/lsp-python-ms@689f6cf
emacs-lsp/lsp-sourcekit@948c3a3 -> emacs-lsp/lsp-sourcekit@ff204ed
emacs-php/php-mode@7e5722c -> emacs-php/php-mode@8cdc727
emacs-straight/auctex@fb062a3 -> emacs-straight/auctex@384c4b9
emacs-straight/csv-mode@eb3ec00 -> emacs-straight/csv-mode@8da54e8
emacs-straight/org-mode@9e98e9a -> emacs-straight/org-mode@0b117f7
emacs-typescript/typescript.el@54f14c4 -> emacs-typescript/typescript.el@1043025
emacsmirror/cmake-mode@e58c411 -> emacsmirror/cmake-mode@d5d77de
ericdallo/hover.el@3f07a18 -> ericdallo/hover.el@c9c0593
erlang/otp@8fc0641 -> erlang/otp@af06b43
eschulte/jump.el@e4f1372 -> eschulte/jump.el@55caa66
ethereum/emacs-solidity@d166a86 -> ethereum/emacs-solidity@b4fd719
factor/factor@94a922a -> factor/factor@1928e60
fsharp/emacs-fsharp-mode@13fbf4c -> fsharp/emacs-fsharp-mode@78898a1
fxbois/web-mode@890e837 -> fxbois/web-mode@8ef4793
godotengine/emacs-gdscript-mode@75fe658 -> godotengine/emacs-gdscript-mode@16c631c
greghendershott/racket-mode@3563081 -> greghendershott/racket-mode@75ea8f6
haskell/haskell-mode@0d39c84 -> haskell/haskell-mode@3a019e6
hhvm/hack-mode@9079bc3) -> hhvm/hack-mode@847fd91)
hvesalai/emacs-scala-mode@9d3b56e -> hvesalai/emacs-scala-mode@402d6df
idris-hackers/idris-mode@b77eadd -> idris-hackers/idris-mode@80aabd2
immerrr/lua-mode@d2ff304 -> immerrr/lua-mode@2d9a468
iyefrat/evil-tex@ac313ef -> iyefrat/evil-tex@5f0d6fb
jaor/geiser@cd00be6 -> jaor/geiser@26dd2f4
jcollard/elm-mode@363da4b -> jcollard/elm-mode@188b9c7
joaotavora/sly@3278819 -> joaotavora/sly@fb84318
jorgenschaefer/emacs-buttercup@2f24a44 -> jorgenschaefer/emacs-buttercup@1de6be4
jrblevin/markdown-mode@dcad557 -> jrblevin/markdown-mode@0517340
jwiegley/emacs-async@14f48de -> jwiegley/emacs-async@d7e7f79
jyp/attrap@9c88154 -> jyp/attrap@778382e
jyp/dante@e2acbf6 -> jyp/dante@7b1ab64
kaushalmodi/ox-hugo@04f41ca -> kaushalmodi/ox-hugo@a05667e
leanprover/lean-mode@cc1f5fa -> leanprover/lean-mode@15bee87
ledger/ledger-mode@805507f -> ledger/ledger-mode@3495d12
mooz/js2-mode@f7816bd -> mooz/js2-mode@29979e5
nonsequitur/inf-ruby@b012457 -> nonsequitur/inf-ruby@1fc972e
ocaml-ppx/ocamlformat@860266b -> ocaml-ppx/ocamlformat@7db8d13
ocaml/dune@4d097cd -> ocaml/dune@f839fc1
ocaml/merlin@28193d5 -> ocaml/merlin@36d0aef
pezra/rspec-mode@f1029ca -> pezra/rspec-mode@92ef785
polymode/poly-R@51ffeb6 -> polymode/poly-R@c42ff3a
polymode/polymode@3284ff1 -> polymode/polymode@b3871e9
purescript-emacs/psc-ide-emacs@663f4e2 -> purescript-emacs/psc-ide-emacs@ce97d71
purescript-emacs/purescript-mode@154ad16 -> purescript-emacs/purescript-mode@8410baf
pwalsh/pipenv.el@f516a1a -> pwalsh/pipenv.el@8f50c68
pythonic-emacs/anaconda-mode@b1875a5 -> pythonic-emacs/anaconda-mode@081f9d8
racer-rust/emacs-racer@a0bdf77 -> racer-rust/emacs-racer@f17f9d7
rubocop-hq/rubocop-emacs@03bf155 -> rubocop-hq/rubocop-emacs@1372ee3
seagle0128/grip-mode@91da46f -> seagle0128/grip-mode@1aebf9c
senny/rvm.el@b2498a4 -> senny/rvm.el@c1f2642
swift-emacs/swift-mode@0bc8d8d -> swift-emacs/swift-mode@95ff004
takaxp/org-tree-slide@04b5a9d -> takaxp/org-tree-slide@c9487e5
technomancy/fennel-mode@fa56106 -> technomancy/fennel-mode@bebc9dd
tpapp/julia-repl@d073acb -> tpapp/julia-repl@7ce38a9
wbolster/emacs-python-pytest@3fadf1f -> wbolster/emacs-python-pytest@31ae5e0
wwwjfy/emacs-fish@db257db -> wwwjfy/emacs-fish@a7c953b

Fix #4695
Close #4529
Close #4576
2021-02-25 10:46:46 -05:00
..
+dante.el Merge pull request #2685 from kenranunderscore/change-obsolete-binding 2020-03-09 14:04:25 -04:00
+lsp.el Bump :lang haskell 2020-10-05 20:56:34 +08:00
autoload.el lang/haskell: remove intero support 2020-04-14 19:27:33 -04:00
config.el Remap haskell-mode-jump-to-def-or-tag to +lookup/definition 2020-05-12 20:07:11 -04:00
doctor.el lang/haskell: remove intero support 2020-04-14 19:27:33 -04:00
packages.el Bump :lang 2021-02-25 10:46:46 -05:00
README.org Bump :lang haskell 2020-10-05 20:56:34 +08:00

lang/haskell

Description

This module adds Haskell support, powered by either dante (the default) or LSP (haskell-language-server or ghcide).

  • Code completion (company-ghc)
  • Look up documentation (hoogle)
  • eldoc support (dante)
  • REPL (ghci)
  • Syntax-checking (flycheck)
  • Code navigation (dante)
  • Snippets

External resources

Here are a few resources I've found indispensable in my Haskell adventures:

Module Flags

  • +dante Enables dante; a fork of intero aimed at lightweightedness. It doesn't depend on stack, supports both cabal-only and stack projects, but lacks eldoc support.
  • +ghcide Enables LSP support with ghcide (requires the :tools lsp module).
  • +lsp Enables LSP support with haskell-language-server (requires the :tools lsp module).

Plugins

Prerequisites

Depending on whether you use Dante, haskell-language-server or ghcide, your dependencies will differ:

  • Dante users need cabal, ghc and ghc-mod
  • LSP users need the haskell-language-server LSP server OR ghcide
  • All users will need the hoogle package

Cabal

To use Dante, you need cabal (the haskell package builder) and ghci (the compiler, syntax checker & repl):

MacOS

brew install cabal-install ghc

Arch Linux

sudo pacman -S cabal-install ghc

openSUSE

sudo zypper install cabal-install ghc

LSP (haskell-language-server)

You will need stack and git installed.

You will find a comprehensive instructions for haskell-language-server on its project page, but if you are using ghcup:

ghcup install hls

LSP (ghcide)

See https://github.com/digital-asset/ghcide for install instructions.

Stack

To use LSP, you need stack:

MacOS

brew install haskell-stack
stack setup

Arch Linux

sudo pacman -S stack
# Replace pacaur with your AUR package manager of choice
pacaur -S ncurses5-compat-lib
stack setup

openSUSE

sudo zypper install stack
stack setup

Haskell packages

You'll need to install the following packages using stack or cabal:

  • (Dante users) ghc-mod

    stack install ghc-mod
    # or
    cabal install ghc-mod
  • hoogle

    cabal update
    cabal install happy haskell-src-exts   # ghc-mod/hoogle dependencies
    cabal ghc-mod hoogle
    # or
    stack install ghc-mod
    stack install hoogle

And ensure the binaries for these packages are in your PATH, e.g.

# place this in your profile file, like ~/.bash_profile or ~/.zshenv
export PATH="~/.local/bin:$PATH"

Configuration

Using the new-style cabal REPL

haskell-mode will typically detect what REPL to run based on your project (e.g. stack, (old-style) cabal or ghc). If you want the new-style cabal REPL you must set haskell-process-type manually:

(setq haskell-process-type 'cabal-new-repl)

Troubleshooting