        (lambda ()
          (insert newline-string)))))
    ;; Otherwise just do the indent.
-   (t (shm-newline-indent nil))))
+   (t (shm/reparse)
+      (shm-newline-indent nil)))
+  (shm/reparse))
 
 (defun shm/goto-where ()
   "Either make or go to a where clause of the current right-hand-side."

             (save-excursion
               (shm/goto-parent)
               (forward-sexp)
               (1+ (current-column)))))
        (cond

         ((and (or (= column (current-column))
                   (= column (+ (shm-node-start-column parent)
                                (shm-indent-spaces))))

  (let* ((parent-pair (shm-node-parent current-pair))
         (parent (cdr parent-pair))
         (current (cdr current-pair)))
    (if parent
        (if (and (= (shm-node-start current)
                    (shm-node-start parent))
                 (= (shm-node-end current)
                    (shm-node-end parent)))
            (if (string= (shm-node-type current) (shm-node-type parent))
                current-pair
              (shm-workable-node parent-pair))
          current-pair)
      current-pair)))

(defun shm-node-previous (node-pair)
  "Get the previous node of NODE-PAIR."
