чтобы было немного понятно почему нельзя
class Foo a b | a -> b
instance Foo Int Bool
foo :: Foo Int Int => Int
foo = 0
вот это валидный код, с валидной сигнатурой
Foo Int Int это просто Void, нет такого инстанса, и никогда не будет, поэтому вызвать foo нельзя будет (без unsafeCoerce ньютайпа с такой функцией внутри). Но функция все еще валидная, как и foo :: Void -> Int