sig
  type ('src, 'dst) blit = ('src, 'dst) blit
  type ('src, 'dst) blito = ('src, 'dst) blito
  type ('src, 'dst) sub = ('src, 'dst) sub
  type ('src, 'dst) subo = ('src, 'dst) subo
  module type S = S
  module type S_permissions = S_permissions
  module type S1 = S1
  module type S1_permissions = S1_permissions
  module type S_distinct = S_distinct
  module Make :
    functor
      (Elt : Elt) (Sequence : sig
                                type t
                                val create : len:int -> t
                                val length : t -> int
                                val get : t -> int -> Elt.t
                                val set : t -> int -> Elt.t -> unit
                                val sexp_of_t : t -> Sexplib.Sexp.t
                                val unsafe_blit : (t, t) Blit_intf.blit
                              end->
      sig
        val blit : (Sequence.t, Sequence.t) blit
        val blito : (Sequence.t, Sequence.t) blito
        val unsafe_blit : (Sequence.t, Sequence.t) blit
        val sub : (Sequence.t, Sequence.t) sub
        val subo : (Sequence.t, Sequence.t) subo
      end
  module Make_distinct :
    functor
      (Elt : Elt) (Src : sig
                           type t
                           val create : len:int -> t
                           val length : t -> int
                           val get : t -> int -> Elt.t
                           val set : t -> int -> Elt.t -> unit
                           val sexp_of_t : t -> Sexplib.Sexp.t
                         end) (Dst : sig
                                       type t
                                       val create : len:int -> t
                                       val length : t -> int
                                       val get : t -> int -> Elt.t
                                       val set : t -> int -> Elt.t -> unit
                                       val sexp_of_t : t -> Sexplib.Sexp.t
                                       val unsafe_blit :
                                         (Src.t, t) Blit_intf.blit
                                     end->
      sig
        val blit : (Src.t, Dst.t) blit
        val blito : (Src.t, Dst.t) blito
        val unsafe_blit : (Src.t, Dst.t) blit
        val sub : (Src.t, Dst.t) sub
        val subo : (Src.t, Dst.t) subo
      end
  module Make1 :
    functor
      (Sequence : sig
                    type 'a t
                    val create_like :
                      len:int ->
                      'Blit_intf.Blit.Make1.t -> 'Blit_intf.Blit.Make1.t
                    val length : 'Blit_intf.Blit.Make1.t -> int
                    val unsafe_blit :
                      ('Blit_intf.Blit.Make1.t, 'Blit_intf.Blit.Make1.t)
                      Blit_intf.blit
                    type 'a z
                    val create_bool :
                      len:int ->
                      bool Blit_intf.Blit.Make1.z Blit_intf.Blit.Make1.t
                    val get :
                      'Blit_intf.Blit.Make1.z Blit_intf.Blit.Make1.t ->
                      int -> 'a
                    val set :
                      'Blit_intf.Blit.Make1.z Blit_intf.Blit.Make1.t ->
                      int -> '-> unit
                    val sexp_of_t :
                      ('-> Sexplib.Sexp.t) ->
                      'Blit_intf.Blit.Make1.t -> Sexplib.Sexp.t
                  end->
      sig
        val blit : ('Sequence.t, 'Sequence.t) blit
        val blito : ('Sequence.t, 'Sequence.t) blito
        val unsafe_blit : ('Sequence.t, 'Sequence.t) blit
        val sub : ('Sequence.t, 'Sequence.t) sub
        val subo : ('Sequence.t, 'Sequence.t) subo
      end
end