type 'a regexp val epsilon : 'a regexp val symbol : 'a -> 'a regexp val concat : 'a regexp -> 'a regexp -> 'a regexp val alternate : 'a regexp -> 'a regexp -> 'a regexp val repeat : 'a regexp -> 'a regexp val repeat_one : 'a regexp -> 'a regexp val concat_list : 'a regexp list -> 'a regexp val alternate_list : 'a regexp list -> 'a regexp val is_null : 'a regexp -> bool val accepts_empty : 'a regexp -> bool val after_symbol : 'a -> 'a regexp -> 'a regexp val matches : 'a regexp -> 'a list -> bool