sig
  exception No_response
  exception No_match of Bookaml_isbn.t
  module Locale :
    sig
      type t =
          [ `BR | `CA | `CN | `DE | `ES | `FR | `IN | `IT | `JP | `UK | `US ]
      val t_of_sexp : Sexplib.Sexp.t -> Bookaml_amazon.Locale.t
      val __t_of_sexp__ : Sexplib.Sexp.t -> Bookaml_amazon.Locale.t
      val sexp_of_t : Bookaml_amazon.Locale.t -> Sexplib.Sexp.t
      val of_string : string -> Bookaml_amazon.Locale.t
      val to_string : Bookaml_amazon.Locale.t -> string
    end
  type credential = {
    locale : Bookaml_amazon.Locale.t;
    associate_tag : string;
    access_key : string;
    secret_key : string;
  }
  val credential_of_sexp : Sexplib.Sexp.t -> Bookaml_amazon.credential
  val sexp_of_credential : Bookaml_amazon.credential -> Sexplib.Sexp.t
  type criteria
  val criteria_of_sexp : Sexplib.Sexp.t -> Bookaml_amazon.criteria
  val sexp_of_criteria : Bookaml_amazon.criteria -> Sexplib.Sexp.t
  val make_credential :
    locale:Bookaml_amazon.Locale.t ->
    associate_tag:string ->
    access_key:string -> secret_key:string -> Bookaml_amazon.credential
  val make_criteria :
    ?title:string ->
    ?author:string ->
    ?publisher:string -> ?keywords:string -> unit -> Bookaml_amazon.criteria
  module type XMLHANDLER =
    sig
      type xml
      val parse : string -> Bookaml_amazon.XMLHANDLER.xml list
      val xfind_all :
        Bookaml_amazon.XMLHANDLER.xml list ->
        string -> Bookaml_amazon.XMLHANDLER.xml list list
      val xfind_one :
        Bookaml_amazon.XMLHANDLER.xml list ->
        string -> Bookaml_amazon.XMLHANDLER.xml list
      val xget : Bookaml_amazon.XMLHANDLER.xml list -> string
    end
  module type HTTPGETTER =
    sig
      module Monad :
        sig
          type 'a t
          val return : '-> 'Bookaml_amazon.HTTPGETTER.Monad.t
          val fail : exn -> 'Bookaml_amazon.HTTPGETTER.Monad.t
          val bind :
            'Bookaml_amazon.HTTPGETTER.Monad.t ->
            ('-> 'Bookaml_amazon.HTTPGETTER.Monad.t) ->
            'Bookaml_amazon.HTTPGETTER.Monad.t
          val list_map :
            ('-> 'Bookaml_amazon.HTTPGETTER.Monad.t) ->
            'a list -> 'b list Bookaml_amazon.HTTPGETTER.Monad.t
        end
      val perform_request :
        host:string -> string -> string Bookaml_amazon.HTTPGETTER.Monad.t
    end
  module type ENGINE =
    sig
      type 'a monad
      val find_some_books :
        ?page:int ->
        credential:Bookaml_amazon.credential ->
        Bookaml_amazon.criteria ->
        (int * int * Bookaml_book.t list) Bookaml_amazon.ENGINE.monad
      val find_all_books :
        credential:Bookaml_amazon.credential ->
        Bookaml_amazon.criteria ->
        Bookaml_book.t list Bookaml_amazon.ENGINE.monad
      val book_from_isbn :
        credential:Bookaml_amazon.credential ->
        Bookaml_isbn.t -> Bookaml_book.t option Bookaml_amazon.ENGINE.monad
      val book_from_isbn_exn :
        credential:Bookaml_amazon.credential ->
        Bookaml_isbn.t -> Bookaml_book.t Bookaml_amazon.ENGINE.monad
    end
  module Make :
    functor (Xmlhandler : XMLHANDLER) (Httpgetter : HTTPGETTER->
      sig
        type 'a monad = 'Httpgetter.Monad.t
        val find_some_books :
          ?page:int ->
          credential:credential ->
          criteria -> (int * int * Bookaml_book.t list) monad
        val find_all_books :
          credential:credential -> criteria -> Bookaml_book.t list monad
        val book_from_isbn :
          credential:credential ->
          Bookaml_isbn.t -> Bookaml_book.t option monad
        val book_from_isbn_exn :
          credential:credential -> Bookaml_isbn.t -> Bookaml_book.t monad
      end
end