Haskell 有没有办法禁用GHC中的恒定折叠优化?

Haskell 有没有办法禁用GHC中的恒定折叠优化?,haskell,optimization,compilation,ghc,constantfolding,Haskell,Optimization,Compilation,Ghc,Constantfolding,我需要使用GHC-O1优化编译一些Haskell源代码,但禁用常量折叠优化。然而,我在GHC手册中找不到切换常数折叠的优化标志。这是否可以在保持其他优化的同时关闭它?如果使用-fn编译时不启用重写规则,则会禁用常量折叠。 此外,在我看来,如果您将常量传递给NOINLINE函数并在函数内部使用它们,则很有可能它不会被折叠。我很好奇:您的实际目的是什么?你为什么要禁用它?@chi我正在用Haskell开发一个编译器,目前它的功能非常有限。我首先使用GHC将Haskell中的源程序解析为Core,然后

我需要使用GHC-O1优化编译一些Haskell源代码,但禁用常量折叠优化。然而,我在GHC手册中找不到切换常数折叠的优化标志。这是否可以在保持其他优化的同时关闭它?

如果使用
-fn编译时不启用重写规则,则会禁用常量折叠。

此外,在我看来,如果您将常量传递给NOINLINE函数并在函数内部使用它们,则很有可能它不会被折叠。

我很好奇:您的实际目的是什么?你为什么要禁用它?@chi我正在用Haskell开发一个编译器,目前它的功能非常有限。我首先使用GHC将Haskell中的源程序解析为Core,然后在Core上执行转换。我想测试一些示例生成的代码的性能,这些示例的参数应该在运行时给出。但是,现在需要对参数进行硬编码,GHC将所有常量折叠起来,因此我没有得到计算结果的目标代码,而是只得到一个常量值,这不是很有帮助。我想知道如果将这些常量放在单独的模块中,并导出没有内联pragma的常量,会发生什么情况,例如,
module a where{-#NOINLINE#-}foo::Int;foo=42
。也许值得一试,但我只是在这里猜测。。。