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