sig   type local = Rfc822.local   type domain = Rfc5322.domain   type word = Rfc822.word   type field = Rfc5322.trace   type received =       [ `Addr of local * (domain * domain list)       | `Domain of domain       | `Word of word ]   type trace = {     trace : (local * (domain * domain list)) option;     received : (received list * MrMime_date.date option) list;   }   module Address :     sig       type word = [ `Atom of string | `String of string ]       type local = 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 * raw | `Word of word ] list       type domain = [ `Domain of string list | `Literal of literal_domain ]       type mailbox =         Rfc5322.mailbox = {         name : phrase option;         local : local;         domain : domain * domain list;       }       type group = Rfc5322.group = { name : phrase; mailbox : mailbox list; }       type address = [ `Group of group | `Mailbox of mailbox ]       val pp_word : Format.formatter -> word -> unit       val pp_domain : Format.formatter -> domain -> unit       val pp_phrase : Format.formatter -> phrase -> unit       val pp_local : Format.formatter -> local -> unit       val pp_mailbox' :         Format.formatter -> local * (domain * domain list) -> unit       val pp_mailbox : Format.formatter -> mailbox -> unit       val pp_group : Format.formatter -> group -> unit       val pp : Format.formatter -> 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 : address -> string       val of_string : ?chunk:int -> string -> address option       val of_string_raw :         ?chunk:int -> string -> int -> int -> (address * int) option       val equal : 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 = MrMime_address.Make.z = Z           type 'a s = 'MrMime_address.Make.s = S           type 'a word = 'MrMime_address.Make.word           type ('data, 'peano) llist =               ('data, 'peano) MrMime_address.Make.llist           val word : string -> [ `Atom | `String ] word           val atom : string -> [> `Atom ] word           val e : ([> `Atom ] word, z) llist           val ( & ) : 'a word -> ('a word, 'x) llist -> ('a word, 'x s) llist           val ( @ ) :             ([ `Atom | `String ] word, 'a s) llist ->             ([ `Atom ] word, 'b s) llist -> MrMime_address.mailbox         end       module Extension :         sig           val add_literal_domain :             string -> MrMime_address.literal_domain MrMime_parser.t -> unit         end     end   module Date :     sig       type day = Rfc5322.day = Mon | Tue | Wed | Thu | Fri | Sat | Sun       type month =         Rfc5322.month =           Jan         | Feb         | Mar         | Apr         | May         | Jun         | Jul         | Aug         | Sep         | Oct         | Nov         | Dec       type zone =         Rfc5322.zone =           UT         | GMT         | EST         | EDT         | CST         | CDT         | MST         | MDT         | PST         | PDT         | Military_zone of char         | TZ of int       type date =         Rfc5322.date = {         day : day option;         date : int * month * int;         time : int * int * int option;         zone : zone;       }       val pp_zone : Format.formatter -> zone -> unit       val pp_month : Format.formatter -> month -> unit       val pp_day : Format.formatter -> day -> unit       val pp : Format.formatter -> date -> unit       module Encoder :         sig           val w_day :             (MrMime_date.day,              ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)              Encoder.partial)             Wrap.k1           val w_time :             (int * int * int option,              ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)              Encoder.partial)             Wrap.k1           val w_zone :             (MrMime_date.zone,              ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)              Encoder.partial)             Wrap.k1           val w_date :             (MrMime_date.date,              ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)              Encoder.partial)             Wrap.k1         end       module Decoder :         sig           val p_hour : int MrMime_parser.t           val p_minute : int MrMime_parser.t           val p_second : int MrMime_parser.t           val p_year : int MrMime_parser.t           val p_day : int MrMime_parser.t           val p_month : MrMime_date.month MrMime_parser.t           val p_day_of_week : MrMime_date.day MrMime_parser.t           val p_zone : MrMime_date.zone MrMime_parser.t           val p_time :             ((int * int * int option) * MrMime_date.zone) MrMime_parser.t           val p_date : (int * MrMime_date.month * int) MrMime_parser.t           val p_date_time : MrMime_date.date MrMime_parser.t         end       val to_string : date -> string       val of_string : ?chunk:int -> string -> date option       val of_string_raw :         ?chunk:int -> string -> int -> int -> (date * int) option       val equal : date -> date -> bool     end   val pp_lst :     sep:(Format.formatter -> unit -> unit) ->     (Format.formatter -> '-> unit) -> Format.formatter -> 'a list -> unit   val pp_path :     Format.formatter ->     Address.local * (Address.domain * Address.domain list) -> unit   val pp_received :     Format.formatter ->     [< `Addr of Address.local * (Address.domain * Address.domain list)      | `Domain of Address.domain      | `Word of Address.word ]     list * Date.date option -> unit   val pp : Format.formatter -> trace -> unit   module Encoder :     sig       val w_crlf :         (Encoder.t ->          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial) ->         Encoder.t -> 'Encoder.partial       val w_lst :         (('-> 'b) -> '-> 'b) ->         ('-> ('-> 'b) -> '-> 'b) -> 'c list -> ('-> 'b) -> '-> 'b       val w_field' :         [< `Received of              [< `Addr of                   MrMime_address.local *                   (MrMime_address.domain * MrMime_address.domain list)               | `Domain of MrMime_address.domain               | `Word of MrMime_address.word ]              list * MrMime_date.date option          | `ReturnPath of              (MrMime_address.local *               (MrMime_address.domain * MrMime_address.domain list))              option ] ->         (Encoder.t ->          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial Encoder.partial Encoder.partial Encoder.partial          Encoder.partial Encoder.partial) ->         Encoder.t ->         'Encoder.partial Encoder.partial Encoder.partial Encoder.partial         Encoder.partial Encoder.partial       val w_field :         [< `Trace of              (MrMime_address.local *               (MrMime_address.domain * MrMime_address.domain list))              option *              ([< `Addr of                    MrMime_address.local *                    (MrMime_address.domain * MrMime_address.domain list)                | `Domain of MrMime_address.domain                | `Word of MrMime_address.word ]               list * MrMime_date.date option)              list ] ->         (Encoder.t ->          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial Encoder.partial Encoder.partial Encoder.partial          Encoder.partial Encoder.partial) ->         Encoder.t ->         'Encoder.partial Encoder.partial Encoder.partial Encoder.partial         Encoder.partial Encoder.partial       val w_trace :         trace ->         (Encoder.t ->          ([> `Partial of Bytes.t * int * int * (int -> 'a) ] as 'a)          Encoder.partial Encoder.partial Encoder.partial Encoder.partial          Encoder.partial Encoder.partial) ->         Encoder.t ->         'Encoder.partial Encoder.partial Encoder.partial Encoder.partial         Encoder.partial Encoder.partial     end   val decoder : ([> field ] as 'a) list -> (trace list * 'a list) Parser.t   val equal : '-> '-> bool end