自从我在Edward Kmett的旧类别附加包中看到definition of natural transformations之后,我就一直有这个问题:
-- | A natural transformation between functors f and g.
type f :~> g = forall a. f a -> g a
但是现在阅读Stephen adjunctions上的Stephen Diehl的博文,我发现了这个:
在我们的上下文中的自然变换将是多态函数 与两个Haskell仿函数实例f和g相关联 签名(Functor f,Functor g)=>弗拉尔f a - > g a。哪个可以 用以下类型同义词书写。
type Nat f g = forall a. f a -> g a
面对我的“我将继续无视这种”的态度,这是一记耳光。所以对于这个问题:为什么可以突然放弃仿函数约束?
答案 0 :(得分:2)
Haskell中不允许对类型同义词设置约束。甚至对于数据类型,它在Haskell 2010中已被弃用。相反,约束应放在对此类值进行操作的函数上。