型レベル高階関数 (?)

id:eagletmt さんが Haskell の型レをやっているのでコメントをポチポチ書いています

ただ,これだとちょっと残念なことがあって,例えば2つ足す場合,

data Succ2F = Succ2F
instance Apply Succ2F x (Succ (Succ x))

と,わざわざ書かなければならない.
最初のコードがうまくいってくれれば,

apply (undefined :: n -> Succ (Succ n)) Zero :: Succ (Succ Zero)

となってくれると思うのに.

この発想は自分にはなかったので,ちょっと考えました. 型レベルのλ (System FのΛ)があったらいいのにーという風に理解したのですがそりゃ難しそうに思えます.
その代わりといってはなんですが,

data DoubleF f
instance (Apply f x x', Apply f x' x'') => Apply (Double f) x x''

とやっておけば,

apply (undefined :: DoubleF SuccF) Zero :: Succ (Succ Zero)

となるのではないかと思います. 他の型構築子についても DoubleF が使えるので,ある意味,型レの高階関数,といえるかもしれません.
型レベル継続渡し計算 なんてこともできます.