La función del ejercicio 1 retorna bottom, según las palabras de un profesor en el C22, bottom es undefined, todo lo que ustedes quieren que sea, por lo tanto puede ser tanto int como bool, lo que también concuerda con la definición de bottom en Haskel.org 'Bottom is a member of any type, even the trivial type ()'.
Por lo que concluyo que la solución que fue dada como correcta foo :: (Ord a,Eq b) ⇒ a → a → b → a → b → Bool es una instancia del tipo más general al igual que foo :: (Ord a,Eq b) ⇒ a → a → b → a → b → Int, por lo que concluyo que no tiene tipo más general, o en todo caso sería foo :: (Ord a,Eq b) ⇒ a → a → b → a → b → undefined o algo así.