sig   type word = [ `Atom of string | `String of string ]   type local = MrMime_address.word list   type raw =     Rfc2047.raw =       QuotedPrintable of string     | Base64 of MrMime_base64.Decoder.result   type literal_domain = Rfc5321.literal_domain = ..   type literal_domain += IPv4 of Ipaddr.V4.t   type literal_domain += IPv6 of Ipaddr.V6.t   type phrase =       [ `Dot       | `Encoded of string * MrMime_address.raw       | `Word of MrMime_address.word ] list   type domain =       [ `Domain of string list | `Literal of MrMime_address.literal_domain ]   type mailbox =     Rfc5322.mailbox = {     name : MrMime_address.phrase option;     local : MrMime_address.local;     domain : MrMime_address.domain * MrMime_address.domain list;   }   type group =     Rfc5322.group = {     name : MrMime_address.phrase;     mailbox : MrMime_address.mailbox list;   }   type address =       [ `Group of MrMime_address.group | `Mailbox of MrMime_address.mailbox ]   val pp_word : Format.formatter -> MrMime_address.word -> unit   val pp_domain : Format.formatter -> MrMime_address.domain -> unit   val pp_phrase : Format.formatter -> MrMime_address.phrase -> unit   val pp_local : Format.formatter -> MrMime_address.local -> unit   val pp_mailbox' :     Format.formatter ->     MrMime_address.local *     (MrMime_address.domain * MrMime_address.domain list) -> unit   val pp_mailbox : Format.formatter -> MrMime_address.mailbox -> unit   val pp_group : Format.formatter -> MrMime_address.group -> unit   val pp : Format.formatter -> MrMime_address.address -> unit   module Encoder :     sig       val w_word :         (MrMime_address.word,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_domain :         (MrMime_address.domain,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_safe_string :         (string,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_raw :         (MrMime_address.raw,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_phrase :         (MrMime_address.phrase,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_local :         (MrMime_address.local,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_mailbox' :         (MrMime_address.local *          (MrMime_address.domain * MrMime_address.domain list),          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_mailbox :         (MrMime_address.mailbox,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_group :         (MrMime_address.group,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_address :         (MrMime_address.address,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1       val w_addresses :         (MrMime_address.address list,          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial)         Wrap.k1     end   module Decoder :     sig       val p_address : MrMime_address.address MrMime_parser.t       val p_addresses : MrMime_address.address list MrMime_parser.t       val p_local : MrMime_address.local MrMime_parser.t       val p_domain : MrMime_address.domain MrMime_parser.t     end   val to_string : MrMime_address.address -> string   val of_string : ?chunk:int -> string -> MrMime_address.address option   val of_string_raw :     ?chunk:int ->     string -> int -> int -> (MrMime_address.address * int) option   val equal : MrMime_address.address -> MrMime_address.address -> bool   module List :     sig       val pp : Format.formatter -> MrMime_address.address list -> unit       val to_string : MrMime_address.address list -> string       val of_string :         ?chunk:int -> string -> MrMime_address.address list option       val of_string_raw :         ?chunk:int ->         string -> int -> int -> (MrMime_address.address list * int) option       val equal :         MrMime_address.address list -> MrMime_address.address list -> bool     end   module Make :     sig       type z = Z       type 'a s = S       type 'a word       type ('data, 'peano) llist       val word : string -> [ `Atom | `String ] MrMime_address.Make.word       val atom : string -> [> `Atom ] MrMime_address.Make.word       val e :         ([> `Atom ] MrMime_address.Make.word, MrMime_address.Make.z)         MrMime_address.Make.llist       val ( & ) :         'MrMime_address.Make.word ->         ('MrMime_address.Make.word, 'x) MrMime_address.Make.llist ->         ('MrMime_address.Make.word, 'MrMime_address.Make.s)         MrMime_address.Make.llist       val ( @ ) :         ([ `Atom | `String ] MrMime_address.Make.word,          'MrMime_address.Make.s)         MrMime_address.Make.llist ->         ([ `Atom ] MrMime_address.Make.word, 'MrMime_address.Make.s)         MrMime_address.Make.llist -> MrMime_address.mailbox     end   module Extension :     sig       val add_literal_domain :         string -> MrMime_address.literal_domain MrMime_parser.t -> unit     end end