sig
  type t = (string * int * int) list
  val normalize : Cf_message.t -> Cf_message.t
  val create : string -> Cf_message.t
  val length : Cf_message.t -> int
  val contents : Cf_message.t -> string
  val copy : Cf_message.t -> Cf_message.t
  val flatten : Cf_message.t -> Cf_message.t
  val split : pos:int -> Cf_message.t -> Cf_message.t * Cf_message.t
  val truncate : pos:int -> Cf_message.t -> Cf_message.t
  val shift : pos:int -> Cf_message.t -> Cf_message.t
  val insert : pos:int -> m:Cf_message.t -> Cf_message.t -> Cf_message.t
  val to_seq : Cf_message.t -> char Cf_seq.t
  val to_seq2 : Cf_message.t -> (char * Cf_message.t) Cf_seq.t
  val unsafe_shift1 : Cf_message.t -> Cf_message.t
  val unsafe_to_seq : Cf_message.t -> char Cf_seq.t
  val unsafe_to_seq2 : Cf_message.t -> (char * Cf_message.t) Cf_seq.t
end