diff --git a/modules/lang/haskell/+dante.el b/modules/lang/haskell/+dante.el index 5c7dd96f6..dcc4b7e97 100644 --- a/modules/lang/haskell/+dante.el +++ b/modules/lang/haskell/+dante.el @@ -3,6 +3,24 @@ (def-package! dante :hook (haskell-mode . dante-mode) + :init + (setq dante-load-flags '(;; defaults: + "+c" + "-Wwarn=missing-home-modules" + "-fno-diagnostics-show-caret" + ;; neccessary to make attrap-attrap useful: + "-Wall" + ;; necessary to make company completion useful: + "-fdefer-typed-holes" + "-fdefer-type-errors")) :config (when (featurep! :feature syntax-checker) - (flycheck-add-next-checker 'haskell-dante '(warning . haskell-hlint)))) + (flycheck-add-next-checker 'haskell-dante '(warning . haskell-hlint))) + + (map! :map dante-mode-map + :localleader + :n "t" #'dante-type-at + :n "i" #'dante-info + :n "l" #'haskell-process-load-or-reload + :n "e" #'dante-eval-block + :n "a" #'attrap-attrap)) diff --git a/modules/lang/haskell/+intero.el b/modules/lang/haskell/+intero.el index 87d9ab65c..b92a20c2a 100644 --- a/modules/lang/haskell/+intero.el +++ b/modules/lang/haskell/+intero.el @@ -13,6 +13,15 @@ This is necessary because `intero-mode' doesn't do its own error checks." (message "Couldn't find stack. Refusing to enable intero-mode.")))) (add-hook 'haskell-mode-hook #'+haskell|init-intero) :config + (setq haskell-compile-cabal-build-command "stack build --fast") (set-lookup-handlers! 'intero-mode :definition #'intero-goto-definition) (when (featurep! :feature syntax-checker) - (flycheck-add-next-checker 'intero '(warning . haskell-hlint)))) + (flycheck-add-next-checker 'intero '(warning . haskell-hlint))) + + (map! :map intero-mode-map + :localleader + :n "t" #'intero-type-at + :n "i" #'intero-info + :n "l" #'intero-repl-load + :nv "e" #'intero-repl-eval-region + :n "a" #'intero-apply-suggestions)) diff --git a/modules/lang/haskell/config.el b/modules/lang/haskell/config.el index dd5b6d1b4..968299eaf 100644 --- a/modules/lang/haskell/config.el +++ b/modules/lang/haskell/config.el @@ -15,5 +15,14 @@ (set-lookup-handlers! 'haskell-mode :definition #'haskell-mode-jump-to-def-or-tag) (set-file-template! 'haskell-mode :trigger #'haskell-auto-insert-module-template :project t) (set-repl-handler! '(haskell-mode haskell-cabal-mode literate-haskell-mode) #'+haskell-repl-buffer) - (add-to-list 'completion-ignored-extensions ".hi")) + + (add-to-list 'completion-ignored-extensions ".hi") + + (map! :map haskell-mode-map + :localleader + ;; this is set to use cabal for dante users and stack for intero users: + :n "b" #'haskell-process-cabal-build + :n "c" #'haskell-cabal-visit-file + :n "p" #'hindent-reformat-buffer + :v "p" #'hindent-reformat-region)) diff --git a/modules/lang/haskell/packages.el b/modules/lang/haskell/packages.el index 5c822bd9c..c5a0e418a 100644 --- a/modules/lang/haskell/packages.el +++ b/modules/lang/haskell/packages.el @@ -5,6 +5,7 @@ (package! hindent) (cond ((featurep! +dante) - (package! dante)) + (package! dante) + (package! attrap)) ((package! intero)))