sig
  type 'f plate = {
    plate :
      'a. 'Generic_core.Ty.T.ty -> '-> ('a, 'f) Generic_util.App.T.app;
  }
  type id_plate = { id_plate : 'a. 'Generic_core.Ty.T.ty -> '-> 'a; }
  type 'b const_plate = {
    const_plate : 'a. 'Generic_core.Ty.T.ty -> '-> 'b;
  }
  val pure_plate :
    'Generic_util.Applicative.T.applicative ->
    'Generic_fun_multiplate.plate
  val pure_id_plate : Generic_fun_multiplate.id_plate
  val pure_const_plate :
    'Generic_util.Monoid.T.monoid -> 'Generic_fun_multiplate.const_plate
  val compose :
    'Generic_util.Functor.T.functorial ->
    'Generic_fun_multiplate.plate ->
    'Generic_fun_multiplate.plate ->
    ('g, 'f) Generic_util.App.comp Generic_fun_multiplate.plate
  val compose_monad :
    'Generic_util.Monad.T.monad ->
    'Generic_fun_multiplate.plate ->
    'Generic_fun_multiplate.plate -> 'Generic_fun_multiplate.plate
  val compose_right_id :
    'Generic_fun_multiplate.plate ->
    Generic_fun_multiplate.id_plate -> 'Generic_fun_multiplate.plate
  val compose_left_id :
    'Generic_util.Functor.T.functorial ->
    Generic_fun_multiplate.id_plate ->
    'Generic_fun_multiplate.plate -> 'Generic_fun_multiplate.plate
  val append_plate :
    'Generic_util.Monoid.T.monoid ->
    'Generic_fun_multiplate.const_plate ->
    'Generic_fun_multiplate.const_plate ->
    'Generic_fun_multiplate.const_plate
  val traverse :
    'Generic_util.Applicative.T.applicative ->
    'Generic_fun_multiplate.plate ->
    'Generic_core.Product.T.product ->
    '-> ('a, 'f) Generic_util.App.T.app
  val map :
    Generic_fun_multiplate.id_plate ->
    'Generic_core.Product.T.product -> '-> 'a
  type 'a scrapped =
      Scrapped : 'Generic_core.Product.t * 'b *
        ('-> 'a) -> 'Generic_fun_multiplate.scrapped
  val scrap :
    'Generic_core.Ty.T.ty -> '-> 'Generic_fun_multiplate.scrapped
  val children :
    'Generic_core.Ty.T.ty -> '-> Generic_core.Ty.Dynamic.dyn list
  val children_d :
    Generic_core.Ty.Dynamic.dyn -> Generic_core.Ty.Dynamic.dyn list
  val family :
    'Generic_core.Ty.T.ty -> '-> Generic_core.Ty.Dynamic.dyn list
  val family_d :
    Generic_core.Ty.Dynamic.dyn -> Generic_core.Ty.Dynamic.dyn list
  val traverse_children_p :
    'Generic_util.Applicative.T.applicative ->
    'Generic_fun_multiplate.plate -> 'Generic_fun_multiplate.plate
  val traverse_children :
    'Generic_util.Applicative.T.applicative ->
    'Generic_fun_multiplate.plate ->
    'Generic_core.Ty.T.ty -> '-> ('a, 'f) Generic_util.App.T.app
  val map_children_p :
    Generic_fun_multiplate.id_plate -> Generic_fun_multiplate.id_plate
  val map_children :
    Generic_fun_multiplate.id_plate -> 'Generic_core.Ty.T.ty -> '-> 'a
  val traverse_family_p :
    'Generic_util.Monad.T.monad ->
    'Generic_fun_multiplate.plate -> 'Generic_fun_multiplate.plate
  val traverse_family :
    'Generic_util.Monad.T.monad ->
    'Generic_fun_multiplate.plate ->
    'Generic_core.Ty.T.ty -> '-> ('a, 'f) Generic_util.App.T.app
  val map_family_p :
    Generic_fun_multiplate.id_plate -> Generic_fun_multiplate.id_plate
  val map_family :
    Generic_fun_multiplate.id_plate -> 'Generic_core.Ty.T.ty -> '-> 'a
  val para_p :
    ('r list -> 'r) Generic_fun_multiplate.const_plate ->
    'Generic_fun_multiplate.const_plate
  val para_d :
    (Generic_core.Ty.Dynamic.dyn -> 'r list -> 'r) ->
    Generic_core.Ty.Dynamic.dyn -> 'r
  val para :
    (Generic_core.Ty.Dynamic.dyn -> 'r list -> 'r) ->
    'Generic_core.Ty.T.ty -> '-> 'r
  val fold_children_p :
    'Generic_util.Monoid.T.monoid ->
    'Generic_fun_multiplate.const_plate ->
    'Generic_fun_multiplate.const_plate
  val fold_children_d :
    'Generic_util.Monoid.T.monoid ->
    (Generic_core.Ty.Dynamic.dyn -> 't) -> Generic_core.Ty.Dynamic.dyn -> 't
  val fold_children :
    'Generic_util.Monoid.T.monoid ->
    (Generic_core.Ty.Dynamic.dyn -> 't) ->
    'Generic_core.Ty.T.ty -> '-> 't
  val pre_fold_p :
    'Generic_util.Monoid.T.monoid ->
    'Generic_fun_multiplate.const_plate ->
    'Generic_fun_multiplate.const_plate
  val pre_fold_d :
    'Generic_util.Monoid.T.monoid ->
    (Generic_core.Ty.Dynamic.dyn -> 't) -> Generic_core.Ty.Dynamic.dyn -> 't
  val pre_fold :
    'Generic_util.Monoid.T.monoid ->
    (Generic_core.Ty.Dynamic.dyn -> 't) ->
    'Generic_core.Ty.T.ty -> '-> 't
  val post_fold_p :
    'Generic_util.Monoid.T.monoid ->
    'Generic_fun_multiplate.const_plate ->
    'Generic_fun_multiplate.const_plate
  val post_fold_d :
    'Generic_util.Monoid.T.monoid ->
    (Generic_core.Ty.Dynamic.dyn -> 't) -> Generic_core.Ty.Dynamic.dyn -> 't
  val post_fold :
    'Generic_util.Monoid.T.monoid ->
    (Generic_core.Ty.Dynamic.dyn -> 't) ->
    'Generic_core.Ty.T.ty -> '-> 't
  type 'f openrec = {
    run :
      'Generic_fun_multiplate.openrec -> 'Generic_fun_multiplate.plate;
  }
  val default :
    'Generic_util.Applicative.T.applicative ->
    'Generic_fun_multiplate.openrec
end