==================
Simple line (indent and dedent)
==================

f x = let
        y = x
      in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr
                (let
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr
                                (atom (qid)))))
                    (expr (atom (qid))))))))

==================
Simple line (indent only)
==================

f x = let
        y = x in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr
                (let
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr
                                (atom (qid)))))
                    (expr (atom (qid))))))))

==================
Simple line (dedent only)
==================

f x = let y = x
        in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr
                (let
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr
                                (atom (qid)))))
                    (expr (atom (qid))))))))

==================
Single line (on the same line)
==================

f x = let y = x in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr
                (let
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr
                                (atom (qid)))))
                    (expr (atom (qid))))))))

==================
Single line (dangling tail)
==================

f x = let y = x in
    y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr
                (let
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr
                                (atom (qid)))))
                    (expr (atom (qid))))))))


==================
Multiline (indent and dedent)
==================

f x = let
          y = x
          y = x
      in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr (let
                (function
                    (lhs
                        (atom (qid)))
                    (rhs
                        (expr (atom (qid)))))
                (function
                    (lhs
                        (atom (qid)))
                    (rhs
                        (expr (atom (qid)))))
                (expr (atom (qid))))))))

==================
Multiline (indent only)
==================

f x = let
          y = x
          y = x in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr (let
                (function
                    (lhs
                        (atom (qid)))
                    (rhs
                        (expr (atom (qid)))))
                (function
                    (lhs
                        (atom (qid)))
                    (rhs
                        (expr (atom (qid)))))
                (expr (atom (qid))))))))

==================
Multiline (dedent only)
==================

f x = let y = x
          y = x
      in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr (let
                (function
                    (lhs
                        (atom (qid)))
                    (rhs
                        (expr (atom (qid)))))
                (function
                    (lhs
                        (atom (qid)))
                    (rhs
                        (expr (atom (qid)))))
                (expr (atom (qid))))))))

==================
Multiline (dangling tail)
==================

f x = let y = x
          y = x in
    y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr (let
                (function
                    (lhs
                        (atom (qid)))
                    (rhs
                        (expr (atom (qid)))))
                (function
                    (lhs
                        (atom (qid)))
                    (rhs
                        (expr (atom (qid)))))
                (expr (atom (qid))))))))


==================
Telescope single line I
==================

f x = let y = x in let y = x in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr
                (let
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr (atom (qid)))))
                    (expr
                        (let
                            (function
                                (lhs
                                    (atom (qid)))
                                (rhs
                                    (expr (atom (qid)))))
                            (expr (atom (qid))))))))))

==================
Telescope single line II
==================

f x = let y = x in
        let y = x in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr
                (let
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr (atom (qid)))))
                    (expr
                        (let
                            (function
                                (lhs
                                    (atom (qid)))
                                (rhs
                                    (expr (atom (qid)))))
                            (expr (atom (qid))))))))))

==================
Telescope multi line I
==================

f x = let y = x
          y = x in
     let y = x in y

---

(source_file
    (function
        (lhs
            (atom (qid))
            (atom (qid)))
        (rhs
            (expr
                (let
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr (atom (qid)))))
                    (function
                        (lhs
                            (atom (qid)))
                        (rhs
                            (expr (atom (qid)))))
                    (expr
                        (let
                            (function
                                (lhs
                                    (atom (qid)))
                                (rhs
                                    (expr (atom (qid)))))
                            (expr (atom (qid))))))))))
==================
Single line without body
==================

f x = do
  let y = x

---

(source_file
  (function
    (lhs
      (atom (qid))
      (atom (qid)))
    (rhs
      (expr
        (do
          (stmt
            (let
              (function
                (lhs
                  (atom (qid)))
                (rhs
                    (expr
                      (atom (qid))))))))))))

==================
Single line without body (indent)
==================

f x = do
  let
    y = x

---

(source_file
  (function
    (lhs
      (atom (qid))
      (atom (qid)))
    (rhs
      (expr
        (do
          (stmt
            (let
              (function
                (lhs
                  (atom (qid)))
                (rhs
                    (expr
                      (atom (qid))))))))))))

==================
Multiline without body
==================

f x = do let y = x
             y = x

---

(source_file
  (function
    (lhs
      (atom (qid))
      (atom (qid)))
    (rhs
      (expr
        (do
          (stmt
            (let
              (function
                  (lhs
                      (atom (qid)))
                  (rhs
                      (expr
                          (atom (qid)))))
              (function
                (lhs
                  (atom (qid)))
                (rhs
                    (expr
                      (atom (qid))))))))))))

==================
Multiline without body (indent)
==================

f x = do
        let
          y = x
          y = x

---

(source_file
  (function
    (lhs
      (atom (qid))
      (atom (qid)))
    (rhs
      (expr
        (do
          (stmt
            (let
              (function
                  (lhs
                      (atom (qid)))
                  (rhs
                      (expr
                          (atom (qid)))))
              (function
                (lhs
                  (atom (qid)))
                (rhs
                    (expr
                      (atom (qid))))))))))))
