首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Traversable的自然法则是什么意思?

Traversable的自然法则是什么意思?
EN

Stack Overflow用户
提问于 2019-11-25 01:02:17
回答 1查看 95关注 0票数 8

自然法规定:

代码语言:javascript
复制
t . traverse f == traverse (t . f) -- for every applicative transformer t

现在对于定律的RHS,如果f有类型Applicative a => x -> a y,那么由于函数组成,t必须是(Applicative a, Applicative b) => a y -> b y类型。

对于LHS,遍历f的类型为(Applicative a, Traversable c) => c x -> a (c y)。但由于遍历f由t组成。遍历f,t的类型必须是(c x -> a (c y)) -> b y。

现在,对于LHS,t的类型是a (c,y) -> b y,但是从RHS的角度,它的类型是a,y,->,b,从类型的角度来看,这个定律听起来怎么样?

编辑:修正了LHS中的类型t

EN

回答 1

Stack Overflow用户

发布于 2019-11-25 01:32:07

我认为您忽略的是,t应该是一种自然转换(它可能还必须具有一些结构保持属性)。自然转换是量化的,如下所示:

代码语言:javascript
复制
t :: forall z. a z -> b z   -- "t is an N.T. from a ~> b"

在右边,我们在y实例化它,以获得t :: a y -> b y;在左边,我们在c y实例化它,以获得a (c y) -> b (c y)。我的想法是,无论里面是什么,自然转换都会改变外层。自然法则总是谈论实例化事物的不同方式之间的关系。

代码语言:javascript
复制
t                :: forall z. a z -> b z

f                :: x -> a y
t                :: a y -> b y           -- instantiated at y
t . f            :: x -> b y
traverse (t . f) :: c x -> b (c y)

traverse f       :: c x -> a (c y)
t                :: a (c y) -> b (c y)   -- instantiated at (c y)
t . traverse f   :: c x -> b (c y)
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/59020198

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档