自然转型中的算子在哪里?

use*_*650 8 haskell functor category-theory

自从我在Edward Kmett的旧类别附加包中看到自然变换的定义以来,我就一直有这个问题.

-- | A natural transformation between functors f and g.
type f :~> g = forall a. f a -> g a
Run Code Online (Sandbox Code Playgroud)

但现在阅读斯蒂芬·迪尔的博客文章adjunctions,我觉得这样的:

在我们的上下文中的自然变换将是与两个Haskell仿函数实例f和g相关联的多态函数,其具有类型签名(Functor f,Functor g)=> forall a.fa - > g a.可以使用以下类型同义词编写.

type Nat f g = forall a. f a -> g a
Run Code Online (Sandbox Code Playgroud)

面对我的"我将继续无视这种"的态度,这是一记耳光.所以对于这个问题:为什么可以突然放弃仿函数约束?

Tar*_*mil 2

Haskell 中不允许对类型同义词施加约束。即使对于数据类型,它在 Haskell 2010 中也已被弃用。相反,应该将约束放在对这种类型的值进行操作的函数上。

  • 如果我启用“RankNTypes”和“TypeOperators”:“type f :-> g = forall x”,这对我来说效果很好。(函子 f) => fx -> gx` (5认同)