这段代码中的
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
(无错误)。
forall
通常做什么,或者高阶类型是什么。问题在于,在考虑后面的注释的情况下,具体地说,forall
在这段代码中正在做什么。 - Matt Fenwick