sig
  module type T =
    sig
      type 'a t
      val bind :
        'Xml_wrap.T.t -> ('-> 'Xml_wrap.T.t) -> 'Xml_wrap.T.t
      val return : '-> 'Xml_wrap.T.t
      val fmap : ('-> 'b) -> 'Xml_wrap.T.t -> 'Xml_wrap.T.t
      val fmap2 :
        ('-> '-> 'c) ->
        'Xml_wrap.T.t -> 'Xml_wrap.T.t -> 'Xml_wrap.T.t
      val fmap3 :
        ('-> '-> '-> 'd) ->
        'Xml_wrap.T.t ->
        'Xml_wrap.T.t -> 'Xml_wrap.T.t -> 'Xml_wrap.T.t
      val fmap4 :
        ('-> '-> '-> '-> 'e) ->
        'Xml_wrap.T.t ->
        'Xml_wrap.T.t ->
        'Xml_wrap.T.t -> 'Xml_wrap.T.t -> 'Xml_wrap.T.t
      val fmap5 :
        ('-> '-> '-> '-> '-> 'f) ->
        'Xml_wrap.T.t ->
        'Xml_wrap.T.t ->
        'Xml_wrap.T.t ->
        'Xml_wrap.T.t -> 'Xml_wrap.T.t -> 'Xml_wrap.T.t
    end
  module NoWrap :
    sig
      type 'a t = 'a
      val bind : 'a t -> ('-> 'b t) -> 'b t
      val return : '-> 'a t
      val fmap : ('-> 'b) -> 'a t -> 'b t
      val fmap2 : ('-> '-> 'c) -> 'a t -> 'b t -> 'c t
      val fmap3 : ('-> '-> '-> 'd) -> 'a t -> 'b t -> 'c t -> 'd t
      val fmap4 :
        ('-> '-> '-> '-> 'e) -> 'a t -> 'b t -> 'c t -> 'd t -> 'e t
      val fmap5 :
        ('-> '-> '-> '-> '-> 'f) ->
        'a t -> 'b t -> 'c t -> 'd t -> 'e t -> 'f t
    end
end