==================
Simple bind
==================

f = do
    x ← m
    m'
---

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

==================
Pattern bind
==================

f = do
    p ← m
        where pᵢ → mᵢ
    m'
---

(source_file
    (function
        (lhs
            (atom (qid)))
        (rhs
            (expr
                (do
                    (stmt
                        (atom (qid))
                        (atom (qid))
                        (atom (qid)))
                        (do_where
                            (lambda_clause
                                (atom (qid))
                                (expr (atom (qid)))))
                    (stmt (atom (qid))))))))

==================
Non-binding statement
==================
f = do m
       m'
---

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

==================
Nested
==================
f = do
    a
    do
        c
        d
    b
---

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

==================
Let binding (Single line)
==================
f = do
    let m = m
    m'
---

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

==================
Let binding (Multiline)
==================
f = do
    let
        m = m
        b = c
    m'
---

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