【发布时间】:2011-07-11 05:51:39
【问题描述】:
我很难理解与 Haskell 类型系统相关的 exists 关键字。据我所知,Haskell中默认没有这样的关键字,但是:
- 有extensions 将它们添加到类似
data Accum a = exists s. MkAccum s (a -> s -> s) (s -> a)的声明中 - 我看过一篇关于它们的论文,并且(如果我没记错的话)它指出
exists关键字对于类型系统来说是不必要的,因为它可以被forall概括
但我什至无法理解exists 的含义。
当我说 forall a . a -> Int 时,它的意思是(在我的理解中,我猜是不正确的)“对于每个(类型)a,都有一个类型为 a -> Int 的函数”:
myF1 :: forall a . a -> Int
myF1 _ = 123
-- okay, that function (`a -> Int`) does exist for any `a`
-- because we have just defined it
当我说exists a . a -> Int 时,它到底是什么意思? “至少有一种类型 a 有一个类型为 a -> Int 的函数”?为什么要写这样的声明?目的是什么?语义?编译器行为?
myF2 :: exists a . a -> Int
myF2 _ = 123
-- okay, there is at least one type `a` for which there is such function
-- because, in fact, we have just defined it for any type
-- and there is at least one type...
-- so these two lines are equivalent to the two lines above
请注意,它并不是一个可以编译的真实代码,只是我想象中的一个例子,然后我听说了这些量词。
附:我在 Haskell 中并不完全是新手(可能像二年级学生),但我缺乏这些东西的数学基础。
【问题讨论】:
-
我期待一个很好的答案。感谢您的提问。
-
此链接:haskell.org/haskellwiki/Existential_type 可能会有所帮助。
-
Ctrl-F exists- 出现一次,而不是在正文中……但我正在阅读,非常感谢 -
@valya:是的。那里链接的 Essential Haskell 博士论文也许也值得一读。
-
回答这个问题可能会有所帮助:stackoverflow.com/questions/3071136/…
标签: haskell exists forall quantifiers