I wonder if I am dealing with bugs in the type checker (replying to myself).
Curiously if I have
class FunctorF d where
fmapF :: d -> (x -> y) -> F d x -> F d y
fff a = fmapF a id
it compiles correctly. If I infer the type signature of fff I get
fff :: forall d x. (FunctorF d) => d -> F d x -> F d x
On the other side, it fails to compile when this signature is explicit:
fff :: forall d x. (FunctorF d) => d -> F d x -> F d x
fff a = fmapF a id
I am repeating myself in http://hackage.haskell.org/trac/ghc/ticket/2157#comment:6.
Sorry for the cascaded messages,
hugo