class C c where { type T c; } bar :: C a => a -> T a; bar x = undefined; foo z = let f = bar f; in 42;