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