Какова цель forall
в этом коде?
class Monad m where
(>>=) :: forall a b. m a -> (a -> m b) -> m b
(>>) :: forall a b. m a -> m b -> m b
-- Explicit for-alls so that we know what order to
-- give type arguments when desugaring
(некоторый код опущен). Это из кода для Monads.
Мой фон: я действительно не понимаю forall
или когда Haskell имеет их неявно.
Кроме того, это может быть незначительным, но GHCi позволяет мне пропускать forall
при предоставлении >>
типа:
Prelude> :t (>>) :: Monad m => m a -> m b -> m b
(>>) :: Monad m => m a -> m b -> m b
:: (Monad m) => m a -> m b -> m b
(без ошибок).