===========================
Type variable

:language(ocaml_type)
===========================

'a

---

(type
  (type_variable))

===========================
Constructed type

:language(ocaml_type)
===========================

M(M).t M.t t

---

(type
  (constructed_type
    (constructed_type
      (type_constructor_path
        (extended_module_path
          (extended_module_path
            (module_name))
          (extended_module_path
            (module_name)))
        (type_constructor))
      (type_constructor_path
        (extended_module_path
          (module_name))
        (type_constructor)))
    (type_constructor_path
      (type_constructor))))

===========================
Polymorphic variant type

:language(ocaml_type)
===========================

[`A | `B of t]

---

(type
  (polymorphic_variant_type
    (tag_specification
      (tag))
    (tag_specification
      (tag)
      (type_constructor_path
        (type_constructor)))))

===========================
Package types

:language(ocaml_type)
===========================

(module T)

---

(type
  (package_type
    (module_type_path
      (module_type_name))))

===========================
Function type

:language(ocaml_type)
===========================

l:t -> ?l:t -> t -> t

---

(type
  (function_type
    (typed_label
      (label_name)
      (type_constructor_path
        (type_constructor)))
    (function_type
      (typed_label
        (label_name)
        (type_constructor_path
          (type_constructor)))
      (function_type
        (type_constructor_path
          (type_constructor))
        (type_constructor_path
          (type_constructor))))))

===========================
Tuple type

:language(ocaml_type)
===========================

t * t * t

---

(type
  (tuple_type
    (tuple_type
      (type_constructor_path
        (type_constructor))
      (type_constructor_path
        (type_constructor)))
    (type_constructor_path
      (type_constructor))))

===========================
Aliased type

:language(ocaml_type)
===========================

t as 't

---

(type
  (aliased_type
    (type_constructor_path
      (type_constructor))
    (type_variable)))

===========================
Parenthesized type

:language(ocaml_type)
===========================

(t)

---

(type
  (parenthesized_type
    (type_constructor_path
      (type_constructor))))
