每个类型构造函数`Type -> Type`都是某种函子吗

问题描述

众所周知,类型为 Type -> Type 的类型构造函数(在 System F-omega 中)如果实现了函数 Functor,则它只是一个 (a -> b) -> f a -> f b。这是一个无法无天的函子,它也应该遵守函子定律(保留组合和身份)。所以带有 Type -> Type 的类型构造函数并不总是一个函子。但这只是关于类型范畴中的协变内函子。还有逆变函子和更多种类的函子。

我的问题:任何类型为 Type -> Type 的构造函数/函数是否都是某种(范畴论)合法函子(协变、逆变或其他类型)?

解决方法

是的,它始终是一个往返于 Haskell 类型的离散类别(只有标识箭头的类别)的函子。它为每个对象 a 分配一个对象 f a。对于每个箭头(仅是恒等函数)f a -> f a,我们自动有一个箭头 a -> a,即恒等函数。由于唯一正在进行的组合是由自身组合而成的恒等箭头,因此这些定律是微不足道的。