Function: tuareg-smie--monadic-rule
tuareg-smie--monadic-rule is a natively compiled function defined in
tuareg.el.
Signature
(tuareg-smie--monadic-rule TOKEN)
Source Code
;; Defined in /nix/store/6mbh851dhnag8f92qfrlh9ckldzwf6c6-emacs-packages-deps/share/emacs/site-lisp/elpa/tuareg-20260626.936/tuareg.el
(defun tuareg-smie--monadic-rule (token)
;; When trying to indent a >>=, try to look back to find any earlier
;; >>= in a sequence of "monadic steps".
(or (and (equal token ">…") (looking-at tuareg-smie--monadic-op-re)
(save-excursion
(tuareg-smie--forward-token)
(let ((indent nil))
(while
(let ((parent-data (smie-backward-sexp 'halfsexp)))
(cond
((car parent-data) (member (nth 2 parent-data) '("->")))
((member (nth 2 parent-data) '(";" "d=")) nil)
((member (nth 2 parent-data) '("fun" "function"))
(if (member (tuareg-smie--backward-token)
tuareg-smie--monadic-operators)
(progn
(setq indent (cons 'column
(smie-indent-virtual)))
nil)
t)))))
indent)))
;; In "foo >>= fun x -> bar" indent `bar' relative to `foo'.
(and (member token '("fun" "function")) (not (smie-rule-bolp))
(save-excursion
(let ((prev (tuareg-smie-backward-token)))
;; FIXME: Should we use the same loop as above?
(and (equal prev ">…") (looking-at tuareg-smie--monadic-op-re)
(progn (smie-backward-sexp prev)
(cons 'column (current-column)))))))))