sig
  module type T =
    sig
      type 'a t
      type 'a tlist
      val return : '-> 'Xml_wrap.T.t
      val fmap : ('-> 'b) -> 'Xml_wrap.T.t -> 'Xml_wrap.T.t
      val nil : unit -> 'Xml_wrap.T.tlist
      val singleton : 'Xml_wrap.T.t -> 'Xml_wrap.T.tlist
      val cons :
        'Xml_wrap.T.t -> 'Xml_wrap.T.tlist -> 'Xml_wrap.T.tlist
      val append :
        'Xml_wrap.T.tlist -> 'Xml_wrap.T.tlist -> 'Xml_wrap.T.tlist
      val map : ('-> 'b) -> 'Xml_wrap.T.tlist -> 'Xml_wrap.T.tlist
    end
  module NoWrap :
    sig
      type 'a t = 'a
      type 'a tlist = 'a list
      val return : '-> 'a t
      val fmap : ('-> 'b) -> 'a t -> 'b t
      val nil : unit -> 'a tlist
      val singleton : 'a t -> 'a tlist
      val cons : 'a t -> 'a tlist -> 'a tlist
      val append : 'a tlist -> 'a tlist -> 'a tlist
      val map : ('-> 'b) -> 'a tlist -> 'b tlist
    end
end