sig
  module type Comments =
    sig
      type link_t
      module Entry :
        sig
          type t = {
            etag : string;
            kind : string;
            authors : GdataAtom.Author.t list;
            content : GdataAtom.Content.t;
            contributors : GdataAtom.Contributor.t list;
            id : GdataAtom.atom_id;
            published : GdataAtom.atom_published;
            updated : GdataAtom.atom_updated;
            links : GdataComments.Comments.link_t list;
            title : GdataAtom.Title.t;
            category : GdataAtom.Category.t;
            extensions : GdataCore.xml_data_model list;
          }
          val empty : GdataComments.Comments.Entry.t
          val of_xml_data_model :
            GdataComments.Comments.Entry.t ->
            GdataCore.xml_data_model -> GdataComments.Comments.Entry.t
          val to_xml_data_model :
            GdataComments.Comments.Entry.t -> GdataCore.xml_data_model list
        end
      module Feed :
        sig
          type entry_t = Entry.t
          type link_t = link_t
          type extensions_t
          type t = {
            etag : string;
            kind : string;
            authors : GdataAtom.Author.t list;
            categories : GdataAtom.Category.t list;
            contributors : GdataAtom.Contributor.t list;
            generator : GdataAtom.Generator.t;
            icon : GdataAtom.atom_icon;
            id : GdataAtom.atom_id;
            updated : GdataAtom.atom_updated;
            entries : entry_t list;
            links : link_t list;
            logo : GdataAtom.atom_logo;
            rights : GdataAtom.Rights.t;
            subtitle : GdataAtom.Subtitle.t;
            title : GdataAtom.Title.t;
            totalResults : GdataAtom.opensearch_totalResults;
            itemsPerPage : GdataAtom.opensearch_itemsPerPage;
            startIndex : GdataAtom.opensearch_startIndex;
            extensions : extensions_t;
          }
          val etag : (t, string) GapiLens.t
          val kind : (t, string) GapiLens.t
          val authors : (t, GdataAtom.Author.t list) GapiLens.t
          val categories : (t, GdataAtom.Category.t list) GapiLens.t
          val contributors : (t, GdataAtom.Contributor.t list) GapiLens.t
          val generator : (t, GdataAtom.Generator.t) GapiLens.t
          val icon : (t, GdataAtom.atom_icon) GapiLens.t
          val id : (t, GdataAtom.atom_id) GapiLens.t
          val updated : (t, GdataAtom.atom_updated) GapiLens.t
          val entries : (t, entry_t list) GapiLens.t
          val links : (t, link_t list) GapiLens.t
          val logo : (t, GdataAtom.atom_logo) GapiLens.t
          val rights : (t, GdataAtom.Rights.t) GapiLens.t
          val subtitle : (t, GdataAtom.Subtitle.t) GapiLens.t
          val title : (t, GdataAtom.Title.t) GapiLens.t
          val totalResults :
            (t, GdataAtom.opensearch_totalResults) GapiLens.t
          val itemsPerPage :
            (t, GdataAtom.opensearch_itemsPerPage) GapiLens.t
          val startIndex : (t, GdataAtom.opensearch_startIndex) GapiLens.t
          val extensions : (t, extensions_t) GapiLens.t
          val empty : t
          val to_xml_data_model : t -> GdataCore.xml_data_model list
          val of_xml_data_model : t -> GdataCore.xml_data_model -> t
          val parse_feed : GdataCore.xml_data_model -> t
        end
      type t = {
        countHint : int;
        href : string;
        readOnly : bool;
        rel : string;
        commentFeed : GdataComments.Comments.Feed.t;
      }
      val empty : GdataComments.Comments.t
      val of_xml_data_model :
        GdataComments.Comments.t ->
        GdataCore.xml_data_model -> GdataComments.Comments.t
      val to_xml_data_model :
        GdataComments.Comments.t -> GdataCore.xml_data_model list
      val parse_comment_entry :
        GdataCore.xml_data_model -> GdataComments.Comments.Entry.t
      val comment_entry_to_data_model :
        GdataComments.Comments.Entry.t -> GdataCore.xml_data_model
    end
  module Make :
    functor (Link : GdataAtom.AtomData->
      sig
        type link_t = Link.t
        module Entry :
          sig
            type t = {
              etag : string;
              kind : string;
              authors : GdataAtom.Author.t list;
              content : GdataAtom.Content.t;
              contributors : GdataAtom.Contributor.t list;
              id : GdataAtom.atom_id;
              published : GdataAtom.atom_published;
              updated : GdataAtom.atom_updated;
              links : link_t list;
              title : GdataAtom.Title.t;
              category : GdataAtom.Category.t;
              extensions : GdataCore.xml_data_model list;
            }
            val empty : t
            val of_xml_data_model : t -> GdataCore.xml_data_model -> t
            val to_xml_data_model : t -> GdataCore.xml_data_model list
          end
        module Feed :
          sig
            type entry_t = Entry.t
            type link_t = link_t
            type extensions_t
            type t = {
              etag : string;
              kind : string;
              authors : GdataAtom.Author.t list;
              categories : GdataAtom.Category.t list;
              contributors : GdataAtom.Contributor.t list;
              generator : GdataAtom.Generator.t;
              icon : GdataAtom.atom_icon;
              id : GdataAtom.atom_id;
              updated : GdataAtom.atom_updated;
              entries : entry_t list;
              links : link_t list;
              logo : GdataAtom.atom_logo;
              rights : GdataAtom.Rights.t;
              subtitle : GdataAtom.Subtitle.t;
              title : GdataAtom.Title.t;
              totalResults : GdataAtom.opensearch_totalResults;
              itemsPerPage : GdataAtom.opensearch_itemsPerPage;
              startIndex : GdataAtom.opensearch_startIndex;
              extensions : extensions_t;
            }
            val etag : (t, string) GapiLens.t
            val kind : (t, string) GapiLens.t
            val authors : (t, GdataAtom.Author.t list) GapiLens.t
            val categories : (t, GdataAtom.Category.t list) GapiLens.t
            val contributors : (t, GdataAtom.Contributor.t list) GapiLens.t
            val generator : (t, GdataAtom.Generator.t) GapiLens.t
            val icon : (t, GdataAtom.atom_icon) GapiLens.t
            val id : (t, GdataAtom.atom_id) GapiLens.t
            val updated : (t, GdataAtom.atom_updated) GapiLens.t
            val entries : (t, entry_t list) GapiLens.t
            val links : (t, link_t list) GapiLens.t
            val logo : (t, GdataAtom.atom_logo) GapiLens.t
            val rights : (t, GdataAtom.Rights.t) GapiLens.t
            val subtitle : (t, GdataAtom.Subtitle.t) GapiLens.t
            val title : (t, GdataAtom.Title.t) GapiLens.t
            val totalResults :
              (t, GdataAtom.opensearch_totalResults) GapiLens.t
            val itemsPerPage :
              (t, GdataAtom.opensearch_itemsPerPage) GapiLens.t
            val startIndex : (t, GdataAtom.opensearch_startIndex) GapiLens.t
            val extensions : (t, extensions_t) GapiLens.t
            val empty : t
            val to_xml_data_model : t -> GdataCore.xml_data_model list
            val of_xml_data_model : t -> GdataCore.xml_data_model -> t
            val parse_feed : GdataCore.xml_data_model -> t
          end
        type t = {
          countHint : int;
          href : string;
          readOnly : bool;
          rel : string;
          commentFeed : Feed.t;
        }
        val empty : t
        val of_xml_data_model : t -> GdataCore.xml_data_model -> t
        val to_xml_data_model : t -> GdataCore.xml_data_model list
        val parse_comment_entry : GdataCore.xml_data_model -> Entry.t
        val comment_entry_to_data_model : Entry.t -> GdataCore.xml_data_model
      end
end