HOME

Haskell Mode

Hooks

(require-package 'haskell-mode)
(autoload 'haskell-mode "haskell-mode")
(setq haskell-program-name "/usr/bin/ghci")

(eval-after-load 'haskell-mode
  '(require-package 'smartparens))

(eval-after-load "haskell-cabal"
  '(define-key haskell-cabal-mode-map (kbd "C-c C-c") 'haskell-compile))

(defun toby/haskell-init ()
  (turn-on-haskell-doc-mode)
  (turn-on-haskell-indentation)

  (require 'smartparens-config)
  (smartparens-strict-mode)
  (show-smartparens-mode t)

  (define-key haskell-mode-map (kbd "s-r")   'inferior-haskell-load-and-run)
  (define-key haskell-mode-map (kbd "C-c l") 'inferior-haskell-load-and-run)
  (define-key haskell-mode-map (kbd "C-;")   'insert-arrow)
  (define-key haskell-mode-map (kbd "C-:")   'insert-rocket)
  (define-key haskell-mode-map (kbd "C-=")   'insert-larrow)

  (define-key haskell-mode-map (kbd "C-,")     'haskell-move-nested-left)
  (define-key haskell-mode-map (kbd "C-.")     'haskell-move-nested-right)

  (define-key haskell-mode-map (kbd "C-c C-c") 'haskell-compile)

  (define-key haskell-mode-map (kbd "C-h h")   'hoogle)

  (define-key haskell-mode-map (kbd "C-x C-d") nil)
  (define-key haskell-mode-map (kbd "C-c C-z") 'haskell-interactive-switch)
  (define-key haskell-mode-map (kbd "C-c C-l") 'haskell-process-load-file)
  (define-key haskell-mode-map (kbd "C-c C-b") 'haskell-interactive-switch)
  (define-key haskell-mode-map (kbd "C-c C-t") 'haskell-process-do-type)
  (define-key haskell-mode-map (kbd "C-c C-i") 'haskell-process-do-info)
  (define-key haskell-mode-map (kbd "C-c M-.") nil)
  (define-key haskell-mode-map (kbd "C-c C-d") nil))

(add-hook 'haskell-mode-hook 'toby/haskell-init)

Text Functions

(defun insert-arrow ()
  "Insert a single arrow (Haskell syntax)"
  (interactive)
  (delete-horizontal-space)
  (insert " -> "))

(defun insert-larrow ()
  "Insert <- arrow (Haskell monad return)"
  (interactive)
  (delete-horizontal-space)
  (insert " <- "))
(provide 'haskell-init)

Author: Toby Tripp

Created: 2018-03-04 Sun 00:38

Validate