sig
  type 'a regexp =
      Vide
    | Eps
    | L of 'a
    | Conc of 'Regexp.regexp * 'Regexp.regexp
    | Union of 'Regexp.regexp * 'Regexp.regexp
    | Etoile of 'Regexp.regexp
  val epsilon : 'Regexp.regexp -> bool
  val map : ('-> 'b) -> 'Regexp.regexp -> 'Regexp.regexp
  val fold :
    ('-> '-> 'c * 'a) -> '-> 'Regexp.regexp -> 'Regexp.regexp * 'a
  val auto_r :
    ('-> '-> int) ->
    'a list -> 'Regexp.regexp -> (('a * int) option, 'a) Automate.automate
  type 'a revexp =
      RVide
    | REps
    | RL of 'a
    | RConc of 'Regexp.revexp * 'Regexp.revexp
    | RUnion of 'Regexp.revexp * 'Regexp.revexp
    | REtoile of 'Regexp.revexp
    | Rev of 'Regexp.revexp
  val rev_to_reg : ('-> 'a) -> 'Regexp.revexp -> 'Regexp.regexp
end