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库中的函数要求其输入函数具有该通用类型。

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

4

0 回答 0