functor (R : RegexpType->   sig     val scan :       ?pat:string ->       ?rex:R.regexp -> (string -> '-> 'a) -> '-> string -> 'a     val sub :       ?pat:string ->       ?rex:R.regexp -> (int -> string -> string) -> string -> string   end