sig
  val scrap : 'Generic_core.Ty.T.ty -> '-> 'a list * ('a list -> 'a)
  val children : 'Generic_core.Ty.T.ty -> '-> 'a list
  val replace_children : 'Generic_core.Ty.T.ty -> '-> 'a list -> 'a
  val map_children : 'Generic_core.Ty.T.ty -> ('-> 'a) -> '-> 'a
  val family : 'Generic_core.Ty.T.ty -> '-> 'a list
  val post_family : 'Generic_core.Ty.T.ty -> '-> 'a list
  val map_family : 'Generic_core.Ty.T.ty -> ('-> 'a) -> '-> 'a
  val reduce_family :
    'Generic_core.Ty.T.ty -> ('-> 'a option) -> '-> 'a
  val para : 'Generic_core.Ty.T.ty -> ('-> 'r list -> 'r) -> '-> 'r
  val traverse_children :
    'Generic_util.Applicative.T.applicative ->
    'Generic_core.Ty.T.ty ->
    ('-> ('a, 'f) Generic_util.App.T.app) ->
    '-> ('a, 'f) Generic_util.App.T.app
  val traverse_family :
    'Generic_util.Monad.T.monad ->
    'Generic_core.Ty.T.ty ->
    ('-> ('a, 'f) Generic_util.App.T.app) ->
    '-> ('a, 'f) Generic_util.App.T.app
  val mreduce_family :
    'Generic_util.Monad.T.monad ->
    'Generic_core.Ty.T.ty ->
    ('-> ('a option, 'f) Generic_util.App.T.app) ->
    '-> ('a, 'f) Generic_util.App.T.app
end