Function: haskell-forward-sexp
haskell-forward-sexp is an interactive and natively compiled function
defined in haskell-mode.el.
Signature
(haskell-forward-sexp &optional ARG)
Documentation
Haskell specific version of forward-sexp.
Move forward across one balanced expression (sexp). With ARG, do it that many times. Negative arg -N means move backward across N balanced expressions. This command assumes point is not in a string or comment.
If unable to move over a sexp, signal scan-error with three
arguments: a message, the start of the obstacle (a parenthesis or
list marker of some kind), and end of the obstacle.
Key Bindings
This command is not in any keymaps.
Source Code
;; Defined in /nix/store/9lz2mhw95f9fqxr9mnq46k3f6qz3aq83-emacs-packages-deps/share/emacs/site-lisp/elpa/haskell-mode-20260904.1042/haskell-mode.el
;; (defun haskell-adaptive-fill ()
;; ;; We want to use "-- " as the prefix of "-- |", etc.
;; (let* ((line-end (save-excursion (end-of-line) (point)))
;; (line-start (point)))
;; (save-excursion
;; (unless (in-comment)
;; ;; Try to find the start of a comment. We only fill comments.
;; (search-forward-regexp comment-start-skip line-end t))
;; (when (in-comment)
;; (let ();(prefix-start (point)))
;; (skip-syntax-forward "^w")
;; (make-string (- (point) line-start) ?\s))))))
;;;###autoload
(defun haskell-forward-sexp (&optional arg)
"Haskell specific version of `forward-sexp'.
Move forward across one balanced expression (sexp). With ARG, do
it that many times. Negative arg -N means move backward across N
balanced expressions. This command assumes point is not in a
string or comment.
If unable to move over a sexp, signal `scan-error' with three
arguments: a message, the start of the obstacle (a parenthesis or
list marker of some kind), and end of the obstacle."
(interactive "^p")
(or arg (setq arg 1))
(if (< arg 0)
(while (< arg 0)
(skip-syntax-backward "->")
;; Navigate backwards using plain `backward-sexp', assume that it
;; skipped over at least one Haskell expression, and jump forward until
;; last possible point before the starting position. If applicable,
;; `scan-error' is signalled by `backward-sexp'.
(let ((end (point))
(forward-sexp-function nil))
(backward-sexp)
(let ((cur (point)))
(while (< (point) end)
(setf cur (point))
(haskell-forward-sexp)
(skip-syntax-forward "->"))
(goto-char cur)))
(setf arg (1+ arg)))
(save-match-data
(while (> arg 0)
(when (haskell-lexeme-looking-at-token)
(cond ((member (match-string 0) (list "(" "[" "{"))
(goto-char (or (scan-sexps (point) 1) (buffer-end 1))))
((member (match-string 0) (list ")" "]" "}"))
(signal 'scan-error (list "Containing expression ends prematurely."
(match-beginning 0)
(match-end 0))))
(t (goto-char (match-end 0)))))
(setf arg (1- arg))))))