在不变函子的上下文中,“正/负位置的参数化类型”意味着什么?

问题描述 投票:0回答:1

来自 PureScript 的

Data.Functor.Invariant
文档(重点是我的):

一种函子类型,可用于调整包装函数的类型,其中 参数化类型同时出现在 positivenegative 位置,例如

F (a -> a)

上面的术语“”和“负位置”指的是什么?
..并且还想知道为什么

F (a -> a)
需要一种全新类型的函子,但这可能应该是另一个问题..

我试图通过更多地了解不变函子并查找与函数式编程相关的术语“正”、“负”来解决这个问题,但还无法将这些点联系起来。有没有我错过的基本资源?或者,至少应该从哪里开始理解这些概念? (甚至不确定正确的主题是什么;请参阅下面我的研究尝试。)


从搜索结果中 “不变函子正负”“正不变极性与负不变极性” , “类型理论正负极性不变量” ,和“什么是不变函子”

functional-programming purescript purely-functional type-theory
1个回答
0
投票

我不知道这个术语从何而来,但它是一种分析参数多态类型的方法,以确定它是协变、逆变还是不变。

FWIW,我发现Thinking with Types(第 3 章)中给出的解释非常有用且易于理解。这是一个很短的章节(只有六页),但仍然太长,无法在这里复制(此外,我会侵犯作者的版权)。不过,事情的要点是

“仅出现在正位置的类型变量是协变的。仅出现在负位置的类型变量是逆变的。而同时出现在两者中的类型变量则成为不变的。”

对于像

a -> b
这样的简单函数类型,
a
处于负位置,
b
处于正位置。因此,
a -> b
b
中是协变的,但在
a
中是逆变的。

不过,还有更多内容,因为如何分析像

(Int -> a) -> Int
(a -> Int) -> Int
(书中的示例)这样的类型?

寻找此类问题的答案涉及到一些易于理解的代数,正负位置的概念对此有所帮助。

需要明确的是,我与桑迪·马奎尔没有任何关系; 我只是喜欢这本书。我确信这种分析来自其他地方,但是(如果我对这本书有一点抱怨的话),桑迪·马奎尔没有提供引用。

最新问题
© www.soinside.com 2019 - 2025. All rights reserved.