我一直在阅读维基教科书上的 existential section,这是那里所说的:


forall 如何作为这些集合的交集?

形式逻辑中的 forall 意味着它可以是话语领域中的任何值。在 Haskell 中它是如何转换为交集的?

最佳答案

您必须在消极或积极的上下文中查看类型 - 即无论是在构建过程中还是在使用过程中(拥有/接收,这可能在游戏语义中最容易理解,但我不熟悉它们)。

如果我“给你”一个 forall a . a 类型,那么你知道我必须以某种方式构造它。特定构造值具有 forall a . a 类型的唯一方法是它可以是话语领域中“所有”类型的替代品——当然,这是它们功能的交集。在理智的语言中不存在这样的值( Void ),但在 Haskell 中我们有底线。

bottom :: forall a . a
bottom = let a = a in a

另一方面,如果我以某种方式神奇地拥有 forall a . a 的值并且我尝试使用它,那么我们会得到相反的效果——我可以将它视为话语领域中所有类型联合中的任何东西(这就是你寻找),因此我有
absurd :: (forall a . a) -> b
absurd a = a

关于haskell - forall 作为这些集合的交集,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25344032/

10-09 05:39