作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
这个问题出现在#haskell 的讨论中。
如果它的出现是积极的,那么将深层嵌套的 forall 提升到顶部是否总是正确的?
例如:
((forall a. P(a)) -> S) -> T
forall a. (P(a) -> S) -> T
(P(a) -> S) -> T
->
的右边。等等。
最佳答案
认为
foo :: ((forall a. P a) -> S) -> T
S = (P Int, P Char)
.一个可能的类型正确调用可能是:
foo (\x :: (forall a. P a) -> (x,x))
bar :: forall a. (P a -> S) -> T
S
如上。现在很难调用
bar
!让我们尝试调用
a = Int
:
bar (\x :: P Int -> (x, something))
something :: P Char
这不能简单地从
x
导出.如果
a = Char
也会发生同样的情况。 .如果
a
不是
Int, Char
,那么情况会更糟。
foo
的类型比
bar
之一强.作为一个更强的假设,
foo
的类型因此在证明中可以应用到更多的案例中。因此,发现作为一个术语,
foo
应该不足为奇。适用于更多场景! :)
关于haskell - 将正向的所有量词提升到外部是否有效?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22094962/
我是一名优秀的程序员,十分优秀!