sig
  type 'a t
  module type S0 =
    sig
      type t
      val typerep_of_t : t Std_internal.Typerep.t
      val typename_of_t : t Typename.t
      val compute : t t
    end
  module type S1 =
    sig
      type 'a t
      val typerep_of_t :
        'Std_internal.Typerep.t -> 'a t Std_internal.Typerep.t
      val typename_of_t : 'Typename.t -> 'a t Typename.t
      val compute : 'a t -> 'a t t
    end
  module type S2 =
    sig
      type ('a, 'b) t
      val typerep_of_t :
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t -> ('a, 'b) t Std_internal.Typerep.t
      val typename_of_t :
        'Typename.t -> 'Typename.t -> ('a, 'b) t Typename.t
      val compute : 'a t -> 'b t -> ('a, 'b) t t
    end
  module type S3 =
    sig
      type ('a, 'b, 'c) t
      val typerep_of_t :
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t -> ('a, 'b, 'c) t Std_internal.Typerep.t
      val typename_of_t :
        'Typename.t ->
        'Typename.t -> 'Typename.t -> ('a, 'b, 'c) t Typename.t
      val compute : 'a t -> 'b t -> 'c t -> ('a, 'b, 'c) t t
    end
  module type S4 =
    sig
      type ('a, 'b, 'c, 'd) t
      val typerep_of_t :
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t ->
        ('a, 'b, 'c, 'd) t Std_internal.Typerep.t
      val typename_of_t :
        'Typename.t ->
        'Typename.t ->
        'Typename.t -> 'Typename.t -> ('a, 'b, 'c, 'd) t Typename.t
      val compute : 'a t -> 'b t -> 'c t -> 'd t -> ('a, 'b, 'c, 'd) t t
    end
  module type S5 =
    sig
      type ('a, 'b, 'c, 'd, 'e) t
      val typerep_of_t :
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t ->
        'Std_internal.Typerep.t ->
        ('a, 'b, 'c, 'd, 'e) t Std_internal.Typerep.t
      val typename_of_t :
        'Typename.t ->
        'Typename.t ->
        'Typename.t ->
        'Typename.t -> 'Typename.t -> ('a, 'b, 'c, 'd, 'e) t Typename.t
      val compute :
        'a t -> 'b t -> 'c t -> 'd t -> 'e t -> ('a, 'b, 'c, 'd, 'e) t t
    end
end