I have an API with many functors F1,F2,…,F6 which are doing (for types of arity 1,…,6, respectively) something unsafe and tricky under the hood. At the moment it’s not obvious what to do with types of arity >= 7. I do not (and don’t want to) expose any functions to build functors for types with larger arity manually. And addition of F7 will raise a question about F8, etc.
If it would be tuple values instead of non-curried types I could do something polyvariadic like below. The trick is to replace n-tuple by (n-1) nested pair.
let one (a,b) = b;; val one : 'a * 'b -> 'b = <fun> let succ prev (l,r) = prev r;; val succ : ('a -> 'b) -> 'c * 'a -> 'b = <fun> one (0,1);; - : int = 2 one (0,(1,2));; - : int * int = (1, 2) succ one (0,(1,2));; - : int = 2
But for the OCaml types I can’t do the same, because the standard representation is non-curried and to replace them to curried-like form I need many NewTypeN functors mentioned in a paper “Lightweight higher-kinded polymorphism”  which suffer the same problem as my functors. So it will be a replacement of one indexed family of functors by another.
Question 1: Do you know any crazy ideas to get rid of indexed families of functors?
Question 2. The only language where type operators are in a curried form I know about is Haskell. Do you know any other ones? Do curryfied type operators automatically imply existence of higher kinded types in a language?