- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
根据this link describing existential types :
A value of an existential type like ∃x. F(x) is a pair containing some type x and a value of the type F(x). Whereas a value of a polymorphic type like ∀x. F(x) is a function that takes some type x and produces a value of type F(x). In both cases, the type closes over some type constructor F.
但是具有类型类约束的函数定义不会与类型类实例配对。
这不是forall f, exists Functor f, ...
(因为很明显不是每个类型 f 都有仿函数 f 的实例,因此 exists Functor f ...
不正确)。
这不是exists f and Functor f, ...
(因为它适用于满足 f 的所有实例,而不仅仅是所选实例)。
对我来说,它是 forall f and instances of Functor f, ...
,更像是 scala 的隐式参数而不是存在类型。
根据this link describing type classes :
[The class declaration for
Eq
] means, logically, there is a type a for which the typea -> a -> Bool
is inhabited, or, from a it can be proved thata -> a -> Bool
(the class promises two different proofs for this, having names==
and/=
). This proposition is of existential nature (not to be confused with existential type)
类型类和存在类型之间有什么区别,为什么它们都被认为是“存在的”?
最佳答案
您引用的维基是错误的,或者至少是不精确的。类声明不是一个存在命题;而是一个命题。它不是任何类型的命题,而只是速记的定义。如果你愿意的话,人们可以继续使用该定义提出一个命题,但就其本身而言,情况并非如此。例如,
class Eq a where (==) :: a -> a -> Bool
做出了新的定义。然后,人们可以使用它写出一个不存在的、非普遍的命题,例如,
Eq ()
我们可以通过写来“证明”:
instance Eq () where () == () = True
或者可以写
prop_ExistsFoo :: exists a. Eq a *> a
作为一个存在主义命题。 (Haskell 实际上没有 exists
命题前者,也没有 (*>)
。将 (*>)
视为与 (=>)
-- 就像 exists
与 forall
是对偶一样。所以其中 (=>)
是一个函数,接受约束的证据,(*>)
是一个包含约束证据的元组,就像 forall
是一个在 存在时接受类型的函数
用于包含类型的元组。)我们可以通过以下方式“证明”这个命题:
prop_ExistsFoo = ()
这里注意,exists
元组中包含的类型是()
; (*>)
元组中包含的证据是我们上面编写的 Eq ()
实例。我很尊重 Haskell 在这里使类型和实例保持沉默和隐含的倾向,因此它们不会出现在可见的证明文本中。
类似地,我们可以通过编写类似的内容,从 Eq
中提出一个不同的、通用的命题
prop_ForallEq :: forall a. Eq a => a
这不是非平凡可证明的,或者
prop_ForallEq2 :: forall a. Eq a => a -> a -> Bool
我们可以“证明”,例如,通过写作
prop_ForallEq2 x y = not (x == y)
或者以许多其他方式。
但是类声明本身绝对不是一个存在命题,并且它不具有“存在性质”,无论它的含义是什么。不要对此感到困惑和困惑,请祝贺自己正确地将这个不正确的主张标记为令人困惑!
关于haskell - 为什么说类型类是存在的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56829394/
我正在编写一个 JS 程序,我有一个条件可以根据输入进行一些算术运算。如果我遇到操作类型为“add”,我需要将两个值相加;如果我得到“times”作为我的运算符值,我需要相乘。 我尝试使用基本的 if
我正在编写一个仅作为查看器的应用程序 - 无需创建、无需编辑、无需保存。 显然,那么,不会有自动保存,但是还有什么其他东西可以从 autosavesInPlace 返回 YES 改变世界,从而对观看者
Azure 开始出现以下错误: Unsupported token. Unable to initialize the authorization context. 每当我尝试更改我的应用程序时,我都
当我编写 out.println() 时,Eclipse 提示 out 无法解析。 我导入了 java.io.* 和其他 servlet 包。 最佳答案 只是在黑暗中拍摄,我认为这就是您正在寻找的出路
Azure 开始出现以下错误: Unsupported token. Unable to initialize the authorization context. 每当我尝试更改我的应用程序时,我都
是否可以执行类似的操作来检查 radio 表单是否未选中: if !($(this).find("input:checked")) {} 正确的语法是什么? 最佳答案 试试这个: $(this).fi
我正在尝试从表中选择行,其中 date 列值等于澳大利亚悉尼的当前日期 (UTC+10h)。服务器位于悉尼,因此我想使用 SYSDATETIME()。这是我的查询: SELECT * FROM dat
我听说 JavaScript 实际上并不像其他语言那样“指向”内存中的值(或对象,因为在 JS 中一切都是对象)。相反,JS 变量引用内存中的其他值/对象。这是真的?指向和引用之间的语义区别是什么?
我的计算机科学类(class)有一项作业,其中要求读取包含多个测试分数的文件,并要求我对它们进行求和并求平均值。虽然求和和求平均值很容易,但我在读取文件时遇到问题。老师说用这个语法 Scanner s
Java 的 XML 解析器似乎认为我的 XML 文档在根元素之后的格式不正确。但我已经用几种工具验证了它,但他们都不同意。这可能是我的代码错误,而不是文档本身的错误。如果你们能给我提供任何帮助,我将
根据这份文件: http://www.stroustrup.com/terminology.pdf l 值具有同一性且不可移动。 公关值是可移动的,但没有身份。 x 值具有同一性并且是可移动的。 关于
这个问题在这里已经有了答案: What does "atomic" mean in programming? (7 个答案) 关闭 5 年前。 我正在阅读 MongoDB 的 documentati
在 PHP 和 MySQL 中有没有一种方法能够比较 2 个不同的数组(列表)变量并说出有多少项是相同的 例如, $array1 = "hello, bye, google, laptop, yes"
本文来自 Effective Java Programs that use the int enum pattern are brittle. Because int enums are compil
C++ 中有一些特性是类型安全的,而另一些则不是。 C++ 类型安全示例: char c = 'a'; int *p = &c; // this is not allowed (compiler
我有一个 CS 课的作业,它说要读取一个包含多个测试分数的文件,并要求我对它们求和并取平均值。虽然求和和平均很容易,但我在读取文件时遇到了问题。老师说要用这个语法 Scanner scores = n
嗯.. 有时,PyDev 会说“ Unresolved 导入错误”。 在我的环境中 Python2.6.6 Eclipse3.7 PyDev2.2.2 错误是。 > Unresolved import
我正在向服务器发送请求,服务器正在处理请求并做出响应。但是在我的应用程序中,我收到了: Error Domain=NSURLErrorDomain Code=-1017 "cannot parse r
在我最近的一次讨论中,有人告诉我这样说是不正确的,因为 Ajax 已经是 Javascript。 上下文: “我如何在网页中 blablababal,这样它就不必刷新页面” 我的回答: “使用 Jav
下午好。 我一直在尝试使用 ffmpeg 将 .mpeg 拆分为一系列 .jpeg 图像。请注意,这是指定 here 的逆问题,但我面临的问题与该线程的作者面临的问题不同。 具体来说,我已经在我的 f
我是一名优秀的程序员,十分优秀!