任意の型の引数を無限に消費する空腹関数はHaskell(GHC)では書けないのか?

Schemeでいうと

(define (hungry x) hungry)

みたいなやつ。

ここまではできた。参考: https://github.com/jstolarek/sandbox/blob/master/haskell/Hungry.hs

Prelude> :set -XRankNTypes
Prelude> data Hungry = Hungry { (%) :: forall b. b -> Hungry }
Prelude> let fix f = f $ fix f
Prelude> let hungry = fix id :: Hungry
Prelude> :t hungry % 42 % 'c' % []
hungry % 42 % 'c' % [] :: Hungry

unHungry (上では (%)) 無しでは書けないのかなあ。


(追記 18:38)
できた、のか?
参考:可変長引数をHaskellで。 - ここにタイトルを入力|

Prelude> class Hungry f where hungry :: a -> f
Prelude> instance Hungry a => Hungry (f -> a) where hungry _ = hungry
Prelude> :t hungry 42 'c' []
hungry 42 'c' [] :: Hungry t => t

型クラスにするとそれっぽいものが何故かできた。何故だ?