【问题标题】:what does the A stand for in sequenceA?序列A中的A代表什么?
【发布时间】:2017-03-04 00:39:06
【问题描述】:

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

【问题讨论】:

    标签: haskell naming-conventions traversable


    【解决方案1】:

    “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 与缺少 @987654339 的单子的任何使用@ 实例。既然如此,就在通用版本的名称中添加了一个额外的“A”。


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

    【讨论】:

      猜你喜欢
      • 2017-01-18
      • 1970-01-01
      • 2020-08-15
      • 2014-01-05
      • 2015-09-17
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-18
      相关资源
      最近更新 更多