Только сейчас отрефлексировал казалось бы очевидный факт

Что в OCaml match с единственным вариантом вполне имеет смысл:

  type t =
    | Name of Token.name
    | Nest of Token.name * t

  let name_of = function (Name name | Nest (name, _)) -> name


PS: Впрочем нет - не имеет;
  let name_of (Name name | Nest (name, _)) = name

Тоже работает. Век живи - век учись