211得票11回答
什么是存在类型?

我阅读了维基百科文章存在类型。我了解到它们被称为存在类型,因为它们使用了存在运算符(∃)。但是我不确定它的意义是什么。那么,如何区分 T = ∃X { X a; int f(X); } 并且 T = ∀x { X a; int f(X); } ?

83得票2回答
Scala中泛型中的Any和下划线有何不同?

以下Scala中泛型定义的区别是什么: class Foo[T <: List[_]] 和 class Bar[T <: List[Any]] 我的直觉告诉我它们大致相同,但后者更加明确。我发现有些情况前者可以编译通过,而后者却不能,但我无法确定具体区别。 谢谢! ...

70得票3回答
存在类型的理论基础是什么?

Haskell Wiki讲解了如何使用存在类型的相关知识,但我还不太理解它们背后的理论。 考虑下面这个存在类型的例子:data S = forall a. Show a => S a -- (1) 定义一个类型包装器,用于可以转换为String的内容。Wiki提到我们想要定义的...

61得票2回答
Haskell中的存在类型与全局量化类型

这两者之间到底有什么区别?我认为我理解存在类型的工作原理,它们就像面向对象编程中没有向下转换方式的基类。通用类型又有何不同?

37得票2回答
Scala的forSome关键字是什么,何时使用?

List[T] forSome {type T}和List[T forSome {type T}]有什么区别?如何用英语阅读它们?我应该如何理解forSome关键字?forSome的一些实际用途是什么?除了简单的T forSome {type T}用法外,还有哪些有用的实用且更复杂的用法?

32得票2回答
为什么我不能在存在量化类型中使用记录选择器?

当使用存在类型时,我们必须使用模式匹配语法来提取forall的值。我们不能将普通的记录选择器用作函数。 GHC会报错并建议使用模式匹配来定义yALL:{-# LANGUAGE ExistentialQuantification #-} data ALL = forall a. Show a ...

31得票5回答
Scala的存在类型和Java的通配符在示例中的区别是什么?

比Stack Overflow问题 “什么是存在类型?”更具体,Scala的存在类型和Java的通配符有什么区别,最好有一些说明性的例子? 到目前为止,我看到的所有东西似乎都相当等效。 几个参考文献。Martin Odersky 提到了它们; Google的我的问题的热门搜索结果: ...

30得票2回答
为什么GADT/存在类型数据构造函数不能在惰性模式中使用?

今天在尝试使用延迟模式匹配existential GADT构造函数时,我遇到了一个编译器错误: 存在类型或GADT数据构造函数不能在惰性(~)模式内使用 为什么有这个限制?如果允许使用会发生什么“糟糕”的事情?

23得票3回答
类型量词是什么?

许多静态类型语言都支持参数化多态性。例如,在C#中可以定义如下内容: T Foo<T>(T x){ return x; } 在调用点,您可以执行以下操作: int y = Foo<int>(3); 这些类型有时也会写成这样: Foo :: forall T...

20得票2回答
为什么GHC Haskell中不存在存在量化的类型变量

有全称量化的类型变量,也有存在量化的数据类型。然而,尽管人们有时会提供伪代码形式的exists a. Int -> a来帮助解释概念,但似乎编译器扩展并没有任何真正感兴趣的地方。这只是一种“增加这个没有太多价值”的事情(因为对我来说似乎很有价值),还是像不可判定性那样存在问题,使其真正不...