functor (F : Fetch->
  sig
    module Object_id :
      sig
        type t = [ `int of int | `string of string ]
        val to_string : Biocaml_entrez.Make.Object_id.t -> string
      end
    module Dbtag :
      sig
        type t = { db : string; tag : Biocaml_entrez.Make.Object_id.t; }
      end
    module Gene_ref :
      sig
        type t = {
          locus : string option;
          allele : string option;
          desc : string option;
          maploc : string option;
          pseudo : bool option;
          db : Biocaml_entrez.Make.Dbtag.t list;
        }
      end
    module PubmedSummary :
      sig
        type t = {
          pmid : int;
          doi : string option;
          pubdate : string option;
          source : string option;
          title : string;
        }
        val search :
          string -> Biocaml_entrez.Make.PubmedSummary.t list F.fetched
      end
    module Pubmed :
      sig
        type t = { pmid : int; title : string; abstract : string; }
        val search : string -> Biocaml_entrez.Make.Pubmed.t list F.fetched
      end
    module Gene :
      sig
        type t = {
          _type :
            [ `miscRNA
            | `ncRNA
            | `other
            | `protein_coding
            | `pseudo
            | `rRNA
            | `scRNA
            | `snRNA
            | `snoRNA
            | `tRNA
            | `transposon
            | `unknown ];
          summary : string option;
          gene : Biocaml_entrez.Make.Gene_ref.t;
        }
        val search : string -> Biocaml_entrez.Make.Gene.t list F.fetched
      end
  end