higher-rank-types相关内容

你在 Haskell 中发现了更高级别的类型有什么用途?

更高等级的类型看起来很有趣.这个例子来自 Haskell wikibook: foo :: (forall a.a -> a) -> (Char,Bool)foo f = (f 'c', f True) 现在我们可以评估 foo id 而不会导致编译器爆炸.这个例子在本书后面很快出现了我在其他几个地方看到的真实例子:ST monad 和 runST.这很酷. 但是我还没有遇到过这样的情况 ..

什么是“n"?在 RankNTypes 中

我了解 forall 是如何让我们编写多态函数的. 根据这个章节,我们一般写的普通函数是Rank 1类型.而这个函数是Rank 2类型的: foo :: (forall a.a -> a) ->(字符,布尔)foo f = (f 'c', f True) 它是这样解释的: 一般来说,rank-n 类型是一个函数,它至少有一个rank-(n-1) 参数,但没有更高级别的参数. ..
发布时间:2022-01-24 16:21:40 其他开发

如何使用更高等级(rank-N)类型多态性来表达存在类型?

我们习惯于为多态函数使用通用量化的类型.存在量化类型的使用频率要低得多.我们如何使用通用类型量词来表达存在量化类型? 解决方案 事实证明,存在类型只是 Σ 类型(sigma 类型)的一个特例.它们是什么? Sigma 类型 正如 Π-types (pi types) 泛化我们的普通函数类型,允许结果类型依赖其参数的值,Σ-types 泛化对,允许第二个组件的类型依赖第一个值. ..

Rank2Types 的目的是什么?

我不是很精通 Haskell,所以这可能是一个非常简单的问题. 什么语言限制Rank2Types 解决了吗?Haskell 中的函数不是已经支持多态参数了吗? 解决方案 Haskell 中的函数不是已经支持多态参数了吗? 他们有,但只有等级 1.这意味着虽然你可以编写一个没有这个扩展的接受不同类型参数的函数,但你不能编写一个在同一个调用中将其参数用作不同类型的函数. ..
发布时间:2021-12-14 11:35:05 其他开发

类型理论中的种类与等级

我很难理解高级类别和高级类别. Kind非常简单(这要感谢Haskell的文献资料),在讨论类型时,我曾经认为rank就像同类,但显然不是!我没有阅读维基百科文章.那么有人可以解释一下等级吗?高等级是什么意思?更高等级的多态性?怎么样(如果有的话)?比较Scala和Haskell也会很棒. 解决方案 等级的概念与种类的概念并没有真正的联系. 多态类型系统的等级描述了forall在类型 ..
发布时间:2020-07-12 05:36:25 其他开发

在没有不安全的情况下杂耍存在

最近我一直在使用这种类型,我将其理解为自由分布仿函数的编码(有关其切线背景,请参见data Ev g a where Ev :: ((g x -> x) -> a) -> Ev g a deriving instance Functor (Ev g) 存在构造函数可确保我只能通过提供多态提取器forall x. g x -> x来使用Ev g,并且可以为自由构造的提升和降低功能指定兼容类型: ..
发布时间:2020-06-14 18:47:49 其他开发

使用monadic rank-2类型

以下是代码: { - #LANGUAGE RankNTypes,FlexibleContexts,ScopedTypeVariables# - } 模块Foo其中 导入Data.Vector.Generic.Mutable为M 导入Data.Vector.Generic作为V 导入Control.Monad.ST 导入控件.Monad.Primitive import ..
发布时间:2018-06-05 11:08:41 其他开发

异构地图

我需要一个可以包含任意值的映射,只要它们的类型是相同的类型类型。我的第一个幼稚的方法是这样的: type HMap = forall a。 MyClass a => M.Map Int a 但是它似乎不起作用:下面的代码给出了一个编译错误: testFunction ::(a。MyClass a => M.Map Int a) - > Int - > IO( ..

RankNTypes与返回类型不匹配

使用 RankNTypes ,我定义了一个不依赖于类型变量的类型。 我需要定义一些函数用于 ST s ,当然,它不依赖 s 。然而,这导致了一个问题,即具有两个 Int 的表达式应用于 Exp 并不会导致块。为什么? 这是一个复制器: import Control.Monad .ST 导入Data.Vector.Unboxed(Vector) 将合格的Data.Vector. ..
发布时间:2018-06-05 10:51:23 其他开发

Rank2Type有利于RankNTypes吗?

据我所知,一种可判定的类型检查算法仅存在于rank-2类型中。 GHC是否在某种程度上使用了这个事实,它是否有任何实际意义? 是否还有rank-2类型的主要类型概念和类型推断算法?如果是的话,GHC是否使用它? Rank-2类型比rank- n 类型有其他优势吗? 解决方案 Rank2Types 是同义词用于 RankNTypes 。所以现在没有rank-2优于rank-n的优 ..
发布时间:2018-06-04 17:22:52 其他开发

RankN'forall'的类型和范围

这些区别是什么? { - #LANGUAGE RankNTypes# - } f :: forall a。 a - > Int f _ = 1 g ::(forall a。a) - > Int g _ = 1 特别是,为什么我得到 g()? ghci> f() 1 ghci> g() :133:3: 无法与 ..
发布时间:2018-06-04 17:02:40 其他开发

你在Haskell中找到更高级的类型有什么用处?

较高的排名类型看起来非常有趣。这个例子来自 Haskell wikibook : foo ::(forall a。a - > a) - >(Char,Bool) foo f =(f'c',f True) 现在我们可以在没有编译器爆炸的情况下评估 foo id 。这个例子在本书中被我在其他一些地方看到的真实世界的例子迅速地追踪到:ST monad和 runST 。这很酷 ..

如何将IO monad中的值赋给RankNType限定的构造函数

(更新) 我使用免费Monad 到通用数据存储。我想将运行时用户选择的特定解释器(:: DataStore a - > IO a)与其他一些信息一起放入状态monad中。我似乎无法将任何东西放入数据结构的这个字段中。 如何将一个值放入定义为较高排名类型的字段中? $ $ b { - #LANGUAGE RankNTypes,DeriveFunctor# - } dat ..
发布时间:2018-06-04 15:42:46 其他开发