L
data Test
class SomeClass (a :: Type)
class (forall a. SomeClass a) => Cls a
instance SomeClass Test
instance Cls Test
Получаем No instance for (SomeClass a)
в последней строчке, что вполне ожидаемо при обычных правилах области видимости для forall
. Если переименовать class (forall a. SomeClass a) => Cls b
эффект такой же, что тоже ожидаемо. Это разные переменные.