sig
  module type T =
    sig
      type 'a t
      val return : '-> 'Xml_wrap.T.t
      type (-'a, 'b) ft
      val fmap : ('a, 'b) Xml_wrap.T.ft -> 'Xml_wrap.T.t -> 'Xml_wrap.T.t
      type 'a tlist
      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 :
        ('a, 'b) Xml_wrap.T.ft -> 'Xml_wrap.T.tlist -> 'Xml_wrap.T.tlist
    end
  module type NoWrap =
    sig
      type 'a t = 'a
      val return : '-> 'a t
      type ('a, 'b) ft = '-> 'b
      val fmap : ('a, 'b) ft -> 'a t -> 'b t
      type 'a tlist = 'a list
      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 : ('a, 'b) ft -> 'a tlist -> 'b tlist
    end
  module NoWrap : NoWrap
end