module type Blit =sig..end
include ??
include ??
include ??
include ??
module type S = Blit_intf.Smodule type S1 = Blit_intf.S1module type S_distinct = Blit_intf.S_distinctMake* functors that turn an unsafe_blit function into a blit
      function.  The functors differ in whether the sequence type is monomorphic or
      polymorphic, and whether the src and dst types are distinct or are the same.
      The blit functions make sure the slices are valid and then call unsafe_blit.  They
      guarantee at a call unsafe_blit ~src ~src_pos ~dst ~dst_pos ~len that:
        len > 0
        && src_pos >= 0
        && src_pos + len <= get_src_len src
        && dst_pos >= 0
        && dst_pos + len <= get_dst_len dst
      
      The Make* functors also automatically create unit tests.
module Make:functor (Elt:Blit_intf.Elt) ->functor (Sequence:siginclude Blit_intf.Sequenceval unsafe_blit :(t, t) Blit_intf.blitend) ->Swith type t := Sequence.t
Make is for blitting between two values of the same monomorphic type.
module Make_distinct:functor (Elt:Blit_intf.Elt) ->functor (Src:Blit_intf.Sequencewith type elt := Elt.t) ->functor (Dst:siginclude Blit_intf.Sequenceval unsafe_blit :(Src.t, t) Blit_intf.blitend) ->S_distinctwith type src := Src.twith type dst := Dst.t
Make_distinct is for blitting between values of disinct monomorphic types.
module Make1:functor (Sequence:sigtype'atMake1guarantees to only callcreate_like ~len twithlen > 0iflength t > 0.
val create_like :len:int -> 'a t -> 'a tval length :'a t -> intval unsafe_blit :('a t, 'a t) Blit_intf.blittype'azval create_bool :len:int -> bool z tval get :'a z t -> int -> 'aval set :'a z t -> int -> 'a -> unitval sexp_of_t :('a -> Sexplib.Sexp.t) -> 'a t -> Sexplib.Sexp.tMake1guarantees to only callcreate_like ~len twithlen > 0iflength t > 0.
end) ->S1with type 'a t := 'a Sequence.t
Make1 is for blitting between two values of the same polymorphic type.