                              ? ))
         (shm/init)))
      ((eq 'Lambda (shm-node-cons parent))
-      (newline)
-      (indent-to (+ (shm-indent-spaces)
-                    (shm-node-start-column parent))))
+      (cond
+       ((eq shm-lambda-indent-style 'leftmost-parent)
+        (let ((leftmost-parent (cdr (shm-find-furthest-parent-on-line parent-pair))))
+          (newline)
+          (indent-to (+ (shm-indent-spaces)
+                        (shm-node-indent-column leftmost-parent)))))
+       (t (newline)
+          (indent-to (+ (shm-indent-spaces)
+                        (shm-node-start-column parent))))))
      ;; Guards | foo = …
      ((string= "GuardedRhs" (shm-node-type-name current))
       (newline)

  with it."
  (interactive)
  (if (and (looking-at "[^])}\"]") ;; This is a cheap solution. It
                                   ;; could use node boundaries
                                   ;; instead.
           (not (looking-at "$"))
           (looking-back " "))
      ;; If there's some stuff trailing us, then drag that with us.

          (indent-rigidly start
                          end
                          (+ (shm-indent-spaces)
                             (shm-node-indent-column node)))
          (delete-region start
                         (save-excursion
                           (goto-char start)
