Is there any way to infer "Eq (f a)" from "(Eq a, Eq1 f)"? Here's a small example: import Data.Functor.Classes (Eq1) -- Library function, cannot be modified allEqual :: Eq a => [a] -> Bool allEqual [] = True allEqual (x : xs) = all (== x) xs func :: (Eq a, Eq1 f) => [f a] -> Bool func xs = allEqual xs This fails with the following message: /home/pgujjula/temp/eq1-example/app/Main.hs:9:11: error: • Could not deduce (Eq (f a)) arising from a use of ‘allEqual’ from the context: (Eq a, Eq1 f) bound by the type signature for: func :: forall a (f :: * -> *). (Eq a, Eq1 f) => [f a] -> Bool at /home/pgujjula/temp/eq1-example/app/Main.hs:8:1-38 • In the expression: allEqual xs In an equation for ‘func’: func xs = allEqual xs | 9 | func xs = allEqual xs | ^^^^^^^^ Is there any way to implement "func" in a straightfoward way? I would have thought GHC would have been able to infer "Eq (f a)".