I have some code resembling
class Foo f where
foo :: a -> f a
data Bar f a = Foo f => Bar {bar :: f a}
instance Foo (Bar f) where
foo a = Bar $ foo a
GHC insists on Foo f => in the instance declaration. However, the definition of Bar guarantees that this will always be
the case. Why do I have to state this explicitly?