每个类型构造函数(`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
,即恒等函数。定律是微不足道的,因为唯一正在进行的组合是与它们自己组合的恒等箭头。
众所周知,种类为 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
,即恒等函数。定律是微不足道的,因为唯一正在进行的组合是与它们自己组合的恒等箭头。