Q:

error message when implementing `((->) r)` monad (type mismatch)

I'm just starting to learn haskell, and I'm trying to implement some common monads as exercises for myself.  As I was fiddling with the ((->) r) monad, I implemented this (wrong) definition:
instance Monad ((->) r) where
   return x = \_ -> x
   m >>= f = \c -> (f .  m) c

GHCi complained to me with
• Couldn't match expected type ‘b’ with actual type ‘t -> b’
  `b’ is a rigid type variable bound by
    the type signature for:
      (>>=) :: forall a b. (t -> a) -> (a -> t -> b) -> t -> b

whereas the type should be:
(>>=) :: (t -> a ) -> (a -> t -> b) -> t -> b

Why does my implementation break it?  And seemingly, the forall version should give the exact same type, but GHCi thinks otherwise.  What's the difference? 

A:

My fatal misunderstanding was that I thought the error message meant that my implementation had an incorrect type signature. ( I thought that because there was a forall in the type signature.)  It turns out that's not the actual error, and my error in the implementation was that I needed to apply another r term to both f and m in my implementation.  Thanks to @luqui and @melpomene for pointing it out to me

