dim*_*ime 4 haskell naming-conventions traversable
什么是sequenceA从Traversable的立场?为什么最后有资本A?我已经学习了几个月的Haskell,这是困扰我一段时间的事情之一.
"A"代表Applicative,如sequenceA's type 中的约束:
sequenceA :: (Traversable t, Applicative f) => t (f a) -> f (t a)
Run Code Online (Sandbox Code Playgroud)
"A"就是历史事故的结果.曾几何时,Haskell 既不存在,Applicative也不Traversable存在.尽管如此,函数与sequenceA已经存在的函数完全相同- 除了它具有更具体的类型:
sequence :: Monad m => [m a] -> m [a]
Run Code Online (Sandbox Code Playgroud)
当Applicative与Traversable进行了介绍,该函数是从列表推广到任何Traversable[1]:
sequence :: (Traversable t, Monad m) => t (m a) -> m (t a)
Run Code Online (Sandbox Code Playgroud)
sequence的Monad约束是不必要的限制.然而,那时候,进一步推广它Applicative不是一种选择.问题是,直到去年年初,它Applicative并不是Monad应该的超类,因此推广签名Applicative会破坏sequence对缺少Applicative实例的monad的任何使用.既然如此,在通用版本的名称中添加了额外的"A".
[1]:但请注意,Prelude在最近才继续使用特定于列表的版本.
| 归档时间: |
|
| 查看次数: |
170 次 |
| 最近记录: |