这个事实能否以某种方式提供另一种解释,为什么Scala的Function1[-T1,+R]具有相同的属性?
我已经看到了这个声明,例如here,但是在两个概念之间的联系应该被解释的时候,有太多的手挥动它吹走了我.
解决方法
一种是通常的类型和功能类别,其中类型是对象,箭头是函数.
另一个是类型和子类型类别,子类型关系是箭头.这个类别是一个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混淆.
免责声明:我从未研究过类别理论.我可能知道也可能不知道我在说什么.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。