functor   (A : sig          type t          type character          val empty : Functors.t          val length : Functors.t -> int          val sub_exn : Functors.t -> index:int -> length:int -> Functors.t        end->   sig     val split_at : A.t -> index:int -> A.t * A.t     val take : A.t -> index:int -> A.t     val drop : A.t -> index:int -> A.t   end