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

Is every type constructor (`Type -> Type`) some kind of functor

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

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

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