Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell 何时使用数据。强制?_Haskell - Fatal编程技术网

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

要学究式,不是说“无运行时开销”而不是“基本零开销”更好吗?要学究式,不是说“无运行时开销”而不是“基本零开销”更好吗?