functor
  (S : sig
         type t
         type character
         val empty : Functors.t
         val is_whitespace : Functors.character -> bool
         val length : Functors.t -> int
         val find :
           ?from:int ->
           ?length:int ->
           Functors.t -> f:(Functors.character -> bool) -> int option
         val find_reverse :
           ?from:int ->
           ?length:int ->
           Functors.t -> f:(Functors.character -> bool) -> int option
         val sub_exn : Functors.t -> index:int -> length:int -> Functors.t
       end->
  sig
    val strip :
      ?on:[< `Both | `Left | `Right > `Both ] ->
      ?whitespace:(S.character -> bool) -> S.t -> S.t
  end