sequenceA中的A代表什么?

what does the A stand for in sequenceA?

Traversable 中的 sequenceA 代表什么?为什么最后要大写A?我已经学习 Haskell 几个月了,这是困扰我一段时间的事情之一。

"A" 代表 Applicative,如 sequenceA 中的约束类型:

sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)

那个"A"是历史偶然的结果。曾几何时,Haskell 中既没有 Applicative 也不存在 Traversable。尽管如此,一个完全像 sequenceA 的函数已经存在——除了它有一个更具体的类型:

sequence :: Monad m => [m a] -> m [a]

当引入 ApplicativeTraversable 时,函数从列表泛化到任何 Traversable [1]:

sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)

sequenceMonad 约束是不必要的限制。然而,在那时,将其进一步推广到 Applicative 并不是一种选择。问题是,直到去年年初,Applicative 还不是 Monad 的超类,因此将签名泛化为 Applicative 会破坏 sequence 的任何使用] 缺少 Applicative 实例的单子。既然如此,在通用版的名字上多加了一个"A"


[1]:但是请注意,Prelude 直到最近才继续使用特定于列表的版本。