sig
  type empty
  type ('a, 'b) sum = Left of '| Right of 'b
  type _ Generic_core.Ty.t +=
      Empty : Generic_util_sum.empty Generic_core.Ty.t
    | Sum : 'Generic_core.Ty.t *
        'Generic_core.Ty.t -> ('a, 'b) Generic_util_sum.sum
                                Generic_core.Ty.t
  val left : '-> ('a, 'b) Generic_util_sum.sum
  val right : '-> ('a, 'b) Generic_util_sum.sum
  val empty_elim : Generic_util_sum.empty -> 'a
  val either :
    ('-> 'c) -> ('-> 'c) -> ('a, 'b) Generic_util_sum.sum -> 'c
  val sum :
    ('-> 'c) ->
    ('-> 'd) ->
    ('a, 'b) Generic_util_sum.sum -> ('c, 'd) Generic_util_sum.sum
end