120得票5回答
Rank2Types的目的是什么?

我并不是Haskell的专家,所以这可能是一个非常简单的问题。 Rank2Types解决了哪些语言限制?在Haskell中,函数不已经支持多态参数吗?

45得票1回答
新手的STArray文档以及与State/ST相关的问题

我很难理解从文档和其他通过Google搜索得到的指南/讨论中的STArray。下面有一些相关问题。 根据文档,STArray是 在ST monad中可变的boxed和unboxed数组。 这让我觉得STArray旨在被用作在函数之间传递的状态(想象一下你有一个需要经常更新的向量)...

33得票1回答
在Idris中进行n阶量化

在Idris 0.9.12中,我只能以相当笨拙的方式实现排名n类型: tupleId : ((a : Type) -> a -> a) -> (a, b) -> (a, b) tupleId f (a, b) = (f _ a, f _ b) 在类型应用的任何位置...

29得票2回答
使用Rank2Types有什么优势,相对于RankNTypes呢?

据我所知,仅对于二阶类型,存在可决定的类型检查算法。 GHC 是否以某种方式利用了这一事实,并且是否有任何实际影响? 对于二阶类型,是否也有主类型和类型推断算法?如果是,GHC 是否使用它? 相比于 n 阶类型,二阶类型还有其他优势吗?

27得票2回答
使用3级(或更高级别)多态的用例是什么?

我见过一些使用rank-2多态性的用例(最突出的例子是 ST Monad),但没有比这更高阶的用例。 有人知道这样的用例吗?

25得票1回答
为什么类型同义词中的类约束需要 RankNTypes?

这个编译完好无误:type List a = [a] 但是当我引入一个类别约束时,编译器要求包含 RankNTypes:type List2 a = Num a => [a] 在包含了那个扩展后,代码可以正常编译。为什么编译这段代码需要那个扩展呢? 编辑:我为什么需要这个限制? 我正...

19得票4回答
您在Haskell中发现了哪些高阶类型的用法?

高阶类型看起来很有趣。从Haskell wikibook获得以下示例:foo :: (forall a. a -> a) -> (Char,Bool) foo f = (f 'c', f True) 现在我们可以在不让编译器爆炸的情况下评估foo id了。这个例子很快就被书中的真实世界例子所跟...

19得票1回答
Haskell中并不总是使用"Eta reduce"?

我发现我可以说 {-# LANGUAGE RankNTypes #-} f1 :: (forall b.b -> b) -> (forall c.c -> c) f1 f = id f (并且HLint告诉我我可以在这里进行“Eta reduce”),但是 f2 ::...

19得票2回答
如何使用高阶(阶-N)类型多态表达存在类型?

我们习惯于为多态函数使用普遍量化的类型。普遍量化的类型比存在量化的类型使用更频繁。如何使用普遍类型量化器来表示存在性量化的类型?

17得票2回答
具有RankNTypes的newtype

如果我想声明一个 newtype,以便该值的类型受限于必须具有某个类型类的实例,似乎可以使用以下方法: ```haskell newtype MyType a = MyType {unMyType :: a} deriving (SomeTypeclass) ``` ```ha...