`module type S = sig ... end`
`module type S1 = functor (_ : S) -> S`
`type variant =`

1. `| A`
2. `| B of int`
3. `| C`
   (*

   foo

   *)
4. `| D`
   (*

   bar

   *)
5. `| E of {`
   1. `a : int;`
   `}`

`type _ gadt =`

1. `| A : int gadt`
2. `| B : int -> string gadt`
   (*

   foo

   *)
3. `| C : {`
   1. `a : int;`
   `} -> unit gadt`

`type polymorphic_variant = [`

1. `|` ``A`
2. `|` ``B of int`
3. `|` ``C`
   (*

   foo

   *)
4. `|` ``D`
   (*

   bar

   *)

`]`
`type empty_variant = |`
`type nonrec nonrec_ = int`
`type empty_conj =`

1. `| X : [< `X of & 'a & int * float ] -> empty_conj`

`type conj =`

1. `| X : [< `X of int & [< `B of int & float ] ] -> conj`

`val empty_conj : [< `X of & 'a & int * float ]`
`val conj : [< `X of int & [< `B of int & float ] ]`
`module Z : sig ... end`
`module X : sig ... end`
`module type PolyS = sig ... end`