Haskell 何时使用数据。强制?
在Haskell 何时使用数据。强制?,haskell,Haskell,在inline-c包中,有一个来自Haskell的调用c库GNU科学库gsl的命令 solveOde fun x0 f0 xend = coerce $ solveOdeC (coerce fun) (coerce x0) (coerce f0) (coerce xend) 我试图在Haskell中包装更多的gsl,并试图理解示例代码的每一行。那么为什么它使用数据。在这里强制执行?solveOdeC的类型几乎与solveOde的类型相同。前一种类型涉及多个点的CDouble,包括内部向量s
inline-c
包中,有一个来自Haskell的调用c库GNU科学库gsl
的命令
solveOde fun x0 f0 xend =
coerce $ solveOdeC (coerce fun) (coerce x0) (coerce f0) (coerce xend)
我试图在Haskell中包装更多的
gsl
,并试图理解示例代码的每一行。那么为什么它使用数据。在这里强制执行?solveOdeC
的类型几乎与solveOde
的类型相同。前一种类型涉及多个点的CDouble
,包括内部向量
s和任一点
。后者改为使用Double
代码依赖于具有相同表示形式的CDouble
和Double
。因此,使用强制
可以通过调用另一个函数来定义函数,而开销基本为零。如果没有这一点,就需要创建一个新的向量
,它将与第一个向量按位相同,只是为了满足类型检查器的要求,为此开销花费O(N)
老实说,我发现库中的定义过于冗长。相反,我们可以写
solveOde = coerce solveOdeC
solveOdeC
的类型几乎与solveOde
的类型相同。前一种类型涉及多个点的CDouble
,包括内部向量
s和任一点
。后者改为使用Double
代码依赖于具有相同表示形式的CDouble
和Double
。因此,使用强制
可以通过调用另一个函数来定义函数,而开销基本为零。如果没有这一点,就需要创建一个新的向量
,它将与第一个向量按位相同,只是为了满足类型检查器的要求,为此开销花费O(N)
老实说,我发现库中的定义过于冗长。相反,我们可以写
solveOde = coerce solveOdeC
要学究式,不是说“无运行时开销”而不是“基本零开销”更好吗?要学究式,不是说“无运行时开销”而不是“基本零开销”更好吗?