问题标签 [rank-n-types]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
332 浏览

haskell - Rank 3 Types 函数示例

我有这个 Rank 3 Type 函数定义:

我正在努力为它写一个简单的例子。你能帮我吗?

0 投票
0 回答
84 浏览

haskell - 如何部分应用函数以产生多态 rank-1 类型?

我想将一个函数部分应用于f :: T一个值x :: [Double]以获得结果函数f' :: forall a . Floating a => [a] -> a。应该T是什么?我想不通。

一个困难是,在内部f,我需要通过一些数学运算(例如添加列表的每个元素)与(我们称之为)x :: [Double]的第一个参数相结合。f'y

我在内部知道这一点,x并且y两者都是Doubles,所以我最终使用 type f :: forall a . Floating a => [a] -> (forall b . Floating b => [b] -> b),并且每当 type 的值与 type组合时unsafeCoerce在内部使用(我知道,我知道......)。fab

对更好的类型有任何想法f吗?

forall a . Floating a => [a] -> a上下文:在部分应用后,我被迫生成更通用的类型,f因为我需要使用 Haskell autodiff library 获取结果函数的梯度ad。该grad库中的函数要求其输入函数具有该通用类型。

(为什么我需要部分应用目标函数?您可以想象这样的函数将具有内部常量,优化器不应将其视为变化状态向量的一部分。黑客可能是将常量视为状态,只是不更新​​常数,但在这种情况下,梯度的范数不会在局部最小值处变为零,其他事情可能会出错。)

0 投票
1 回答
53 浏览

haskell - 映射受约束的存在限定的高阶类型

我希望我的术语是正确的。

我想做以下事情:

不幸的是,GHC 似乎无法正确推断约束并抱怨:

这有可能吗?

0 投票
2 回答
436 浏览

haskell - 函数组合和 forall'ed 类型

假设我们有一些这样的代码,它的类型检查很好:

我们注意到这_pp x = _pa $ _pfa x太冗长了,我们尝试将其替换为_pp = _pa . _pfa. 突然代码不再进行类型检查,失败并出现类似的错误消息

我猜这是因为m类型别名的定义是forall'd —— 实际上,用m一些确切的类型替换可以解决问题。但问题是:为什么forall在这种情况下会破坏事物?

试图弄清楚为什么用GHC 抱怨统一变量和暗示性多态性的通常结果替换虚拟递归定义的_pfa加分点:_pa_pfa = undefined

0 投票
1 回答
91 浏览

haskell - 不允许赋值

我正在尝试使用类型级别的权限系统,并且我试图禁止分配不来自同一“来源”的值,即:

我已经尝试过 N 级(或暗示性?)类型:

但以上两种情况统一。如果我限制a

两种情况都没有。有没有办法实现这样的目标?在 Haskell 中可以吗?

(注意:Value构造函数不会是公开的,即无法创建独立的Value.)

0 投票
2 回答
74 浏览

haskell - 如何反序列化一个 JSON,其中相应的 Haskell 类型在运行时可用作为值?

我正在尝试在 Haskell 中实现一个 DelayedJob 端口(来自 Rails 世界)。

这是我拥有的类型类,它代表一个DelayedJob

以下是我打算如何使用它:

我一直在编写一个相当通用的invokeJob函数,该函数将从jobs表中读取一行,查看jobs.jobtype列并调用版本的正确runJob版本(即runJob属于正确类型类实例的函数)。

我有以下内容,但它充满了样板:

本质上,有没有办法deserialise在运行时动态地约束函数的具体类型,而不必编写这么多样板文件?

0 投票
0 回答
79 浏览

haskell - 如何解决此 Haskell 代码中的 skolemization 错误?

我有以下 Haskell 代码

我正在尝试使用逻辑公式在存在量化方面模拟普遍量化

我认为对偶公式是:

但我无法让 from 函数工作。

0 投票
1 回答
140 浏览

haskell - 在 Haskell 中使用 Numeric.AD 时如何正确匹配类型?

我正在尝试使用ad包实现 Newton–Raphson 寻根算法,但我无法正确匹配函数类型。我知道有一个类似问题的正确答案,这是由广告的创建者自己回答的,但自 1.0.6 版(当前版本为 4.3.4)以来,该软件包发生了很大变化。

当我迭代它时,第一个最小示例编译并工作:

但是,如果我尝试抽象函数,如下所示:

GHC 返回以下错误:

如果我使用Numeric.AD.Rank1.Forward而不是Numeric.AD,编译器会说它不能匹配awith Forward a,而不是awith AD s (Forward a)。我还尝试了几种创建双数的方法,x将其传递给f,例如snd . unbundle . f $ bundle x 1,但它只有在我g' x使用它创建一个新数字时才有效,就像在第一种情况下一样。在内部使用它newton也不起作用。

Numeric.AD, diff :: Num a => (forall s. AD s (Forward a) -> AD s (Forward a)) -> a -> a. 在 中Numeric.AD.Rank1.Forward,它是diff :: Num a => (Forward a -> Forward a) -> a -> a。那么为什么他们a -> a在第一种情况下接受类型函数,而在第二种情况下不接受呢?除了使用多态函数之外,在创建要使用的函数时我是否应该特别小心Numeric.AD?最后,我应该如何更改我的代码以使其工作?我知道这个包已经有一个 find root 的功能,但我还不想使用(因为我还在学习 Haskell),看着文档试图解决这个问题,感觉就像在绕圈子。

0 投票
1 回答
47 浏览

haskell - Haskell 中的 RankNTypes。列表理解有效,但地图无效

我想具体了解为什么map 在以下情况下不起作用:

将其拉入 GHCI 我得到以下信息:

效果很好,但是据我所知应该做同样的事情的以下内容不起作用。为什么不?这里有什么问题?

我正在使用的库是 haskell 广告库:https ://hackage.haskell.org/package/ad-4.3.4

干杯!

0 投票
1 回答
222 浏览

c# - 如何解决 C# 中的 N 级多态性?

假设有一个恒等函数,即:

我应该输入F什么?

我认为 C# 没有 N 级多态性,C# 不能正确输入F。这是正确的吗?

然后如何解决这些问题?