问题标签 [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.
haskell - Rank 3 Types 函数示例
我有这个 Rank 3 Type 函数定义:
我正在努力为它写一个简单的例子。你能帮我吗?
haskell - 如何部分应用函数以产生多态 rank-1 类型?
我想将一个函数部分应用于f :: T
一个值x :: [Double]
以获得结果函数f' :: forall a . Floating a => [a] -> a
。应该T
是什么?我想不通。
一个困难是,在内部f
,我需要通过一些数学运算(例如添加列表的每个元素)与(我们称之为)x :: [Double]
的第一个参数相结合。f'
y
我在内部知道这一点,x
并且y
两者都是Double
s,所以我最终使用 type f :: forall a . Floating a => [a] -> (forall b . Floating b => [b] -> b)
,并且每当 type 的值与 type组合时unsafeCoerce
在内部使用(我知道,我知道......)。f
a
b
对更好的类型有任何想法f
吗?
forall a . Floating a => [a] -> a
上下文:在部分应用后,我被迫生成更通用的类型,f
因为我需要使用 Haskell autodiff library 获取结果函数的梯度ad
。该grad
库中的函数要求其输入函数具有该通用类型。
(为什么我需要部分应用目标函数?您可以想象这样的函数将具有内部常量,优化器不应将其视为变化状态向量的一部分。黑客可能是将常量视为状态,只是不更新常数,但在这种情况下,梯度的范数不会在局部最小值处变为零,其他事情可能会出错。)
haskell - 映射受约束的存在限定的高阶类型
我希望我的术语是正确的。
我想做以下事情:
不幸的是,GHC 似乎无法正确推断约束并抱怨:
这有可能吗?
haskell - 函数组合和 forall'ed 类型
假设我们有一些这样的代码,它的类型检查很好:
我们注意到这_pp x = _pa $ _pfa x
太冗长了,我们尝试将其替换为_pp = _pa . _pfa
. 突然代码不再进行类型检查,失败并出现类似的错误消息
我猜这是因为m
类型别名的定义是forall
'd —— 实际上,用m
一些确切的类型替换可以解决问题。但问题是:为什么forall
在这种情况下会破坏事物?
试图弄清楚为什么用GHC 抱怨统一变量和暗示性多态性的通常结果替换虚拟递归定义的_pfa
加分点:_pa
_pfa = undefined
haskell - 不允许赋值
我正在尝试使用类型级别的权限系统,并且我试图禁止分配不来自同一“来源”的值,即:
我已经尝试过 N 级(或暗示性?)类型:
但以上两种情况统一。如果我限制a
:
两种情况都没有。有没有办法实现这样的目标?在 Haskell 中可以吗?
(注意:Value
构造函数不会是公开的,即无法创建独立的Value
.)
haskell - 如何反序列化一个 JSON,其中相应的 Haskell 类型在运行时可用作为值?
我正在尝试在 Haskell 中实现一个 DelayedJob 端口(来自 Rails 世界)。
这是我拥有的类型类,它代表一个DelayedJob
以下是我打算如何使用它:
我一直在编写一个相当通用的invokeJob
函数,该函数将从jobs
表中读取一行,查看jobs.jobtype
列并调用版本的正确runJob
版本(即runJob
属于正确类型类实例的函数)。
我有以下内容,但它充满了样板:
本质上,有没有办法deserialise
在运行时动态地约束函数的具体类型,而不必编写这么多样板文件?
haskell - 如何解决此 Haskell 代码中的 skolemization 错误?
我有以下 Haskell 代码
我正在尝试使用逻辑公式在存在量化方面模拟普遍量化
我认为对偶公式是:
但我无法让 from 函数工作。
haskell - 在 Haskell 中使用 Numeric.AD 时如何正确匹配类型?
我正在尝试使用ad包实现 Newton–Raphson 寻根算法,但我无法正确匹配函数类型。我知道有一个类似问题的正确答案,这是由广告的创建者自己回答的,但自 1.0.6 版(当前版本为 4.3.4)以来,该软件包发生了很大变化。
当我迭代它时,第一个最小示例编译并工作:
但是,如果我尝试抽象函数,如下所示:
GHC 返回以下错误:
如果我使用Numeric.AD.Rank1.Forward
而不是Numeric.AD
,编译器会说它不能匹配a
with Forward a
,而不是a
with 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),看着文档试图解决这个问题,感觉就像在绕圈子。
haskell - Haskell 中的 RankNTypes。列表理解有效,但地图无效
我想具体了解为什么map 在以下情况下不起作用:
将其拉入 GHCI 我得到以下信息:
效果很好,但是据我所知应该做同样的事情的以下内容不起作用。为什么不?这里有什么问题?
我正在使用的库是 haskell 广告库:https ://hackage.haskell.org/package/ad-4.3.4
干杯!
c# - 如何解决 C# 中的 N 级多态性?
假设有一个恒等函数,即:
我应该输入F
什么?
我认为 C# 没有 N 级多态性,C# 不能正确输入F
。这是正确的吗?
然后如何解决这些问题?