# Functor Functor_class.Builder

    module Builder: functor (Generator : Pa_deriving_common.Defs.Generator) -> sig .. end

Parameters:

`Generator` | : | `Pa_deriving_common.Defs.Generator`

    module Helpers: Generator.AstHelpers

    type context = {

`` | `argmap : `Pa_deriving_common.Type.qname Pa_deriving_common.Type.NameMap.t`;`
`` | `params : `Pa_deriving_common.Type.param list`;`

}

    val substitute : Pa_deriving_common.Type.name Pa_deriving_common.Type.NameMap.t ->
           Pa_deriving_common.Type.expr -> Pa_deriving_common.Type.expr

    val setup_context : Pa_deriving_common.Type.decl -> context

    val param_map : context -> string Pa_deriving_common.Type.NameMap.t

    val wrapper : context ->
           Pa_deriving_common.Type.name ->
           Camlp4.PreCast.Ast.expr -> Camlp4.PreCast.Ast.module_expr

    val polycase : context ->
           Pa_deriving_common.Type.tagspec -> Camlp4.PreCast.Ast.match_case

    val expr : context ->
           Pa_deriving_common.Type.expr -> Camlp4.PreCast.Ast.expr

    val tup : context ->
           Pa_deriving_common.Type.expr list -> Camlp4.PreCast.Ast.expr

    val case : context ->
           string * Pa_deriving_common.Type.expr list -> Camlp4.PreCast.Ast.match_case

    val field : context ->
           string * ('a * Pa_deriving_common.Type.expr) * 'b -> Camlp4.PreCast.Ast.expr

    val rhs : context ->
           Pa_deriving_common.Type.rhs -> Camlp4.PreCast.Ast.expr

    val maptype : context ->
           Pa_deriving_common.Type.name -> Camlp4.PreCast.Ast.ctyp

    val signature : context ->
           Pa_deriving_common.Type.name -> Camlp4.PreCast.Ast.sig_item list

    val decl : Pa_deriving_common.Type.name * Pa_deriving_common.Type.param list *
           Pa_deriving_common.Type.rhs * Pa_deriving_common.Type.constraint_ list *
           bool -> Camlp4.PreCast.Ast.module_binding

    val gen_sig : Pa_deriving_common.Type.name * Pa_deriving_common.Type.param list *
           Pa_deriving_common.Type.rhs * Pa_deriving_common.Type.constraint_ list *
           bool -> Camlp4.PreCast.Ast.sig_item

    val generate : (Pa_deriving_common.Type.name * Pa_deriving_common.Type.param list *
            Pa_deriving_common.Type.rhs * Pa_deriving_common.Type.constraint_ list *
            bool)
           list -> Camlp4.PreCast.Ast.str_item

    val generate_sigs : (Pa_deriving_common.Type.name * Pa_deriving_common.Type.param list *
            Pa_deriving_common.Type.rhs * Pa_deriving_common.Type.constraint_ list *
            bool)
           list -> Camlp4.PreCast.Ast.sig_item