Hello haskellers, I wonder why <$> and <$!> have different typeclass constraints? (<$>) :: Functor f => (a -> b) -> f a -> f b (<$!>) :: Monad m => (a -> b) -> m a -> m b