performance - 严格构造函数的部分应用

标签 performance haskell

假设我有

data Foo a = Foo !Int a [a] | Bar [a]

所以Foo构造函数的第一个参数是严格的,它将被解包。进一步假设我正在传递 Foo n到高阶函数 ff不会被内联(所以 Foo n 实际上是通过了)。我通过 -O2 获得的核心表示n被装箱,然后传递给 Foo ,并将结果传递给 f .我的问题:调用我会更好吗
f (\a b -> Foo n a b)

避免拳击n ?还是会导致其他一些性能问题?

我实际上是在想定义
foo' !n = \a b -> Foo n a b

并调用f (foo' n) ,我认为应该做同样的事情,但我想最好具体问一下。

最佳答案

我打开了GHC Trac ticket 12990为了这。 Reid Barton 和 Simon Peyton Jones 提出了一个修复(允许在部分应用时内联包装函数),我将其提交为 GHC Phabricator differential D2891 .该补丁已应用于 master 分支,并将包含在 GHC 8.2 中。

关于performance - 严格构造函数的部分应用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36818270/

相关文章:

java - Presto集群+如何根据内存资源调优jvm.config

linux - Linux 中的中断延迟

haskell - Haskell 中的软件事务内存 : Couldn't match expected type STM a0 with actual type IO ()

haskell - 是否可以使用 GHC 泛型重新实现 `Enum` 派生

haskell - 'concat' : transforming a flattened list into a nested list 的逆

mysql - 如何加快mysql查询速度

javascript - 如何安排 javascript 对象以获得更好的性能

python - 将python与c集成以提高性能是否合理?

haskell - 递归添加到二叉树

Haskell 无限类型