Standard type for blit functions, and reusable code for validating blit
arguments.
type ('src, 'dst) blit = src:'src ‑> src_pos:int ‑> dst:'dst ‑> dst_pos:int ‑> len:int ‑> unitIf blit : (src, dst) blit, then blit ~src ~src_pos ~len ~dst ~dst_pos blits len
values from src starting at position src_pos to dst at position dst_pos.
Furthermore, blit raises if src_pos, len, and dst_pos don't specify valid
slices of src and dst.
type ('src, 'dst) blito = src:'src ‑> ?src_pos:int ‑> ?src_len:int ‑> dst:'dst ‑> ?dst_pos:int ‑> unit ‑> unitblito is like blit, except that the src_pos, src_len, and dst_pos are
optional (hence the "o" in "blito"). Also, we use src_len rather than len as a
reminder that if src_len isn't supplied, then the default is to take the slice
running from src_pos to the end of src.
type ('src, 'dst) sub = 'src ‑> pos:int ‑> len:int ‑> 'dstIf sub : (src, dst) sub, then sub ~src ~pos ~len returns a sequence of type dst
containing len characters of src starting at pos.
subo is like sub, except pos and len are optional.
module type S : sig ... endmodule type S1 : sig ... endmodule type S_distinct : sig ... endUsers of modules matching the blit signatures S, S1, and S1_distinct only need
to understand the code above. The code below is only for those that need to implement
modules that match those signatures.
module type Sequence : sig ... endmodule type Sequence1 : sig ... endmodule type Blit : sig ... end