==================
Body only
==================

id = a

---

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

==================
Body with type signature
==================

id : A -> A -> A
id A a = a

---

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

==================
Body with where clause
==================

id = a
  where a = b

---

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

==================
Typed bindings
==================

f : (A : Set) (B : Set) (C : Set) -> A
g : (A B _ ? : Set) -> A

---

(source_file
    (function
        (lhs (function_name (atom (qid))))
        (rhs
            (expr
            (typed_binding (atom (qid)) (expr (atom (SetN))))
            (typed_binding (atom (qid)) (expr (atom (SetN))))
            (typed_binding (atom (qid)) (expr (atom (SetN))))
            (expr (atom (qid))))))
    (function
        (lhs (function_name (atom (qid))))
        (rhs
            (expr
            (typed_binding
                (atom (qid))
                (atom (qid))
                (atom)
                (atom (qid))
                (expr (atom (SetN))))
            (expr (atom (qid)))))))

==================
type signature with forall bindings
==================

f : forall {A B C} -> A -> A
g : {A : Set} -> A

---

(source_file
    (function
        (lhs (function_name (atom (qid))))
        (rhs
            (expr (forall
                (untyped_binding
                  (atom (qid))
                  (atom (qid))
                  (atom (qid)))
                (expr (atom (qid))
                (expr (atom (qid))))))))
    (function
        (lhs (function_name (atom (qid))))
        (rhs
            (expr (typed_binding (atom (qid)) (expr (atom (SetN))))
            (expr (atom (qid)))))))

==================
With-expressions
==================

f a with g a
... | b = _

---

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

==================
Idiom brackets
==================

x : _
x = (| if a then b else c |)

---

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


==================
Idiom brackets (Unicode)
==================

x : _
x = ⦇ if a then b else c ⦈

---

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