可遍历定律是否可以源自每个可遍历也是函子的事实吗?

雅库布·阿诺德(Jakub Arnold)

我一直在思考为什么Traversable类型类需要aFunctorFoldable,而不仅需要a Foldable,因为它不使用任何部分Functor

class (Functor t, Foldable t) => Traversable t where
    traverse  :: Applicative f => (a -> f b) -> t a -> f (t b)
    sequenceA :: Applicative f => t (f a) -> f (t a)

似乎4.6版文档中没有关于Traversable的定律,这使我认为它们可以源自于每个Traversable都是函子的事实吗?

在“迭代器模式本质”一文(第5.1节)中,指出了一些自由定理,traverse这些定理直接来自其类型,但是该论文没有深入介绍这种情况。

Traversable 基本4.7文档中描述法律从何而来?

到处走走

基本上,任何* -> *在其参数中协变的类型构造函数都是规范函子由于Applicative f显然是协变的,因此t签名sequenceA :: t (f a) -> f (t a)有意义,因此Functor要求本质上是多余的。但是,与长时间缺少(因为不需要)Applicative => Monad超类一样,忽略这种“显而易见的”要求并不是一个好主意,它只会导致代码重复和混淆同义函数。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

Related 相关文章

热门标签

归档