gpt4 book ai didi

haskell - 何时使用 Data.Coerce?

转载 作者:行者123 更新时间:2023-12-02 18:46:33 25 4
gpt4 key购买 nike

inline-c包中,有一个example从 Haskell 调用 C 库 GNU Scientific Library gsl

solveOde fun x0 f0 xend =
coerce $ solveOdeC (coerce fun) (coerce x0) (coerce f0) (coerce xend)

我正在尝试在 Haskell 中包装更多的 gsl 内容,并尝试理解示例代码的每一行。那么为什么它在这里使用 Data.Coerce 呢?

最佳答案

solveOdeC 的类型与 solveOde 的类型几乎相同。前一种类型在多个点上涉及 CDouble,包括在 VectorEither 内部。后者使用 Double

该代码依赖于具有相同表示的 CDoubleDouble。因此,使用强制可以通过简单地调用另一个函数来定义函数,而无需运行时开销。如果没有这个,就需要创建一个新的 Vector,它与第一个向量按位相同,只是为了满足类型检查器的要求,为此开销花费 O(N)。

说实话,我发现库中的定义不必要地冗长。相反,我们可以这样写:

solveOde = coerce solveOdeC

关于haskell - 何时使用 Data.Coerce?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/67360657/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com