加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

Hom Functor和Scala的Function1的逆变之间有什么联系吗?

发布时间:2020-12-16 10:06:59 所属栏目:安全 来源:网络整理
导读:Hom functor Hom( –,– )在第一个参数中是逆变的,在第二个参数中是协变的. 这个事实能否以某种方式提供另一种解释,为什么Scala的Function1[-T1,+R]具有相同的属性? 我已经看到了这个声明,例如here,但是在两个概念之间的联系应该被解释的时候,有太多的手挥
Hom functor Hom( –,– )在第一个参数中是逆变的,在第二个参数中是协变的.

这个事实能否以某种方式提供另一种解释,为什么Scala的Function1[-T1,+R]具有相同的属性?

我已经看到了这个声明,例如here,但是在两个概念之间的联系应该被解释的时候,有太多的手挥动它吹走了我.

解决方法

Scala类型有两类.

一种是通常的类型和功能类别,其中类型是对象,箭头是函数.

另一个是类型和子类型类别,子类型关系是箭头.这个类别是一个poset.

Scala中的协方差和逆变性恰好是后一类中的endofunctor的协方差和逆变.

现在第二类碰巧是第一类的子类别,因为投影箭头将子类型映射到超类型.第一类的这些箭头正好是(所有)第二类的箭头.因此,第一类的每个协变endofunctor自然地(即,通过自然变换)是第二类的协变endofunctor.

实际上,如果仿函数F将A映射到A’并且B映射到B’并且每个箭头f:A – > B到箭头f’:A’ – > B’,如果A是B的子类型,则投影箭头prj_A,B被映射到投影箭头prj_A’,B’,并且如果存在,则A’是B’的子类型.逆变函子也是如此.

现在只剩下看到Function1在某种意义上是Hom仿函数.实际上,如果我们将Scala类型视为其一组值,则Function1 [A,B]是从A到B的一组态射(Scala函数).箭头映射由组合给出.由于它在第一类中是协变的(逆变),因此在第二类中它也必须是协变的(逆变).

编辑:更正的子类型/ supertupe混淆.

免责声明:我从未研究过类别理论.我可能知道也可能不知道我在说什么.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读