通过它的定义列表然后是一个endofunctor,它将一个int类型映射(可以解释为一个函数吗?)到List [int]和bool到List [bool]并映射(再一个函数?)a morphism int - >布尔到 List [int] - >列表[BOOL]
所以,到目前为止,这有点道理。但令我陷入深深困惑的是需要伴随它的自然变换的额外定义: 一个。 Unit ...将int转换为List [int](List functor的定义是否已经暗示了这个?这是我有一个主要的困惑
湾是否总是必须将List仿函数理解为从int到List [int]的映射,而不是从int到List [bool]的映射?
℃。 List [int]中的单元自然转换int是不同于从int到List [int]的映射,将List定义为functor是隐含的吗?我想这只是我先前问题的重新陈述。
答案 0 :(得分:2)
单位是从C上的Identity functor到List的自然转换;通常,自然变换a:F =>两个平行函子F之间的G,G:X - > Y由
组成你应该考虑如上所述的自然变换作为从F到“G”的方式。将其应用于你的单位列表情况,单位为每个类型X指定一个函数Unit_X:X - >列出[X],这只是用一个元素查看你的类型的实例作为List [X]实例。
我不明白你在b上究竟在问什么。但就c而言。他们是完全不同的东西。定义中没有从int到List [int]的映射;定义给出的是,对于每个地图f:X - > Y,地图列表(f):列表[X] - >列表[Y]; Unit给你的是一种方式,可以将任何类型的X视为某些特定类型的X列表,即具有一个元素的列表。
希望它有所帮助;从您使用的List []表示法中,也许您来自Scala / Java背景,如果是这种情况,您可能会发现Scala中的类别理论介绍有趣:http://www.weiglewilczek.com/blog/?p=2760
答案 1 :(得分:0)
嗯,令人困惑的是,Cat A和Cat B之间的仿函数F被定义为:
映射:
这就是我在书中定义这些内容的方式。上面的点#1(F映射A到F(A)) - 读取像我的态度,将A转换成F(A)。如果是这种情况,为什么我们需要单位自然变换,从A到F(A)?
非常奇怪的是,仿函数定义使用了单词map(但不使用单词morphism)。我看到A到F(A)不是一个态射,而是一个地图。