sig   type word = [ `Atom of string | `String of string ]   type local = MrMime_msgID.word list   type domain = [ `Domain of string list | `Literal of string ]   type msg_id = MrMime_msgID.local * MrMime_msgID.domain   val pp_local : Format.formatter -> MrMime_msgID.local -> unit   val pp_domain : Format.formatter -> MrMime_msgID.domain -> unit   val pp : Format.formatter -> MrMime_msgID.msg_id -> unit   module Encoder :     sig       val w_left :         (MrMime_msgID.local,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_right :         (MrMime_msgID.domain,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_msg_id :         (MrMime_msgID.msg_id,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1     end   module Decoder : sig val p_msg_id : MrMime_msgID.msg_id MrMime_parser.t end   val of_string : ?chunk:int -> string -> MrMime_msgID.msg_id option   val of_string_raw :     ?chunk:int -> string -> int -> int -> (MrMime_msgID.msg_id * int) option end