13得票1回答
为什么`[1,"a"] :: [forall a。Show a => a]`不被允许?

在我(可能不正确的)理解中,以下两个列表应该是等价的:[1, "a"] :: [forall a. Show a => a] data V = forall a. Show a => V a [V 1, V "a"] :: [V] 然而,第一个不被接受,但第二个可以正常工作(使用...

13得票2回答
在Haskell中对多态列表进行折叠

我有一个包含多种类型的记录集合,它们互相引用,都实现了一个公共的类型类。该类型类包含对变量及其所有子元素进行操作的函数,非常类似于Uniplate中的para函数。 以下是一个简化的代码示例,我想构建这个功能。在GHC中,是否可能(并且合理)获得通用功能来折叠实现给定类型类的记录字段...{...

12得票2回答
如何在Haskell中声明抽象数据容器类型?

我阅读了William Cook的"On Data Abstraction, Revisited",并重新阅读了Ralf Laemmel的"The expression lemma",试图理解如何在Haskell中应用前者的思想。因此,我正在尝试理解如何在不指定类型的情况下在Haskell中实...

12得票2回答
为什么 Array[T forSome { type T; }] 表示 Array[Any]?

我正在阅读文章《Scala中的存在类型》,发现有些东西我无法理解:http://www.drmaciver.com/2008/03/existential-types-in-scala/ Array[T] forSome { type T; } Array[T forSome { type ...

12得票2回答
所有使用`forSome`的情况都可以用等效的`_`替换吗?

例如,List[T] forSome { type T } 等同于 List[_],但是是否对于forSome的每个可能的用法都是这样,还是有某些情况下forSome不能被第二种语法的等价物所替换?

12得票2回答
存在类型和类型成员

有效的方法(A部分) 假设我有一个带有类型参数的特性: trait A[T] 我可以使用存在类型来编写一个方法,该方法将接受一个集合,其中所有的A都有相同的T: def foo(as: Seq[A[X]] forSome { type X }) = true 请注意,这与以下内容...

11得票2回答
C++概念是一种存在类型吗?

我在维基百科上查看存在类型的定义(Existential_types),感觉与 C++ 中的概念有些相似(尤其是 concepts lite)。 C++ 的 concepts 是否是存在类型的一种形式? 如果不是,两者之间有什么区别?

11得票2回答
使用单例库时,存在两个存在量无法推导出 KnownNat。

我正在尝试使用单例库,但我遇到了一个我不理解的情况。{-# LANGUAGE GADTs, StandaloneDeriving, RankNTypes, ScopedTypeVariables, FlexibleInstances, KindSignatures, DataKinds, St...

10得票2回答
返回存在类型的Haskell函数

是否可以编写一个Haskell函数,生成一个参数化类型,其中确切的类型参数被隐藏起来?例如:f :: T -> (exists a. U a)?明显的尝试: {-# LANGUAGE ExistentialQuantification #-} data D a = D a data...

10得票1回答
Haskell 存在类型

我正在努力理解Haskell的存在类型,我的第一个例子是可以显示的各种东西的异构列表: {-# LANGUAGE ExistentialQuantification #-} data Showable = forall a. Show a => Showable a showable...