sig
  type 'a sp =
      Base : 'Generic_core.Ty.T.ty -> 'Generic_view_sumprod.sp
    | Empty : Generic_util.Sum.empty Generic_view_sumprod.sp
    | Sum : 'Generic_view_sumprod.sp *
        'Generic_view_sumprod.sp -> ('a, 'b) Generic_util.Sum.sum
                                      Generic_view_sumprod.sp
    | Unit : unit Generic_view_sumprod.sp
    | Prod : 'Generic_view_sumprod.sp *
        'Generic_view_sumprod.sp -> ('a * 'b) Generic_view_sumprod.sp
    | Delay : 'Generic_core.Ty.T.ty -> 'Generic_view_sumprod.sp
    | Con : string * 'Generic_view_sumprod.sp -> 'Generic_view_sumprod.sp
    | Field : string *
        'Generic_view_sumprod.sp -> 'Generic_view_sumprod.sp
    | Iso : 'Generic_view_sumprod.sp *
        ('a, 'b) Generic_util.Fun.iso -> 'Generic_view_sumprod.sp
  val sumprod : 'Generic_core.Ty.T.ty -> 'Generic_view_sumprod.sp
  val view : 'Generic_core.Ty.T.ty -> 'Generic_view_sumprod.sp
end